IDA は問題ありませんが、Hex WorkshopやXVI32などの 16 進エディタも必要です。方法は次のとおりです。
IDA で、置換する最初の行にテキスト カーソルを置きますpush 30h
。逆アセンブル ウィンドウの下のステータスバーの左側を見てください。物理アドレスと仮想アドレスの 2 つの 16 進アドレスが表示されます。物理的なものに注意してください。次に、 の後 の最初の命令に注目しますcall ds:MessageBoxA
。ここでも、物理アドレスをメモします。
16 進エディタで実行可能ファイルを開き (最初にバックアップを作成してください)、最初の物理アドレスに移動します。バイトを挿入するのではなく上書きしていることを確認し0x90
、2 番目のアドレスに到達するまで値を書き続けます。上書きしないでください。
この変更されたファイルを別の名前で保存し、IDA の別のインスタンスで開き (元のファイルを上書きすると、IDA は新しいファイルを並べて開くことができなくなります)、仮想アドレスに移動し、すべてのバイトが正しく置き換えられました。それでおしまい。
ヒント: IDA の[オプション] > [全般] に移動し、[オペコード バイト数] を10 などのゼロ以外の値に設定すると、左側に各命令を構成するバイトが表示されます。これらをカウントして、正しいバイト数を置き換えたことを確認できます。(または、明らかに、終了アドレスから開始アドレスを差し引くこともできます)。
スクリーンショットの例を次に示します (ショットのアプリケーションはもちろん異なりますが、要点は同じです)。
前:

後:
