Albert1x 发表于 2024-11-23 17:33

记录学习如何编写ida7.7插件

记录学习一下怎么编写并实现一个ida插件,本文创建的是基于ida7.7api的插件demo(nopAll),仅作参考
### 创建好文件夹
创建一个nopAll.py(插件名.py),和一个文件夹,文件夹分别是一个空的__init__.py文件,和一个nopall.py文件

### 编写插件
首先编写nopAll.py文件,nopAll.py文件用于来进行插件的声明和初始化

```
import idautils
import idaapi
import idc
import ida_bytes


class nopAll(idaapi.plugin_t):# 继承 idaapi.plugin_t
    """
    插件类
    """
    flags = idaapi.PLUGIN_UNL
    comment = "--------nop all--------"

    wanted_name = "nopAll"# 插件的名称,在IDA界面导航栏中显示 Edit->Plugins->myplugin
    wanted_hotkey = "Alt-F9"# 插件的快捷键
    help = "......"

    def init(self):
      """
      初始化方法
      """
      idaapi.msg("----- try to nop all ------")

      # 导入python目录下的功能模块
      idaapi.require("nopAll")
      idaapi.require("nopAll.nopall")

      return idaapi.PLUGIN_OK# return PLUGIN_KEEP

    def run(self, arg):
      nopAll.nopall.main()# 注意这里的调用方式是从python中模块的文件夹开始

    def term(self):
      idaapi.msg("success")


def PLUGIN_ENTRY():
    """
    实例化插件对象
    """
    return nopAll()


```
再编写文件夹中的nopall.py文件(其里面为实现插件功能的代码)

```
import ida_bytes
import idautils
import idc
import idaapi


def main():
    start_addr = 0
    end_addr = 0
    for seg in idautils.Segments():
      if idc.get_segm_name(seg) == '.text':
            start_addr = idc.get_segm_start(seg)
            end_addr = idc.get_segm_end(seg)
    if end_addr != 0:
      for i in range(start_addr, end_addr):
            ida_bytes.del_items(i)
    print('success')

if __name__ == '__main__':
    main()
```

### 将其拉入plugins文件夹
将以上创建的文件以及文件夹拉入ida的plugins文件夹中即可。

参考文章
https://blog.csdn.net/cswenrou/article/details/132709996
https://blog.csdn.net/qq_35056292/article/details/89421793
页: [1]
查看完整版本: 记录学习如何编写ida7.7插件