تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟
#1
أنا أحاول حقن تعليمه القفز إلى مكان أخر في الكود وذلك في Process أخرى والتي تسمى External injection, وقد قمت بعمل ذلك بالفعل ونجحت عملية الحقن ولكن العنوان address الذي تم حقنة بجانب تعليمه القفز JMP غير صحيح.

على سبيل المثال: 
unsigned int addr = 0x0048DA03;
unsigned int jumpToAddr = 0x0048D9B2;
unsigned char command[] = { 0xEA };
VirtualProtectEx(hProcess, (void*)addr, 20, PAGE_READWRITE, &oldProtect);
WriteProcessMemory(hProcess, (void*)addr, (void*)command, sizeof(command), NULL); // this line for jmp
WriteProcessMemory(hProcess, (void*)addr, (void*)jumpToAddr, sizeof(jumpToAddr), NULL); // this line for the address
VirtualProtectEx(hProcess, (void*)addr, 20, oldProtect, &oldProtect); 

والنتيجة كانت بهذا الشكل:

[صورة مرفقة: 20221230-195139.png]

كما رأينا في الصورة, وعند تنفيذ الكود نجد أن العنوان الذي سيتم القفز إليه غير صحيح.
أيضا تحدث هذه المشكلة أيضا عندما نقوم بحجز مساحة أفتراضية VirtualAlloc ليتم القفز إليها:
 
void* reservedMemAddress = VirtualAllocEx(hProcess, NULL, 100, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (reservedMemAddress) {
WriteProcessMemory(hProcess, (void*)addr, (void*)command, sizeof(command), NULL);
WriteProcessMemory(hProcess, (void*)addr, (void*)reservedMemAddress, sizeof(reservedMemAddress), NULL);
}


وسؤالى الان هو:
  1. كيف يمكنني كتابة العنوان Address الذي سيتم القفز إليه JMP بشكل صحيح؟
  2. كيف أقوم بحقن التعليمة كمثال JMP 0x0048D9B2 بسطر كود واحد بأستخدام الدالة WriteProcessMemory بدلا من تكرار كتابة الدالة مرة لكتابة أمر JMP ومرة لكتابة العنوان Address؟
أعضاء أعجبوا بهذه المشاركة :


الردود في هذا الموضوع
كيف يمكن حقن تعليمه القفز مع العنوان [jump + address] داخل Process أخر بشكل صحيح ؟ - بواسطة lionking - 31-12-2022, 01:22 PM

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


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