0

IDA で逆アセンブルしているバイナリ ファイルがあります。IDA はすべてのコード パスを見つけることができないため、手動でバイナリ内の未調査の領域を見つけて、基本的に Ctrl+U と C を繰り返してコードに変換する必要があります。これは明らかに非常に時間がかかります。

未踏の領域を自動的に見つけてコードに変換する方法はありますか?

4

2 に答える 2

3

最終的に、バイナリ イメージを ELF ファイルに変換し、バイナリ コードを実行可能としてマークすることにしました。

この ELF ファイルを IDA にロードしたとき、ELF ファイル ヘッダーは IDA にこれがコード セクションであることを伝え、IDA は独自のヒューリスティックを使用して可能な限りコードを自動的に逆アセンブルし始めました。

これを実現するために使用した短いスクリプトを次に示します。

于 2012-11-07T09:23:02.883 に答える
2

未踏の領域を自動的に見つけてコードに変換することはできますが、そうする場合は注意が必要です。ご存知のように、多くの未探索の領域は有効なコードではないからです。

バイナリによっては、最初に .text セクションのすべての未調査領域のリストを出力すると便利な場合があります。IDAPython はこれを行うことができます。

addr = SegByName(".text")
end = SegEnd(addr)
while addr < end and addr != BADADDR:
    if isUnknown(GetFlags(addr)):
        print "0x%08x" % addr
        addr = NextHead(addr, BADADDR)
    else:
        addr = NextAddr(addr)
print "Done."

IDAPython がインストールされている場合は、[ファイル] > [Python コマンド...] を選択して上記のコードを貼り付けることで実行できます。結果が出力ウィンドウに出力され、出力されたアドレスのいずれかをクリックして、逆アセンブリの対応する領域にジャンプできます。

コードとして定義する必要がある同様の未調査の住所の大きな繰り返しセクションがあることがわかった場合は、上記のスクリプトを変更してそれらの住所をコードに変換できます。アドレスをコードとして定義する関数が MakeCode() です。

上記のすべての機能の大まかなリファレンスについては、こちらを参照してください。ヘルプ インデックスも役立つ場合があります。そのリファレンスは、IDA のオリジナルの組み込みスクリプト言語である IDC を対象としていますが、すべての IDC 関数に相当する IDAPython は実質的に同一である必要があります。

于 2012-11-06T21:33:26.317 に答える