我正在为游戏开发启动器。想要拦截游戏对打印文本的函数的调用。
不知道包含这个函数的代码是动态链接的还是静态链接的。所以我什至不知道函数名。
我确实通过Microsoft Detours、Ninject 和其他一些人截获了这个游戏的一些windows-api 调用。
但这一个也不在导入表中。
我应该怎么做才能捕捉到这个函数调用?应该使用什么分析器?国际开发协会?如何做到这一点?
编辑:
终于找到函数地址了。谢谢,斯金诺!
试图将它与 Detours 挂钩,注入 dll。注入的 DllMain:
typedef int (WINAPI *PrintTextType)(char *, int, float , int);
static PrintTextType PrintText_Origin = NULL;
int WINAPI PrintText_Hooked(char * a, int b, float c, int d)
{
return PrintText_Origin(a, b, c , d);
}
HMODULE game_dll_base;
/* game_dll_base initialization goes here */
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if(fdwReason==DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hinstDLL);
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
PrintText_Origin = (PrintTextType)((DWORD)game_dll_base + 0x6049B0);
DetourAttach((PVOID *)&PrintText_Origin , PrintText_Hooked);
DetourTransactionCommit();
}
}
它按预期挂钩。参数a
具有应显示的文本。但是当调用原始函数应用程序return PrintText_Origin (a, b, c , d);
崩溃(http://i46.tinypic.com/ohabm.png,http://i46.tinypic.com/dfeh4.png)
原功能拆解:
绕道后:
编辑2:
绕道后:
PrintText_Hooked
反汇编http://pastebin.com/FPRMK5qt w3_loader.dll是注入的dll
我不擅长 ASM,请告诉我可能出了什么问题?