私はしばらくの間、自動脆弱性評価とコードの逆コンパイルに興味を持っていました。その結果、Pythonでビンを読み取り、実行をトレースしながら命令ごとに逆アセンブルするパーサーを構築しています(IDAの方法)。
汚染されたレジスターをトレースしています(次のように汚染されています)。ユーザー入力で)そのようなレジスタがいつ呼び出しまたはジャンプを設定できるかを確認します。
この研究は、逆コンパイラーに変換したいところまで成長しました。私はブーメランや他のオープンソース逆コンパイラーを見ました。私はまた、ドラゴンの本の中をちょっと覗き見しました(私はそれを所有していません)。このアイデアについて皆さんがどう思うか聞いてみたいと思います。以下に私の概要を示します。
- バイナリファイルを開いて逆コンパイルします。
- ファイルタイプ(PEまたはELF)を検出して、EPとメモリのレイアウトを選択します。
- EPにジャンプし、逆アセンブル中にコードの実行パスに従います。 udis86を使用しています。この実行は、リベムのような方法で行われます。
- 結果のアセンブリを中間言語で解析します。より簡単な命令を取得するには(たとえば、常に
SHL EAX、0x02
などを削除し、それらをMUL
命令に変更します)。 - 抽象構文木に解析します。
- ASTを最適化します(ただし、方法はわかりません)。
- ASTをCのようなものに変換します。 ol>
最後の2つの手順で問題が発生します。誰かがASTを実際の言語またはそれに似たものにどのように解析しますか? ASTをどのように最適化しますか?それを実現するためのビルドCまたはPythonライブラリはありますか?