我一直在跟踪被污染的寄存器(已污染就像在用户输入中一样)来检查这些寄存器何时允许我们设置呼叫或跳转。
这项研究已经发展到了我想要将其转换为反编译器的地步。我看了回旋镖和其他开源反编译器。我还快速浏览了龙书(我不拥有它)。我想听听你们对这个想法的看法。下面是我的概述:
打开二进制文件进行反编译。
检测文件类型(PE或ELF)以选择EP和内存布局。
跳转到拆卸时遵循EP并遵循代码的执行路径。
我使用udis86。这种执行以一种libemu的方式进行。
将生成的程序集解析为一种中间语言。要获得更简单的说明,(例如,请始终删除类似
SHL EAX, 0x02
的内容,并将其更改为
MUL
指令)。 将其解析为抽象语法树。
优化AST(尽管我不知道如何)。
将AST转换为类似C的文件。
我在最后两个步骤中遇到了问题。有人如何将AST解析为真实的语言或类似的语言?您如何优化AST?是否有构建C或Python库来完成它?
#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
评论
您可能有兴趣阅读最近发布的ida-decompiler的Python源代码:github.com/EiNSTeiN-/ida-decompiler