私はただ疑問に思っていました-自己変更バイナリをどのように逆アセンブルしますか? olly や IDA は静的逆アセンブラーなので使用できないと思いますよね?命令の途中にジャンプすると、逆アセンブラはどうなりますか? そして、変成エンジンをどのように分析するのでしょうか?
2 に答える
OllyDbg と IDA はどちらも静的アナライザーであるだけでなく、コードを実行することもできます。IDA はコードをリモートで実行することもでき、私の知る限り、埋め込みデバッグも実行できます。もちろん、ある時点でプログラムの実行を「中断」し、逆アセンブルを見ると、(両方のプログラムで) プログラム自体に加えられた変更を含む、プログラムの現在の状態が反映されます。
命令の途中にジャンプすると、逆アセンブラはどうなりますか?
私の経験によると、上記の逆アセンブラは両方ともこの状況を処理できます。たとえば、ここで、OllyDbg がそれを管理する方法を参照してください。これは、EIP が 00892C0E の場合のスクリーンショットです。
そして、命令の途中で EIP = 00892C0F を作成すると、次のようになります。
ご覧のとおり、単に命令を再分解し、別の (ただし有効な) オペコードにします。
そして、変成エンジンをどのように分析するのでしょうか?
他のコードと同じように。あなたが言及しているトリック(命令の途中にジャンプして、それ自体を変更する)は、逆アセンブラとデバッガが現在ほど賢くなかった少し前に主に人気がありました。
もちろん、静的分析は非常に難しい場合がありますが、バイナリを完全にオフラインで分析し、(頭の中で) "モーフィング" を解読して、コードが何をするかを理解することはもちろん可能です。しかし、デバッガーをライブで使用できる場合は、コードが何を実行しているかを簡単に確認できます。
もちろん、これらはすべて、コードを書く人とそれを分析する人の間の果てしない競争です。どちらが勝つかは、どちらが早くあきらめるかにかかっています。
Ollydbg はそのような状況を処理します。
あなたが探している機能は「分析」です。その場所で新しい命令を再アセンブルし、更新されたコードで CPU ウィンドウをリフレッシュします。
アドレス X の命令が何らかの自己修正変更を行うと仮定します。その命令を実行した後、「分析」コマンドを実行できます。これは、その基本ブロック周辺のコードを再逆アセンブルし、更新された命令で CPU をリフレッシュします。
分析するには、CPU ウィンドウの目的の場所を右クリックし、[ 分析] > [コードの分析] をクリックします。ショートカットはCtrl-Aです。