ゲームのランチャーを開発しています。テキストを出力する関数のゲームの呼び出しをインターセプトしたい。
この関数を含むコードが動的にリンクされているか静的にリンクされているかはわかりません。そのため、関数名もわかりません。
私は、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 )
元の関数の分解:
迂回後:
EDIT2:
迂回後:
PrintText_Hooked
逆アセンブリhttp://pastebin.com/FPRMK5qt w3_loader.dllは注入された dll です
私は ASM が苦手です。何が問題なのか教えてください。