1

私の非常に古いプログラムの1つに、エラーのメッセージボックスが表示され続けているので、それを取り除く必要があります。ソースを失ったので、現在アセンブリを使用しています。

アセンブリとメッセージボックスのあるセクションは次のようになります

Cmp, ebx 4F6h
Jl short loc 10000dec
Push 30h
Push offset caption ; error ...
Push offset detailsitspast08
Push 0
Call ds: messageboxa

メッセージボックスが表示されないようにこれを変更するにはどうすればよいですか?

4

1 に答える 1

3

IDA は問題ありませんが、Hex WorkshopXVI32などの 16 進エディタも必要です。方法は次のとおりです。

IDA で、置換する最初の行にテキスト カーソルを置きますpush 30h。逆アセンブル ウィンドウの下のステータスバーの左側を見てください。物理アドレスと仮想アドレスの 2 つの 16 進アドレスが表示されます。物理的なものに注意してください。次に、 の後 の最初の命令に注目しますcall ds:MessageBoxA。ここでも、物理アドレスをメモします。

16 進エディタで実行可能ファイルを開き (最初にバックアップを作成してください)、最初の物理アドレスに移動します。バイトを挿入するのではなく上書きしていることを確認し0x90、2 番目のアドレスに到達するまで値を書き続けます。上書きしないでください。

この変更されたファイルを別の名前で保存し、IDA の別のインスタンスで開き (元のファイルを上書きすると、IDA は新しいファイルを並べて開くことができなくなります)、仮想アドレスに移動し、すべてのバイトが正しく置き換えられました。それでおしまい。

ヒント: IDA の[オプション] > [全般] に移動し、[オペコード バイト数] を10 などのゼロ以外の値に設定すると、左側に各命令を構成するバイトが表示されます。これらをカウントして、正しいバイト数を置き換えたことを確認できます。(または、明らかに、終了アドレスから開始アドレスを差し引くこともできます)。

スクリーンショットの例を次に示します (ショットのアプリケーションはもちろん異なりますが、要点は同じです)。

前:

元の指示

後:

変更された指示

于 2012-09-09T09:30:39.093 に答える