一段时间以来,我一直对自动漏洞评估和代码反编译感兴趣。因此,我一直在用 Python 构建解析器,它读取一个 bin,在跟踪执行的同时逐条指令反汇编它(IDA 的方式)。
我一直在跟踪被污染的寄存器(在用户输入中被污染)以检查这些寄存器何时允许我们设置调用或跳转。
这项研究已经发展到我想将其转换为反编译器的地步。我查看了回旋镖和其他开源反编译器。我还快速浏览了龙书(我不拥有它)。我想听听你们对这个想法的看法。下面是我的提纲:
- 打开二进制文件进行反编译。
- 检测文件类型(PE 或 ELF)以选择 EP 和内存布局。
- 反汇编时跳转到EP并遵循代码的执行路径。我使用 udis86。这种执行是一种自由的方式。
- 将生成的程序集解析为中间语言。为了获得更简单的指令,(例如,总是删除类似的东西
SHL EAX, 0x02
并将这些东西更改为MUL
指令)。 - 将其解析为抽象语法树。
- 优化 AST(虽然,我不知道如何)。
- 将 AST 转换为类似于 C 的东西。
我在最后 2 个步骤中遇到了问题。有人如何将 AST 解析为真正的语言或类似的语言?你如何优化 AST?是否有构建 C 或 Python 库来完成它?