07-01-2023, 01:00 AM
(05-01-2023, 07:27 AM)aijundi كتب : int addr = 0x0048DA03;int jumpFarToAddr = 0x0048A512;
unsigned char hex[5];
const unsigned char command = 0xE9;
*hex = command;
int offset = jumpFarToAddr - addr - sizeof(hex);memcpy(&hex[1], &offset, sizeof(offset));
VirtualProtectEx(hProcess, (void*)addr, 20, PAGE_READWRITE, &oldProtect);
WriteProcessMemory(hProcess, (void*)addr, (void*)hex, sizeof(hex), NULL);
VirtualProtectEx(hProcess, (void*)addr, 20, oldProtect, &oldProtect);
التعديل اللي قمت بإضافتة على الكود وضح لي أشياء كانت مبهمة بالنسبة لي.
أشكرك أخي العزيز.
(05-01-2023, 08:55 PM)Newhak كتب : هل العناوين في الذاكرة او الملف
جرب ان تستخدم
Push 0x00000000
ret
بدلا من
JMP
فقط تحتاج 6 بيتات
أشكرك أخي العزيز على إضافتك المفيدة.
(06-01-2023, 05:09 AM)M!X0R كتب : بعد تنقيح البريمج Jump2Hex
في حالة JMP SHORT
0048D9B2 - 0048DA03 = FFFFFFAF - 2 = FFFFFFAD
تسحب آخر بايت من النتيجة لإستعماله مع أمر القفز EB
أو تحول النتيجة من DWORD إلى Byte و تساوي AD ثم تستعمله مع أمر القفز EB
في حالة JMP Long
نفس العملية و لكن تطرح 5 بدل 2
0048A512 - 0048DA03 = FFFFCB0F - 5 = FFFFCB0A
لناتج لازم يعكس قبل الإستعمال مع أمر JMP Long أي E9 0A CB FF FF
* الأرقام المطروحة في العمليات السابقة (2 و 5) أرقام ثابتة فهي تمثل حجم الأمر JMP SHORT يحتاج 2 بايت في عملية الكتابة و JMP Long يحتاج 5 بايت للكتابة
أشكرك أخي العزيز أنك وضحت هدة الجزئية لأنها مهمة, وفعلا أفادتني.
.
.
.
.
الحمد لله اللغز أصبح مفهوم الآن, وكل أخ رد عليا وضح لي جزئية من الموضوع وفى النهاية اتضحت كل النقاط وتم حقن الكود بشكل صحيح كما كنت أريد. أشكركم جميعا...........