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] 。在某个时候,我可能会发布适当的构建步骤,但我不能保证。