- Поначалу все работало правильно, и я получил три окна сообщений.
- Основная проблема связана с файлом Hooking.cpp. Хотя появляется первое окно сообщения/originql, но после этого программа завершается, не показывая второе/зацепленное окно.
- Я поместил rOffset как обычное целое число: DWORD rOffset; rOffset = dst-src;
Я заменил memcpy() на CopyMemory(). - Я изменил тип патча на BYTE : BYTE patch[5 ] = {0};
- Я попытался изменить тип обоих патчей на void * и rOffset на const void*. Однако я столкнулся с ошибками из-за того, что патч будет получать байты.
- Не знаю, проблема в количестве байт, которое нужно настроить с 5 до 1 более высокое значение.
- Я пробовал 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");
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... is-the-jum