如何获得有关 IDA SDK 未涵盖的 IDA 数据库事件的通知?

逆向工程 艾达 idapro插件 idapro-sdk
2021-06-24 07:20:46

在我之前的问题中,我最初是问这个问题的,但是由于问题的这方面完全被忽视了,所以我不得不单独问这个问题。

某些事件显然未包含在 IDA SDK 中。我在上面链接的问题中了解到支持前后注释,但是其他事件呢,例如当我按下h(例如2Ah变成42)将数字更改为基数 10(和返回)或r将其显示为字符(例如2Ah变成*) .

我将如何去抓住这些?

注意:一般来说,这个问题也与支持特定事件通知的 IDA 版本之前的 IDA 版本有关。例如,根据 Igor 的说法,IDA SDK 6.4 引入了前后注释的通知。如何让旧版本和 6.4 与collabREate一起协作处理这些事件

我知道允许对 IDA 本身进行逆向工程,所以我要寻找的是指针。

1个回答

当我需要执行类似的任务时,我最终挂钩 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答案可能是一个很好的起点。