binary ninja如何安装和编写插件
binary ninja也是逆向的一员大将。
安装
第一种方式
一般这种情况下插件的存放地点都是github,
git clone 仓库地址
第二种方式
第二种不知道咋用,没研究过
2023.4.19 第二种方法相当于包管理器,替你git clone一下,不过会因为网络问题出现错误。
https://docs.binary.ninja/guide/plugins.html
编写
建议直接改现成的项目中(如obfuscation_detection)的代码完成一些代码编写工作,之后在考虑单独搞成一个项目。
看上图,将test文件夹视为一个包。 binary ninja启动的额时候会自动调用这个包。
开发路径
快捷命令
copy .\test.py __init__.py
copy __init__.py "$env:APPDATA\Binary Ninja\plugins\test"
copy <测试脚本文件> __init__.py;copy __init__.py "$env:APPDATA\Binary Ninja\plugins\test"
2023.5.10
其实不用copy,直接在%APPDATA%\Binary Ninja\plugins\test_init_.py修改代码不就完事了。
上面是非交互式,脚本要实用肯定得是加载了具体的PE文件才调用的(Interact)。 最简单的交互式插件代码
from binaryninja.plugin import BackgroundTaskThread,PluginCommand
class Solver(BackgroundTaskThread):
# bv是binaryview对象
def __init__(self, bv):
BackgroundTaskThread.__init__(self, "Resolving...", True)
self.bv = bv
def run(self):
print('hello')
def solve(bv):
s = Solver(bv)
s.start()
PluginCommand.register("Test", "this is description", solve)
测试脚本的时候每次都要重新启动binary ninja,很烦
关于上面的问题,github有人提了,
https://github.com/Vector35/binaryninja-api/discussions/1734
好像还不如重启