質問:
ASTを最適化する方法、または実際の言語に変換する方法
Stolas
2013-06-25 13:41:29 UTC
view on stackexchange narkive permalink

私はしばらくの間、自動脆弱性評価とコードの逆コンパイルに興味を持っていました。その結果、Pythonでビンを読み取り、実行をトレースしながら命令ごとに逆アセンブルするパーサーを構築しています(IDAの方法)。

汚染されたレジスターをトレースしています(次のように汚染されています)。ユーザー入力で)そのようなレジスタがいつ呼び出しまたはジャンプを設定できるかを確認します。

この研究は、逆コンパイラーに変換したいところまで成長しました。私はブーメランや他のオープンソース逆コンパイラーを見ました。私はまた、ドラゴンの本の中をちょっと覗き見しました(私はそれを所有していません)。このアイデアについて皆さんがどう思うか聞いてみたいと思います。以下に私の概要を示します。

  1. バイナリファイルを開いて逆コンパイルします。
  2. ファイルタイプ(PEまたはELF)を検出して、EPとメモリのレイアウトを選択します。
  3. EPにジャンプし、逆アセンブル中にコードの実行パスに従います。 udis86を使用しています。この実行は、リベムのような方法で行われます。
  4. 結果のアセンブリを中間言語で解析します。より簡単な命令を取得するには(たとえば、常に SHL EAX、0x02 などを削除し、それらを MUL 命令に変更します)。
  5. 抽象構文木に解析します。
  6. ASTを最適化します(ただし、方法はわかりません)。
  7. ASTをCのようなものに変換します。
  8. ol>

    最後の2つの手順で問題が発生します。誰かがASTを実際の言語またはそれに似たものにどのように解析しますか? ASTをどのように最適化しますか?それを実現するためのビルドCまたはPythonライブラリはありますか?

最近リリースされたida-decompilerのPythonソースコードを読むことに興味があるかもしれません:https://github.com/EiNSTeiN-/ida-decompiler
1 回答:
Igor Skochinsky
2013-06-25 14:15:59 UTC
view on stackexchange narkive permalink

逆コンパイルに関する古典的な研究は、クリスティーナ・シフエンテスの博士論文「逆コンパイル技術」です。彼女は第7章でCコードの生成について説明しています。

RECデコンパイラーの作成者は、より非公式ですが、逆コンパイルプロセスについての優れた要約も持っています。

http: //www.backerstreet.com/decompiler/introduction.htm

完全を期すために、Hex-Raysデコンパイラに関するIlfakのホワイトペーパーを紹介します。ただし、彼はこの特定の問題を一瞥し、「非常に簡単で簡単です」:):

http://www.hex-rays.com/products/ida/support/ppt/decompilers_and_beyond_white_paper.pdf



このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...