2010-11-23 12 views
0
私はexeファイルは、私が使用していますので、コードを実行すると、メッセージボックスを表示するには、exeファイルを読み込み、コードを挿入するためにC#を使用しています

は以下の通りです:私は、仮想アドレスで使用しています自動仮想アドレスをメモリアドレスに変換しますか?

6A 00    //push 0 
68 OXxxxx   //push Address of Message Title 
68 OXxxxx   //push Address of Message Body 
6A 00    //push 0 
FF 15 OXxxxx  //Call Address of User32.MessageBoxA 
E9 OXxxxx   // jmp to old entry point 

すべてのアドレスが、新しいexeは実行できません、私はアドレスが(Windowsローダーで)メモリアドレスに変換する必要がありますが、私はそれを行うことができると思う??

ありがとう

答えて

2

仮想アドレスはメモリアドレスです。
.exeに再配置テーブルがある場合、新しいベースアドレスに再配置することができます。pushcall命令に再配置テーブルのエントリがないと、そのテーブルは破損します。

また、あなたのコードで正しい文字列が使用されていないため、コードが正しいかどうかはわかりません。 ruslikは、我々はファイルにパッチを適用すれば、私たちが知らない、述べたように:UPD

6A 00   // push 0 
6A 00   // push 0 
E8 04 00 00 00 // call $+5+4 
31 32 33 00 // '123', 0 
6A 00   // push 0 
68 XX XX XX XX // push user32.MessageBoxA address, it's the same in all processes 
C3    // retn 
E9 XX XX XX XX // jmp OEP 

その問題は、再配置テーブルのエントリが欠落していることを確認するには、以下の位置独立コードを試してみてくださいuser32.MessageBoxAアドレスですので、別の方法で見つけてください。

我々はそのIATエントリのアドレスを知っている場合、我々は独立した何かをベースにFF 15 (__imp_MessageBoxA)を交換する必要があります。

 E8 00 00 00 00 // call base: 
base: 
    58    // pop eax 
    05 XX XX XX XX // add eax, __imp_MessageBoxA - base 
    FF 10   // call dword ptr [eax] 
+0

2質問: 1 - 何である (E8 04 00 00 00 // $ + 5 +を呼び出します4 31 32 33 00 // '123'、0 6A 00 // push 0) 2 - 再配置テーブルのプッシュ/コール命令のエントリを追加する方法 – Radi

+0

@radi 1. - これはアセンブリコードです。あなたはPEに感染しようとする前にそれを学ぶべきです。 2. - PEフォーマットの仕様を読んでください。 – Abyx

+0

小規模な訂正: 'call'は再配置エントリを必要としません。実行する必要があるのはインポートテーブルです。 –

関連する問題