Dna
1.0.0
Dna是建立在LLVM頂部的靜態二元分析框架。值得注意的是,它幾乎完全寫在C#中,包括llvm,remill和souper的託管綁定。
Dna實現了由土星紙重大啟發的迭代控制流圖重建。它迭代地應用遞歸下降,提起(使用remill)和路徑求解,直到恢復完整的控制流程圖為止。在跳台的情況下,我們使用基於Souper和Z3的遞歸算法來求解可能的跳台目標。您可以在此處找到迭代探索算法,並在此處找到跳台求解算法。
一旦完全探索了控制流程圖,就可以將其重新編譯為X86,並使用此處和此處的算法將其重新插入二進制中。儘管彙編的代碼無論如何都不是漂亮的,但只要恢復的控制流程圖正確,它就應該運行。話雖如此,這仍然是一個研究原型 - 預計錯誤和邊緣案件。控制流程圖探索可能會失敗,例如無界的跳躍表或無法容納的說明。
其他一些值得注意的功能:
try / catch語句和filter內在插入控制流程圖。儘管Recompiler尚未(尚未修復SEH條目)(尚未固定),但例外將導致崩潰。MemorySSA , LoopInfo ,Dominator樹,Pass管道管理等的綁定。一些警告:
請注意, Dna目前基於LLVM 17。
Dna不會開箱即用。為此,需要定制的補丁以進行重新填充,以使其在Windows上構建。如果您想研究DNA,請打開問題或發送電子郵件給我[email protected] 。在某個時候,我可能會發布適當的構建步驟,但我不能保證。