アセンブラー、C++、および PE ファイルのしくみについてさらに学習する方法として、exe パッカー/プロテクターをコーディングしようとしています。現在、EP を含むセクションがキーと XOR され、復号化コードを含む新しいセクションが作成されるように動作しています。復号化後に元の EP に JMP しようとする場合を除いて、すべてうまくいきます。
基本的に私はこれを行います:
DWORD originalEntryPoint = optionalHeader->AddressOfEntryPoint;
// -- snip -- //
crypted.put(0xE9);
crypted.write((char*)&orginalEntryPoint, sizeof(DWORD));
しかし、エントリ ポイントにジャンプする代わりに、ollydbg は、このコードが次のように逆アセンブルすることを示しています。
00404030 .-E9 00100000 JMP 00405035 ; should be 00401000 =[
ollyで手動で変更しようとすると、新しいオペコードが次のように表示されます
00404030 -E9 CBCFFFFF JMP crypted.00401000
0xCBCFFFFF はどこから来たのですか? C++ 側からどのように生成しますか?