一段时间以来,我一直对自动漏洞评估和代码反编译感兴趣。结果,我一直在用Python构建解析器,该解析器读取bin,在跟踪执行时(IDA这样做)逐条指令分解指令。

我一直在跟踪被污染的寄存器(已污染就像在用户输入中一样)来检查这些寄存器何时允许我们设置呼叫或跳转。

这项研究已经发展到了我想要将其转换为反编译器的地步。我看了回旋镖和其他开源反编译器。我还快速浏览了龙书(我不拥有它)。我想听听你们对这个想法的看法。下面是我的概述:


打开二进制文件进行反编译。
检测文件类型(PE或ELF)以选择EP和内存布局。
跳转到拆卸时遵循EP并遵循代码的执行路径。
我使用udis86。这种执行以一种libemu的方式进行。
将生成的程序集解析为一种中间语言。要获得更简单的说明,(例如,请始终删除类似SHL EAX, 0x02的内容,并
将其更改为MUL指令)。
将其解析为抽象语法树。
优化AST(尽管我不知道如何)。
将AST转换为类似C的文件。

我在最后两个步骤中遇到了问题。有人如何将AST解析为真实的语言或类似的语言?您如何优化AST?是否有构建C或Python库来完成它?

评论

您可能有兴趣阅读最近发布的ida-decompiler的Python源代码:github.com/EiNSTeiN-/ida-decompiler

#1 楼

反编译的经典著作是Cristina Cifuentes的博士学位论文“反向编译技术”。她在第7章中介绍了C代码的生成。

REC反编译器的作者也对反编译过程进行了很好的总结,尽管它比较非正式:

http:/ /www.backerstreet.com/decompiler/introduction.htm

为了完整起见,这是Ilfak关于Hex-Rays反编译器的白皮书,尽管他浏览了这个特定问题,但只提到它“非常简单易用“ :):

http://www.hex-rays.com/products/ida/support/ppt/decompilers_and_beyond_white_paper.pdf