私はCodeProjectでさまざまなことを読んでいて、この記事を見つけました:http: //www.codeproject.com/Articles/29527/Reverse-Engineering-and-Function-Calling-by-Addres
そこで、インジェクターとDLLを作成し、サンプルの実行可能ファイルを取得しました。基本的にF11を押すと出力されます:http: //i.stack.imgur.com/YIygV.jpg
そのため、チュートリアル全体に従いましたが、DLLで使用されるアドレスは常に変更されています。具体的にはこれ:
pFunctionAddress pMySecretFunction = (pFunctionAddress)(0x004113C0);
彼のチュートリアルでは、関数のアドレスは0x004113C0です。私の場合、それは別のものであり、私は持っているものを取り、それを使用します。完全に機能しますが、実行可能ファイルを閉じて開くと、機能しなくなり、OllyDbgはアドレスがまったく新しいものであることを示します。
そこで少し調べて、OllyDbgでブレークポイントを追加し始めました。アドレスは常に次のようになることがわかりました。
main + 4C
「main」はこれらの実行可能ファイルのメインモジュールだと思います。関数へのこのアドレスを常に見つけるにはどうすればよいですか?それは常に変化し、私はこの時点で無知だからです。この記事では、実行可能ファイルを再度開いたときに何が起こるかについては説明していません。解決策を見つけるために5時間費やしました。
前もって感謝します!
編集:
みなさん、本当にありがとうございました。特にmfcのおかげで、ようやくわかりました!DLL_PROCESS_ATTACHを押すたびに、次のようにグローバルHMODULEを実行可能ファイルのアドレスに設定しました。
HMODULE g_hExeModule;
g_hExeModule = GetModuleHandle(L"TutExample.exe");
そして、いくつかのテストの後、関数アドレスは常に実行可能ファイル+ 0x11014のアドレスであるように思われるので、呼び出しでは次のようにします。
pFunctionAddress pMySecretFunction = (pFunctionAddress)((DWORD)g_hExeModule + 0x11014);