我正在分析使用Borland Delphi创建的应用程序,但是对象代码的质量差会使分析变得困难而乏味。该代码是如此繁琐,并充满了多余的指令,以至于很难弄清给定的代码试图完成什么。

在相关主题中确定解密方案,建议重新编译具有良好优化编译器的反编译器输出,可消除冗余并获得易于分析的目标代码。








我现在想知道什么是最好的方法。

有哪些工具可以根据目标代码或反汇编输出(IDA)来执行此操作?

评论

一般而言,代码去混淆的问题有很多重叠之处,尽管这里的混淆是偶然的(编译器不佳),而不是像代码混淆器那样是设计使然。随着新的编译器的产生,巨大的二进制文件由于过多的内联和展开而膨胀,类似的问题必将越来越多地出现。副作用-与全局寄存器分配和优化(LTCG)结合在一起-使用IDA当前的技术,此类二进制文件可能变得接近unFLIRTable。这增加了我们的分析工作量,并使消除噪声更加重要。

在这种特殊情况下,可以从广泛的Delphi / VCL RTTI信息中获得有关代码的语义和结构的提示。这里有一些IDA插件/脚本,以及许多其他工具,如DeDe(请参阅stackoverflow.com/questions/335104/…)。

相关主题:将机器代码转换为LLVM IR(将X86_64.X86.ARM分解/重新组装为LLVM位代码)

相关文章:使用RevGen和相关的StackOverflow实现对x86 Binaries的复杂分析,主题是revgen工具的源代码,包括有关如何混合源代码的信息。

#1 楼

我建议您看一下mcsema项目。
它将x86转换为LLVM中间表示形式,并且能够将更改重新编译回代码。一旦将代码转换为LLVM的中间表示形式,就可以通过现有的LLVM优化对其进行优化。