Dna
1.0.0
Dna 、LLVMの上に構築された静的バイナリ分析フレームワークです。特に、LLVM、Remill、およびSouperのマネージドバインディングを含む、ほぼ完全にC#で書かれています。
Dna 、土星の論文によって重く影響を受けた反復制御フローグラフの再構築を実装します。完全な制御フローグラフが回復するまで、再帰降下、リフティング(レミルを使用)、およびパス解決を繰り返し適用します。ジャンプテーブルの場合、 SouperとZ3に基づいた再帰アルゴリズムを使用して、可能なジャンプテーブルターゲットのセットを解きます。こちらで、反復探査アルゴリズムとジャンプテーブルを解くアルゴリズムをご覧ください。
コントロールフローグラフが完全に調査されたら、x86に再コンパイルし、こことここからアルゴリズムを使用してバイナリに再挿入できます。コンパイルされたコードは決してきれいではありませんが、回復した制御フローグラフが正しい限り実行する必要があります。そうは言っても、それはまだ研究プロトタイプです - バグとエッジのケースが予想されます。制御フローグラフの探索は、例えば、固定されていないジャンプテーブルまたは解放可能な命令の場合に失敗する可能性があります。
他のいくつかの注目すべき機能:
try / catch 、 filterの内因性がコントロールフローグラフに挿入されます。償還者は(まだ)SEHをサポートしていませんが(SEHエントリは修正されていません)、例外はクラッシュを引き起こします。MemorySSA 、 LoopInfo 、ドミネーターツリー、パスパイプライン管理などのバインディングがあります。いくつかの警告:
Dnaは現在LLVM 17に基づいていることに注意してください。
Dna箱から蓄積しません。これがWindowsに構築するには、RemillとSouperへのカスタムパッチが必要でした。 DNAの作業を希望する場合は、問題を開くか、 [email protected]にメールしてください。ある時点で、適切なビルドステップを公開する場合がありますが、保証はありません。