RunPEとして知られている「Win32EXEの動的フォーク」の既知の方法を実装しようとしています。私の問題は、http://www.security.org.sg/code/loadexe.htmlの3番目のポイントで述べたように、「ベースアドレス」の正しい結果を取得できないことです。
これは私のコードです:
DWORD* peb;
DWORD* baseAddress;
...snip...
GetThreadContext(hTarget, &contx)
peb = (DWORD *) contx.Ebx;
baseAddress = (DWORD *) contx.Ebx+8;
_tprintf(_T("The EBX [PEB] is: 0x%08X\nThe base address is: 0x%08X\nThe Entry Point is: 0x%08X\n"), peb, baseAddress, contx.Eax);
出力は次のようになります。
EBX [PEB]は次のとおりです:0x7FFD4000
ベースアドレスは次のとおりです:0x7FFD4020
エントリポイントは次のとおりです:0x00401000
私の問題はbaseAddressポインターの実装にあると思いますが、何が問題なのか正確にはわかりません。または、上記の記事を正しく理解しておらず、baseAddressがImageBaseではない可能性があります。そうであれば、baseAddressとは何ですか?
Win 7 64bとWin-XPで実行しようとしましたが、どちらでも同じ誤った結果が得られます。