返回介绍

17.7 脚本化插件

发布于 2024-10-11 21:05:46 字数 2263 浏览 0 评论 0 收藏 0

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、termrun 函数。

代码清单 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文