X86_64、x86、ARM 実行可能ファイルを LLVM IR (逆アセンブリ) に変換したいと考えています。
どのような解決策を提案しますか?
X86_64、x86、ARM 実行可能ファイルを LLVM IR (逆アセンブリ) に変換したいと考えています。
どのような解決策を提案しますか?
S2E プロジェクト内で開発されたRevGenツールの使用を検討してください。x86 バイナリを LLVM IR に変換できます。ソース コードは、URL https://dslabgit.epfl.ch/git/s2e/s2e.gitで利用可能な GIT リポジトリの Revgen ブランチからチェックアウトできます。
@bsa2000 が言及したRevGenツールに関しては、この最新の論文「コンパイラ レベルの中間表現ベースのバイナリ分析と書き換えシステム」で、S2E と Revinc のいくつかの制限が指摘されています。
ここでそれらを引き出します。
動的翻訳の欠点:
S2E [16] と Revnic [14] は、QEMU を使用して x86 を LLVM に動的に変換する方法を提示しています。私たちのアプローチとは異なり、これらの方法はコードのブロックをオンザフライで LLVM に変換するため、LLVM 分析の適用は一度に 1 つのブロックのみに制限されます。
IR 不完全:
Revnic [14] と RevGen [15] は変換されたブロックをマージして IR を復元しますが、復元された IR は不完全であり、現在の実行に対してのみ有効です。その結果、さまざまなプログラム全体の分析では不完全な情報が提供されます。
抽象的なスタックやプロモーション情報はありません
さらに、変換されたコードは、スタック レイアウトに関する元のバイナリのすべての仮定を保持します。それらは、抽象スタックを取得したり、メモリ位置をシンボルにプロモートしたりするためのメソッドを提供しません。これらは、いくつかのソースレベル分析のアプリケーションに不可欠です。
普遍的な解決策(間接分岐などについて考えてください)があるとは思えません.LLVM IRはどのアセンブラよりもはるかに「高レベル」です。ただし、BB 単位で翻訳することは可能です。とりわけ llvm-qemu および libcpu プロジェクトを確認することをお勧めします。
いくつかの初期段階にある新しいプロジェクトがあります。The libbeauty
:
https://github.com/jcdutton/libbeauty
プロジェクトに関する記事: Libbeauty: Another Reverse-Engineering Tool、2013 年 12 月 24 日、Michael Larabel - http://www.phoronix.com/scan.php?page=news_item&px=MTU1MTU
x86_64
現在、入力としてのサブセットのみをサポートしています。プロジェクトの目標の 1 つは、生成された LLVM IR をアセンブリにコンパイルして、同じ機能を持つバイナリを取得できるようにすることです。
ARM バイナリから LLVM IR への変換に関する参考文献をいくつか投稿してください。
disarm - バイナリを llvm ir 逆アセンブラにアームします
https://code.google.com/p/disarm/
ただし、試したことがないため、品質と安定性についてはわかりません。他の誰かがこのプロジェクトに関する追加情報を投稿できますか?