1

Windows 7、32ビットホームプロで実行

Visual Studio 2008で非常にシンプルな数行のアプリを作成し、コンパイルして、リリースモードの標準ライブラリと実行可能test.exeにリンクしました。

cのコードは次のとおりです。

char* test = "h";
int main()
{
    _asm 
    {
        push 0xFEEDBACC;
    }
    MessageBoxA(0,test,test,0);
}

これにより、VS2008で表示される次のマシンコードと対応するアセンブリが生成されます(アドレスは以下にリベースされ、通常の開始仮想アドレスは0x4001000)

char* test = "h";
int main()
{
    _asm 
    {
        push 0xFEEDBACC;
00261000 68 CC BA ED FE   push        0FEEDBACCh 
    }
    MessageBoxA(0,test,test,0);
00261005 6A 00            push        0    
00261007 68 F4 20 26 00   push        offset string "h" (2620F4h) 
0026100C 68 F4 20 26 00   push        offset string "h" (2620F4h) 
00261011 6A 00            push        0    
00261013 FF 15 A4 20 26 00 call        dword ptr [__imp__MessageBoxA@16 (2620A4h)] 
}

ここで、MessageBoxを呼び出す代わりに、プッシュ0の直後に別の文字列 "h"をプッシュしたいので、hexeditを使用して、FF15A420 ...を含むセクションを検索し、上書きして次のようにします。

90 68 CC BA ED FE

IDAで実行可能ファイルを無料で開くと、.textセクションに次のように表示されます。

.text:00401000                 push    0FEEDBACCh
.text:00401005                 push    0
.text:00401007                 push    offset unk_4020F4
.text:0040100C                 push    offset unk_4020F4
.text:00401011                 push    0FFFFFF90h
.text:00401013                 nop
.text:00401014                 push    0FEEDBACCh
.text:00401019                 retn

これは今のところ良さそうです、私は0x401014で私の新しいプッシュステートメントを見る。

ここで、IDAフリーでexeを突然デバッグすると、コードが変更されます(以下を参照)。プッシュ0FEEDBACCプッシュ0FFA4BACCになり、最初の2バイトが変更された理由がわかりません。

.text:00F71000 push    0FEEDBACCh
.text:00F71005 push    0
.text:00F71007 push    offset unk_F720F4
.text:00F7100C push    offset unk_F720F4
.text:00F71011 push    0FFFFFF90h
.text:00F71013 nop
.text:00F71014 push    0FFA4BACCh  // im puzzled!

ここで何が起こっているのか、なぜ私がプッシュしている番号が変更されているのかを誰かが説明できますか?このアドレスの開始物理バイトを変更しようとしましたが(何らかのアライメントの問題が疑われます)、違いは見られませんでした。

ありがとう、

スキモン

4

1 に答える 1

3

最後の2つの画面の間でイメージベースも変更されました。

再配置されたばかりだと思います(以前はアドレスでした):0x15のdword:A4 20 26 00IATを指しているため、再配置後、上位ワード(bytes 0x17 0x18)は次のように変更されます。

0x00F7-0x0040=0x00B7に。

画像ベースのランダム化を無効にしてみてください(または単に再配置を削除してください)。

于 2010-10-19T23:50:02.053 に答える