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

HexRaysPyTools是一款IDA Pro插件,可以显著提升HexRays反编译器的工作效率,特别是在重建结构和类的过程中提供了极大的帮助。这个插件能协助创建类和结构,还能检测虚表,使得反编译的过程更加快速便捷,甚至能实现一些其他方法无法做到的操作。
安装方法
要安装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
时,将扫描应用于任何变量类型,默认情况下,仅扫描基本类型如DWORD
、QWORD
、void *
等。
主要功能
结构重建
结构重建通常包括以下步骤:
- 打开结构构建器。
- 找到指向要重建的结构的局部变量。
- 应用“扫描变量”功能,收集在一个函数范围内访问的字段信息,或者应用“深度扫描变量”,递归访问其他具有相同变量作为参数的函数。
- 多次应用步骤2和3后,在结构构建器中解决冲突并最终创建结构。所有扫描过的变量将获得新类型,交叉引用也会被记住并随时可用。
结构构建器 (Alt + F8)
结构构建器是查看和修改所有扫描变量信息的地方。可以通过以下方式收集信息:
右键点击变量 -> 扫描变量。识别当前函数内的字段使用情况。
右键点击变量 -> 深度扫描变量。递归访问函数并应用扫描器。
右键点击函数 -> 深度扫描返回值。如果使用单例模式或在多个地方调用构造函数,可以扫描所有接收对象指针或创建对象的地方。
结构交叉引用 (Ctrl + X)
每次按下F5按钮并反编译代码时,关于字段地址的信息都会存储在缓存中。可以通过“Field Xrefs”菜单检索这些信息。建议尽可能多地应用重建类型,以获取更多关于结构使用方式的信息。
猜测分配
这个功能非常初级,旨在帮助找到变量的来源,以便在最高级别运行深度扫描过程,而不遗漏大量代码。
具有给定大小的结构
用法:
- 在伪代码查看器中右键点击一个数字 -> “Structures with this size”(快捷键“W”)。
- 选择要查找结构的库。
- 选择一个结构。数字将变为
sizeof(Structure Name)
,类型将被导入本地类型。
通过形状识别结构
帮助通过从伪代码中获取的信息找到合适的结构。
用法:
- 方法1
- 右键点击变量 -> 选择“Recognize Shape”。
- 选择类型库。
- 选择结构。变量类型将自动更改。
- 方法2
- 清除当前使用的结构构建器。
- 右键点击变量 -> “扫描变量”。
- 编辑类型,禁用或删除不感兴趣的字段,点击“Recognize Shape”按钮。
- 可以选择多个字段并尝试识别其形状,如果找到并选择,它们将被替换为新结构。
- 在最终选择结构后,所有扫描变量的类型将自动更改。
反汇编代码操作
包含结构
帮助找到包含结构,使代码更美观。
前:
后:
函数签名操作
- 右键点击第一行 -> “Remove Return”将返回类型转换为void或从void转换为_DWORD。
- 右键点击参数 -> “Remove Argument”删除该参数。
- 右键点击约定 -> “Convert to __usercall”切换到__usercall或__userpurge。
重铸 (Shift+R, Shift+L) 和 重命名 (Shift+N, Ctrl+Shift+N)
通过表达式的两边,可以右键点击或按下快捷键,使双方类型一致。
名称传播 (P)
递归遍历函数,将选定元素的名称传播到所有相关元素上。
解开'if'语句
- 手动点击
if
可以切换then
和else
分支。 - 自动应用以下转换:
类管理
可以在View->Open Subview->Classes中找到,帮助管理类(具有虚表的结构)。
结构图
显示结构之间的关系:
- 打开本地类型。
- 选择结构并右键点击 -> “Show Graph”(快捷键“G”)。
- 插件创建与选定项目相关的所有结构的图。
- 双击节点重新计算其图。
- 每个节点都有一个提示信息,显示类似C的typedef。
通过HexRaysPyTools,结构和类的重建工作变得更加高效和便捷。如果你在使用IDA Pro时,常常需要进行复杂的结构和类分析,那么这款插件绝对能为你带来极大的便利。