تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟
#14
(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 بايت للكتابة

أشكرك أخي العزيز أنك وضحت هدة الجزئية لأنها مهمة, وفعلا أفادتني.
.
.
.
.
الحمد لله اللغز أصبح مفهوم الآن, وكل أخ رد عليا وضح لي جزئية من الموضوع وفى النهاية اتضحت كل النقاط وتم حقن الكود بشكل صحيح كما كنت أريد. أشكركم جميعا...........
أعضاء أعجبوا بهذه المشاركة : Newhak


الردود في هذا الموضوع
RE: كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - بواسطة lionking - 07-01-2023, 01:00 AM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم