这个项目非常有趣,也是我第一个"大"项目!现在已有更好、更智能、更强的解决方案:https://github.com/LaurieWired/GhidraMCP
再见,太空牛仔
本 Ghidra 工具包是一套全面的工具集,旨在简化和自动化与以无头模式运行 Ghidra 相关的各种任务。该工具包提供了大量脚本,既可在 Ghidra 内部执行,也可与 Ghidra 并行执行,使用户能够执行诸如漏洞挖掘、使用 ChatGPT 进行伪代码注释以及生成带有数据可视化的分析报告等任务。它允许用户加载和保存自己的脚本,并与脚本内置的 API 进行交互。
无头模式自动化:该工具包使用户能够无缝启动并以无头模式运行 Ghidra,从而实现代码分析任务的自动化批量处理。
脚本仓库/管理:工具包包含一个预建脚本仓库,可在 Ghidra 内执行。这些脚本涵盖多种功能,使用户能够执行多样化的分析和操作任务。它允许用户加载和保存自己的脚本,为特定分析需求提供灵活性和定制选项。用户可以轻松管理和组织脚本集。
灵活的输入选项:用户可利用该工具包分析单个文件或包含多个文件的整个文件夹。这种灵活性使得对小规模和大规模代码库都能进行高效分析。
使用此项目之前,请确保已安装以下软件:
pip install sekiryu。要使用此脚本,您只需针对一个二进制文件运行它,并带上您想执行的选项。
sekiryu [-F FILE][OPTIONS]请注意,使用 Ghidra(或其他任何产品)进行二进制分析是一个相对 缓慢 的过程。因此,根据主机性能,二进制分析可能需要几分钟时间。 如果您对非常大的应用程序或大量二进制文件运行 Sekiryu,请准备好 等待。
"server.py" 的基本设计是允许脚本之间以及脚本与主机系统之间通过 Ghidra 进行交互。
用户可以轻松开发自己的脚本,将其加载并保存到脚本文件夹中,并使用 API 的已知函数与 Ghidra 进行交互。
要使用它,用户必须在其脚本中导入 xmlrpc,并像这样调用函数:proxy.send_data
脚本保存在 /modules/scripts/ 文件夹中,您只需将脚本复制到那里即可。
在 ghidra_pilot.py 文件中,您可以找到以下负责运行无头 Ghidra 脚本的函数:
def exec_headless(file, script):
"""
执行 ghidra 的无头分析
"""
path = ghidra_path + 'analyzeHeadless'
# 设置变量
tmp_folder = "/tmp/out"
os.mkdir(tmp_folder)
cmd = ' ' + tmp_folder + ' TMP_DIR -import'+ ' '+ file + ' '+ "-postscript "+ script +" -deleteProject"
# 使用指定文件和脚本运行 ghidra
try:
p = subprocess.run([str(path + cmd)], shell=True, capture_output=True)
os.rmdir(tmp_folder)
except KeyError as e:
print(e)
os.rmdir(tmp_folder)
用法非常简单,您可以创建自己的脚本,然后在 ghidra_pilot.py 中添加一个函数,例如:
def yourfunction(file):
try:
# 设置脚本
script = "modules/scripts/your_script.py"
# 在新线程中启动 exec_headless 函数
thread = threading.Thread(target=exec_headless, args=(file, script))
thread.start()
thread.join()
except Exception as e:
print(str(e))
文件 cli.py 负责命令行界面,并允许您像这样添加参数和关联命令:
analysis_parser.add_argument('[-ShortCMD]', '[--LongCMD]', help="您的帮助信息", action="store_true")
xmlrpc.server 模块对于恶意构造的数据不安全。如果您需要解析不受信任或未经身份验证的数据,请参阅 XML 漏洞。
有关 Bushido Security 的更多信息,请访问我们的网站:https://www.bushido-sec.com/。