
pyREtic は、メモリ内の Python 2.x bytecode をリバースエンジニアリングするための拡張可能なフレームワークです。
Rich Smith - [email protected]
pyREticの最新バージョンは以下で入手できます: https://github.com/MyNameIsMeerkat/pyREtic
pyREtic は、Python言語プロジェクトにおける様々なリバースエンジニアリングタスクを支援する拡張可能なフレームワークです。
このツールは、リバースエンジニアがバイトコード (.pyc) からソースコード (.py) を復元する際に役立ちます。特に、標準的なツールセットを使用した逆コンパイルを妨害するための対策が施されたコードを解析する場合に有効です。
主に3つの部分から構成されます:
REpdb: pdb機能を拡張したリバースエンジニアリング中心のスーパーセットで、リバースエンジニアが解析対象のコードと容易に連携できるようにします。
OpcodeRemap: オペコードのレイアウトを変更して多くの標準Python逆コンパイラを混乱させるPythonランタイムから、新しいオペコードテーブルを推定できるコンポーネントです。
LiveUnpyc: Dmitri Kornev氏のUnPyc逆コンパイラプロジェクト http://unpyc.sourceforge.net/ の拡張であり、メモリ内のライブPythonオブジェクトを3つの異なる手法でPythonソースコードに逆コンパイルできるようにします。
pyREticツールキットに含まれる機能は、多くのクローズドソースPython開発者が配布コードのソース形式での可読性を防ぐために使用していた保護策に対抗するために開発されました。
pyREticの出力は、対象アプリケーションの実行インスタンス内でアクセス可能なオブジェクトのソースコード表現を生成することを目的としていました。この表現は、対象アプリケーションのセキュリティを評価するために十分な品質であればよく、完全に完璧なコピーである必要はありませんでした。
詳細な使い方のドキュメントは docs/ ディレクトリにあります。
pyREticはGPLv3の下で公開されています。ライセンス本文は docs/ ディレクトリまたは にあります。
pyREticが使用するその他のコンポーネントは、それぞれのライセンスの下で公開されています:
UnPyc http://unpyc.sourceforge.net/ : BSD ライセンス
pycallgraph http://pycallgraph.slowchop.com/: GPLv2
pyREticは、私がImmunity Incで働いていたときに誕生し、最初にBlackHat 2010カンファレンス(ラスベガス)で公開され、その後Defcon 17で発表されました。その際の論文は docs/ ディレクトリにあります。
現在はImmunityに在籍していませんが、Dave Aitel氏のご厚意により、本コードをGPLの下で公開し、誰でもアクセスできるように、また開発を継続できるようにしてくださいました。
最新バージョンのフレームワークは https://github.com/MyNameIsMeerkat/pyREtic にあります。
コミュニティから再び関心をいただいたことを受け、最近プロジェクトをGitHubの新しい場所に移しました。これまで日の目を見ることのなかった機能強化も、今後リリースしていく予定です。
今後pyREticに追加される機能は、私がPythonアプリケーションのリバースエンジニアリングを進める上でのニーズに応じて変化していきます。ただし、提案があればお知らせください。
pyREticがどのように動作するかについての技術的な詳細に興味がある方は、論文「pyREtic: In memory reverse engineering for obfuscated Python bytecode」(docs/ ディレクトリ内)をご参照ください。また、これを説明するプレゼンテーションは以下でご覧いただけます: