当我需要执行类似的任务时,我最终挂钩 IDB 保存事件,然后在每个用户保存之前使用 IDA API 扫描 IDB 以进行修改。扫描整个函数列表大约需要几秒钟,聚合函数和数据元素的大部分信息。
对我来说,这听起来比尝试对 IDA 进行逆向工程和修补这些钩子更实用,尤其是在尝试捕获用户热键等 UI 事件时。
不过需要注意的一点是,如果您要处理多个 IDB 文件,则如果您选择不依赖 IDA 的 ID 号,则聚合结构/枚举数据可能会很困难。
如果您确实希望对 IDA 进行逆向工程,那么在某个地方加入有关该主题的讨论会非常有趣。由于 IDA 现在大部分 UI 都使用 Qt(尽管我猜到 Qt 的迁移并不像人们希望的那样顺利),Qt 的一个很好的起点将是Daniel Pistelli 的 Qt Internals and Reversing文章,其中还包括最后是一个 IDAPython 脚本(但强烈建议阅读整篇文章)。
它有些过时,但假设 IDA 使用 Qt 4.8.x,则没有太多差异(如果您愿意,我可以列出我所知道的那些)。
基本上,由于 Qt 是非常事件驱动的(幸运的是,IDA 6.0 的设计考虑到了这一点),因此您可能只需要聆听,在 Qt 方言中,这称为connect
-ing a slot
(事件处理程序) a signal
(事件),至少用于您希望挂钩的某些特定事件。
我以前做过一些中等的 Qt-IDA hack,我称之为它们,使用 Qt 和 PyQt 在 IDA 的应用程序下操作 Qt 对象。与我设法手动添加和编辑菜单项和工具栏的方式相同,在 IDA 的反汇编视图中右键单击或挂钩热键时,绝对可以查找上下文菜单弹出窗口。
我的这个 RE.SE答案可能是一个很好的起点。