如何使radare2适用于大型二进制文件?

逆向工程 二元分析 雷达2
2021-06-22 06:20:14

用调试头编译了cpython,我想使用radare2执行以下分析

我遇到的问题是执行aaa(分析)部分需要很长时间(至少 27 小时)

1个回答

在启动时对二进制文件进行全面分析并不是一个好习惯,而且radare 也不鼓励这样做。aaa默认情况下运行是一项繁重的操作,在大多数情况下绝对不推荐或不需要。

正如radare博客中的这篇优秀文章所述:

代码分析不是一个快速的操作,甚至不是可预测的或需要线性时间来处理。与默认情况下仅加载标题和字符串信息相比,这使得启动时间非常繁重。
...
我们强制用户考虑他们的工作流程,以便更好地了解他们面临的问题并以最佳方式解决它,节省 cpu、内存以及为什么不:猫。

为了使分析过程更高效,您可以从在radare 中配置不同的分析配置变量开始。这些配置变量可以帮助您使分析过程适合您的程序和您的需要。一些有趣的变量是:

anal.afterjmp  
anal.depth  
anal.eobjmp  
anal.esil  
anal.hasnext  
anal.nopskip  
anal.from
anal.to

请参阅e??anal.命令以获取更详细的说明。

对程序的分析不仅仅是执行一个操作,仅此而已——它是从针对不同需求的不同分析中组合起来的。
radare 实现了许多不同的命令来执行不同类型的分析。巧妙地使用这些命令可以帮助您加快分析过程并仅分析您认为最重要的部分:

  • 通过前奏指令查找函数 ( aap)
  • 通过以下调用识别函数 ( aac)
  • 检测跳转表和指向代码段的指针 ( /V)
  • 分析操作码绝对和相对引用 ( aa\r)
  • 查找对特定地址 ( /r) 的 代码/数据/字符串引用
  • 模拟代码以识别新的指针引用 ( aae)
  • 使用二进制头信息查找公共函数 ( aas)
  • 假设函数是连续的 ( aat)

总而言之,您应该思考和计划最适合您需求的分析过程:

radare2 不是点击即运行的程序,它是一组正交工具和命令,可让您理解、分析、操作和播放大量二进制类型......只有经验和理解才能让您控制什么你在做什么。

如果在阅读了这个答案和radare 博客中的帖子后,您认为这是一个错误并且您可以指出问题,请随时在 github 上打开一个问题