一点历史:(又名一个年迈的家伙喋喋不休)
在过去,我们在 IDA 中没有 Python,当一个人想要开发一个 IDA 插件时,他必须用 C 语言实现它,并使用您购买 IDA 许可证时收到的凭据使用hex-ray下载中心提供的 SDK . 然而,我们确实有 IDC。IDC 是 IDA 的旧的、专有的和有点过时的脚本语言,这与 C 无关,但是使用类似 C 的语法有明显的努力。它在过去很常用,但 IDAPython 几乎完全取代了它。现在看到 IDC 的唯一原因是旧代码,它位于 IDAPython 之前。
从那时起,开发了 IDAPython(最初作为使用上述 SDK 的插件,然后被 hex-rays 采用并成为 IDA 的一部分)。直到最近的 IDA 6.95,我们只有一个模块在 python 中公开所有 IDA 的 C SDK。该模块是idaapi
. idc
正在实施从 IDC 迁移到 IDAPython 的更高级别的功能。idautils
实现了一些以前没有的更高级的功能。这些是粗略的划分,并不完全准确。这里的重点是有一个(长)python 文件公开所有 SDK 函数(使用SWIG公开给 python )。
在 IDA 6.95 中,我们仍然拥有它,但它也是第一个包含多个ida_*
模块的版本,用于替换广泛的idaapi
. idaapi
仅包含在 6.95 中以实现向后兼容性,并且预计会在 IDA 7 中删除。通常,模块的名称(ida_
前缀后面的内容)是定义这些函数的头文件的名称。例如,ida_lines
将公开lines.h
.
实际答案:
- IDA 插件 SDK 是 C 头文件和二进制库的集合,允许第三方使用提供的 API 开发 IDA 插件。它可以从下载中心下载,它的文档可以在这里找到。
- 虽然 C SDK 有很好的文档记录,但 IDAPython 没有那么多。我经常发现在开发 IDAPython 插件时浏览 SDK 很有用,因为函数通常暴露给 python 但没有像 SDK 中那样被记录或描述。基本上大多数函数都是对应的,您会在 IDAPython 和 SDK 中找到具有相同名称的相同函数(因为这主要是由/为SWIG自动生成的代码)。
- 第一个猜测是您使用的是旧版本的 IDA,其中
ida_*
模块尚不存在。通常,使用idaapi
而不是所有其他模块就可以了。
为 IDA 开发:
有兴趣为 IDA 开发的人有三种选择:
- 使用 IDA SDK 编写 C 代码并编译它,将 a
plw
或p64
二进制文件作为输出。
- 编写IDC代码。这是一种体面的脚本语言,在语法上类似于简化的 C。输出将是一个文本文件。在 IDAPython 流行并且所有权转移到 hexrays 之前,这是 IDA 选择的脚本语言。
- 编写 IDAPython 代码。这主要是使用从 IDA 中运行时可用的附加模块的 Python,以及注册为插件所需的简单 IDA 插件接口。