- 献词
- 致谢
- 前言
- 第一部分 IDA 简介
- 第 1 章 反汇编简介
- 第 2 章 逆向与反汇编工具
- 第 3 章 IDA Pro 背景知识
- 第二部分 IDA 基本用法
- 第 4 章 IDA 入门
- 第 5 章 IDA 数据显示窗口
- 第 6 章 反汇编导航
- 第 7 章 反汇编操作
- 第 8 章 数据类型与数据结构
- 第 9 章 交叉引用与绘图功能
- 第 10 章 IDA 的多种面孔
- 第三部分 IDA 高级应用
- 第 11 章 定制 IDA
- 第 12 章 使用 FLIRT 签名来识别库
- 第 13 章 扩展 IDA 的知识
- 第 14 章 修补二进制文件及其他 IDA 限制
- 第四部分 扩展 IDA 的功能
- 第 15 章 编写 IDA 脚本
- 第 16 章 IDA 软件开发工具包
- 第 17 章 IDA 插件体系结构
- 第 18 章 二进制文件与 IDA 加载器模块
- 第 19 章 IDA 处理器模块
- 第五部分 实际应用
- 第 20 章 编译器变体
- 第 21 章 模糊代码分析
- 第 22 章 漏洞分析
- 第 23 章 实用 IDA 插件
- 第六部分 IDA 调试器
- 第 24 章 IDA 调试器
- 第 25 章 反汇编器/ 调试器集成
- 第 26 章 其他调试功能
- 附录 A 使用 IDA 免费版本 5.0
- 附录 B IDC/SDK 交叉引用
17.7 脚本化插件
IDA 5.6 引入了对脚本化加载器模块的支持。IDA 5.7 则添加了对脚本化插件(scripted plug-in )1 和处理器模块的支持。虽然这样做不一定有助于开发出更加强大的插件,但它确实在一定程度上降低了插件开发者开发插件的难度,并且由于取消了复杂的构建流程,也缩短了开发周期。
1. 参见 http://www.hexblog.com/?p=120 。
尽管你可以使用 IDC 或 Python 创建脚本化插件,但由于 Python 与 IDA SDK 非常类似,使用 Python 可能是你的最佳选择。鉴于此,Python 插件就与已编译的 C++ 插件一样强大了。
创建 Python 插件的过程非常简单。你主要需要定义一个名为 PLUGIN_ENTRY
的函数,该函数返回 plugin_t
(在模块 idaapi 中定义)的一个实例。 plugin_t
类包含反映 SDK 的 C++ plugin_t
类成员的成员。代码清单 17-4 显示了一个简单的 Python 插件,该插件定义了一个名为 idabook_plugin_t
的类(继承自 plugin_t
),初始化所有必需的成员,并定义实现插件行为的 init、term
和 run
函数。
代码清单 17-4 一个小型 Python 插件
from idaapi import * class idabook_plugin_t(plugin_t): flags = 0 wanted_name = "IdaBook Python Plugin" wanted_hotkey = "Alt-8" comment = "IdaBook Python Plugin" help = "Something helpful" def init(self): msg("IdaBook plugin init called.\n") return PLUGIN_OK def term(self): msg("IdaBook plugin term called.\n") def run(self, arg): warning("IdaBook plugin run(%d) called.\n" % arg) def PLUGIN_ENTRY(): return idabook_plugin_t()
要安装插件,只需将脚本复制到/plugins 目录中即可。
以 IDC 编写的同一插件如代码清单 17-5 所示。由于 IDC 没有定义与插件有关的基类,因此我们需要创建一个类,以定义插件所需的所有元素,同时需要确保正确命名每个元素。
代码清单 17-5 一个小型 IDC 插件
#include class idabook_plugin_t { idabook_plugin_t() { this.flags = 0; this.wanted_name = "IdaBook IDC Plugin"; this.wanted_hotkey = "Alt-9"; this.comment = "IdaBook IDC Plugin"; this.help = "Something helpful"; } init() { Message("IdaBook plugin init called.\n"); return PLUGIN_OK; } term() { Message("IdaBook plugin term called.\n"); } run(arg) { Warning("IdaBook plugin run(%d) called.\n", arg); } } static PLUGIN_ENTRY() { return idabook_plugin_t(); }
与 Python 示例一样, PLUGIN_ENTRY
函数用于创建并返回插件类的一个实例。同样,要安装插件,只需将.idc 文件复制到/plugins 目录中即可。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论