Итак, я начал изучать c ++ в последние несколько дней, так как хотел немного взломать игру и реверс-инжиниринг. Я попытал счастья с помощью базового метода обхода, просто вставив jmp в свою функцию в память моих целевых программ, которая работала нормально. Однако я хотел начать использовать обходную библиотеку Microsoft и попробовал. Моя единственная цель сейчас - регистрироваться каждый раз, когда вызывается функция.
По какой-то причине моя DLL записывает неправильный адрес в память для перехода и, таким образом, вылетает программа.
Прыжок, прикрепленный адрес приводит к пустой памяти
Он пишет на правильный адрес, но просто не переходит на правильное место. Я ОЧЕНЬ новичок в c ++, так что это, вероятно, моя ошибка, но я не могу заставить ее работать.
#include "stdafx.h"
#include <detours.h>
#include <windows.h>
#include <iostream>
DWORD AddressOfFunc;
typedef int (__cdecl* func)(int x);
int hookFunc(int x) {
std::cout << "TRIGGERED!" << std::endl;
func originalFunc = (func)AddressOfFunc;
return originalFunc(x);
}
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) {
AddressOfFunc = (DWORD)GetModuleHandleA("Borderlands2.exe") + 0xA18940;
if (dwReason = DLL_PROCESS_ATTACH) {
AllocConsole();
FILE* fp;
freopen_s(&fp, "CONOUT$", "w", stdout);
std::cout << "Injected!" << std::endl;
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach((PVOID*)&AddressOfFunc, &hookFunc);
DetourTransactionCommit();
}
else if (dwReason == DLL_PROCESS_DETACH) {
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(LPVOID&)AddressOfFunc, &hookFunc);
DetourTransactionCommit();
}
}
IdaPro сообщает мне, что функция принимает int и возвращает int, но мне не хватает опыта, чтобы проверить любую эту информацию, поэтому любая помощь будет оценена.