记录学习一下怎么编写并实现一个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
|