HexRaysPyTools:提升HexRays反编译器的插件

HexRaysPyTools插件帮助改进HexRays反编译器的使用,支持IDA Pro 7.x,提供结构和类的重建以及虚表检测功能,快速转换反编译输出。
直达下载
回到上一页
clickgpt_line.png_noView
介绍

HexRaysPyTools是一款IDA Pro插件,可以显著提升HexRays反编译器的工作效率,特别是在重建结构和类的过程中提供了极大的帮助。这个插件能协助创建类和结构,还能检测虚表,使得反编译的过程更加快速便捷,甚至能实现一些其他方法无法做到的操作。

github_practical_hexrayspy_1

安装方法

要安装HexRaysPyTools,只需将HexRaysPyTools.py文件和HexRaysPyTools目录复制到IDA的插件目录即可。配置文件位于IDADIR\cfg\HexRaysPyTools.cfg,其中包含了详细的设置选项:

  • debug_message_level:如果遇到问题并希望在日志中显示详细信息,请将其设置为10。
  • propagate_through_all_names:设置为True时,将不仅重命名默认变量。
  • store_xrefs:指定是否在反编译阶段将收集到的交叉引用存储在数据库中,默认为True
  • scan_any_type:设置为True时,将扫描应用于任何变量类型,默认情况下,仅扫描基本类型如DWORDQWORDvoid *等。

主要功能

结构重建

结构重建通常包括以下步骤:

  1. 打开结构构建器。
  2. 找到指向要重建的结构的局部变量。
  3. 应用“扫描变量”功能,收集在一个函数范围内访问的字段信息,或者应用“深度扫描变量”,递归访问其他具有相同变量作为参数的函数。
  4. 多次应用步骤2和3后,在结构构建器中解决冲突并最终创建结构。所有扫描过的变量将获得新类型,交叉引用也会被记住并随时可用。
结构构建器 (Alt + F8)

结构构建器是查看和修改所有扫描变量信息的地方。可以通过以下方式收集信息:

  • 右键点击变量 -> 扫描变量。识别当前函数内的字段使用情况。

    github_practical_hexrayspy_2

  • 右键点击变量 -> 深度扫描变量。递归访问函数并应用扫描器。

    github_practical_hexrayspy_3

  • 右键点击函数 -> 深度扫描返回值。如果使用单例模式或在多个地方调用构造函数,可以扫描所有接收对象指针或创建对象的地方。

    github_practical_hexrayspy_4

结构交叉引用 (Ctrl + X)

每次按下F5按钮并反编译代码时,关于字段地址的信息都会存储在缓存中。可以通过“Field Xrefs”菜单检索这些信息。建议尽可能多地应用重建类型,以获取更多关于结构使用方式的信息。

猜测分配

这个功能非常初级,旨在帮助找到变量的来源,以便在最高级别运行深度扫描过程,而不遗漏大量代码。

具有给定大小的结构

用法:

  1. 在伪代码查看器中右键点击一个数字 -> “Structures with this size”(快捷键“W”)。
  2. 选择要查找结构的库。
  3. 选择一个结构。数字将变为sizeof(Structure Name),类型将被导入本地类型。
通过形状识别结构

帮助通过从伪代码中获取的信息找到合适的结构。

用法:

  • 方法1
    1. 右键点击变量 -> 选择“Recognize Shape”。
    2. 选择类型库。
    3. 选择结构。变量类型将自动更改。
  • 方法2
    1. 清除当前使用的结构构建器。
    2. 右键点击变量 -> “扫描变量”。
    3. 编辑类型,禁用或删除不感兴趣的字段,点击“Recognize Shape”按钮。
    4. 可以选择多个字段并尝试识别其形状,如果找到并选择,它们将被替换为新结构。
    5. 在最终选择结构后,所有扫描变量的类型将自动更改。

反汇编代码操作

包含结构

帮助找到包含结构,使代码更美观。

前:

github_practical_hexrayspy_5

后:

github_practical_hexrayspy_6

函数签名操作
  1. 右键点击第一行 -> “Remove Return”将返回类型转换为void或从void转换为_DWORD。
  2. 右键点击参数 -> “Remove Argument”删除该参数。
  3. 右键点击约定 -> “Convert to __usercall”切换到__usercall或__userpurge。
重铸 (Shift+R, Shift+L) 和 重命名 (Shift+N, Ctrl+Shift+N)

通过表达式的两边,可以右键点击或按下快捷键,使双方类型一致。

名称传播 (P)

递归遍历函数,将选定元素的名称传播到所有相关元素上。

解开'if'语句
  • 手动点击if可以切换thenelse分支。
  • 自动应用以下转换:

类管理

可以在View->Open Subview->Classes中找到,帮助管理类(具有虚表的结构)。

github_practical_hexrayspy_7

结构图

显示结构之间的关系:

github_practical_hexrayspy_8

  1. 打开本地类型。
  2. 选择结构并右键点击 -> “Show Graph”(快捷键“G”)。
  3. 插件创建与选定项目相关的所有结构的图。
  4. 双击节点重新计算其图。
  5. 每个节点都有一个提示信息,显示类似C的typedef。

通过HexRaysPyTools,结构和类的重建工作变得更加高效和便捷。如果你在使用IDA Pro时,常常需要进行复杂的结构和类分析,那么这款插件绝对能为你带来极大的便利。

编程学习
编程学习 免费领取编程学习资料 进编程学习交流群
订阅号
视频号
公众号 关注公众号,回复关键字java领取大厂最新面试题
×
编程学习
免费领取编程学习资料 进编程学习交流群