Проблема с типом, который я использовал для определения rOffset, src и dst, или инструкция перехода больше не работает (C++

Программы на C++. Форум разработчиков
Anonymous
Проблема с типом, который я использовал для определения rOffset, src и dst, или инструкция перехода больше не работает (

Сообщение Anonymous »

Я попробовал этот проект по перехвату Windows API: https://cocomelonc.github.io/tutorial/2 ... ing-1.html
. Сначала все работало правильно, и я получил три окна сообщений.
. Основная проблема связана с файлом Hooking.cpp. Хотя появляется первое окно сообщения/originql, но после этого программа завершается, не показывая второе/зацепленное окно.
Поэтому я пробовал некоторые вещи, например, но это не работает:
  • Я указал rOffset как обычное целое число: DWORD rOffset; rOffset = dst-src;
  • Я заменил memcpy() на CopyMemory().
  • Я изменил тип патча на BYTE: BYTE patch[5] = {0};
  • Я пытался изменить тип патча на void * и rOffset на const void*. Однако я столкнулся ошибки из-за того, что патч будет получать байты.
  • Не знаю, проблема ли в количестве байт, которое нужно отрегулировать с 5 на большее значение.
    Я пробовал использовать x64dbg, но не знал, как его использовать, если кто-нибудь может помочь, как работать с процессами памяти в нем и находить ошибки.

Код: Выделить всё

// hooking logic
void setMySuperHook() {
HINSTANCE hLib;
VOID *myFuncAddress;
DWORD *rOffset;
DWORD src;
DWORD dst;
CHAR patch[5]= {0};

// get memory address of function Cat
hLib = LoadLibraryA("pet.dll");
hookedAddress = GetProcAddress(hLib, "Cat");

// save the first 5 bytes into originalBytes (buffer)
ReadProcessMemory(GetCurrentProcess(), (LPCVOID) hookedAddress, originalBytes, 5, NULL);

// overwrite the first 5 bytes with a jump to myFunc
myFuncAddress = &myFunc;

// will jump from the next instruction (after our 5 byte jmp instruction)
src = (DWORD)hookedAddress + 5;
dst = (DWORD)myFuncAddress;
rOffset = (DWORD *)(dst-src);

// \xE9 - jump instruction
memcpy(patch, "\xE9", 1);
memcpy(patch + 1, &rOffset, 4);

WriteProcessMemory(GetCurrentProcess(), (LPVOID)hookedAddress, patch, 5, NULL);

}

int main() {
// I delated some code here to get a small
// call original Cat function
(catFunc)("meow-meow");

// install hook
setMySuperHook();

// call Cat function after install hook
(catFunc)("meow-meow");

}
Если кто-то может помочь разобраться в проекте hool, у меня всего несколько простых вопросов

Подробнее здесь: https://stackoverflow.com/questions/786 ... is-the-jum

Вернуться в «C++»