Проблема с типом, который я использовал для определения 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 до 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

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