я использую EasyHook внедрить DLL в 64-битное приложение. Кажется, что базовая перехват работает, но как только DLL вызывает метод «LhInstallHook», внедренное приложение вылетает. Я думаю, что я нашел правильный адрес / смещение для желаемой функции. Поэтому я подозреваю, что некоторые из моего кода (в DLL) повреждены.
Инжектор:
NTSTATUS nt = RhInjectLibrary(
processId, // The process to inject into
0, // ThreadId to wake up upon injection
EASYHOOK_INJECT_DEFAULT,
NULL, // 32-bit
dllToInject, // 64-bit only
NULL, // data to send to injected DLL entry point
NULL // size of data to send
);
DLL:
struct Player {
_BYTE gap0[128];
__int64 saleStats;
_BYTE gap88[104];
int health;
int units;
};
typedef __int64 func(Player*, int);
func* FunctionBase = (func*)0x7FF7E4513F3D; // Function address found by debugging assembly
__int64 FunctionHook(Player *playerRef, int unitsToAdd);
__int64 FunctionHook(Player *playerRef, int unitsToAdd)
{
Beep(500, 500); // Beep to signal success
return FunctionBase(playerRef, unitsToAdd); // Execute base
}
NTSTATUS result = LhInstallHook( // This is the point where the host crashes
(void*)0x7FF7E4513F3D, // Function to hook
FunctionHook, // delegate
NULL, // callback
&hHook); // handler
Я думаю, что мое использование адреса / смещения неверно, но я не смог найти ресурсы по этому вопросу.
Задача ещё не решена.
Других решений пока нет …