该 Ghidra 工具包是一套全面的工具,旨在简化和自动化与在无头模式下运行 Ghidra 相关的各种任务。该工具包提供了广泛的脚本,可以在 Ghidra 内部或与 Ghidra 一起执行,使用户能够在分析的代码库上执行漏洞搜寻、使用 ChatGPT 进行伪代码注释以及使用数据可视化进行报告等任务。它允许用户加载和保存自己的脚本并与脚本的内置 API 进行交互。
无头模式自动化:该工具包使用户能够在无头模式下无缝启动和运行 Ghidra,从而实现代码分析任务的自动化和批量处理。
脚本存储库/管理:该工具包包括可以在 Ghidra 中执行的预构建脚本存储库。这些脚本涵盖各种功能,使用户能够执行各种分析和操作任务。它允许用户加载和保存自己的脚本,为他们的特定分析需求提供灵活性和定制选项。用户可以轻松管理和组织他们的脚本集合。
灵活的输入选项:用户可以利用该工具包分析单个文件或包含多个文件的整个文件夹。这种灵活性可以对小型和大规模代码库进行高效分析。
通过模式识别进行漏洞搜寻:利用工具包的脚本来识别正在分析的代码库中的潜在漏洞。这有助于安全研究人员和开发人员发现安全漏洞并主动解决它们。
使用 SemGrep 进行漏洞狩猎:感谢安全研究员 0xdea 和他们创建的规则集,我们可以使用简单的规则和 SemGrep 来检测 C/C++ 伪代码中的漏洞(他们的 github:https://github.com/0xdea/semgrep -规则)
自动伪代码生成:在 Ghidra 的 Headless 模式下自动生成伪代码。此功能有助于理解和记录代码逻辑,无需手动干预。
使用 ChatGPT 进行伪代码注释:利用 ChatGPT 为伪代码片段生成类似人类的注释,从而增强代码库的可读性和理解性。此功能有助于记录和解释代码逻辑。
报告和数据可视化:生成具有可视化效果的综合报告,以有效地总结和呈现分析结果。该工具包提供数据可视化功能,以帮助识别代码库中的模式、依赖关系和异常。
在使用该项目之前,请确保您已安装以下软件:
Ghidra:您可以从国家安全局的 GitHub 存储库 @ https://github.com/NationalSecurityAgency/ghidra 下载 Ghidra
Java:确保您安装了 Java 开发工具包 (JDK) 版本 17 或更高版本。您可以从 OpenJDK 网站下载它 @ https://openjdk.org/projects/jdk/17/
BinExport(可选)按照安装 Ghidra 扩展的说明进行操作 https://github.com/google/binexport
SemGrep(可选)按照详细说明进行操作 https://semgrep.dev/docs/getting-started/
安装上述先决条件。
直接从 Github 下载 Sekiryu 版本或使用: pip install sekiryu
。
为了使用该脚本,您只需使用您想要执行的选项对二进制文件运行它即可。
sekiryu [-F FILE][OPTIONS]
请注意,使用Ghidra (或任何其他产品)执行二进制分析是一个相对较慢的过程。因此,预计二进制分析需要几分钟时间,具体取决于主机性能。如果您针对非常大的应用程序或大量二进制文件运行 Sekiryu,请准备好等待
在 www.bushido-sec.com 上查找演示
The "server.py" is basically built to allow scripts to interract with Ghidra each other and with the host system. An User can easily develop their own script, load and saved it in the script folder and use the known functions of the API to interract with Ghidra.
为了使用它,用户必须在其脚本中导入 xmlrpc 并调用该函数,例如: proxy.send_data
send_data() - 允许用户向服务器发送数据。 (“数据”是字典)
recv_data() - 允许用户从服务器接收数据。 (“数据”是字典)
request_GPT() - 允许用户通过 ChatGPT API 发送字符串数据。
脚本保存在文件夹 /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 -导入'+ ' '+ 文件 + ' '+ "-postscript "+ script +" -deleteProject"# 使用指定的文件和 scripttry 运行 ghidra: 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: # 设置 scriptscript = "modules/scripts/your_script.py"# 在新线程中启动 exec_headless 函数 thread = threading.Thread(target=exec_headless, args=(file, script)) thread.start () thread.join() 除了 Exception as e: print(str(e))
文件cli.py
负责命令行界面,并允许您添加关联的参数和命令,如下所示:
Analysis_parser.add_argument('[-ShortCMD]', '[--LongCMD]', help="您的帮助消息", action="store_true")
Scripts/SCRIPTS/SCRIIIIIPTS :此工具被设计为一个工具包,允许用户轻松保存和运行自己的脚本,显然如果您可以贡献任何类型的脚本(任何有趣的东西都会被批准!)
优化:任何类型的优化都是受欢迎的,并且几乎会在每个版本中自动获得批准和部署,一些好的事情可能是:改进并行任务、代码清理和整体改进。
恶意软件分析:这是一个很大的部分,我不熟悉。任何愿意贡献的恶意软件分析师都可以提出想法、脚本,甚至直接在项目中提交代码。
报告:我不是数据可视化工程师,如果有人愿意在这部分进行改进/贡献,那就太好了。
The xmlrpc.server module is not secure against maliciously constructed data. If you need to parse untrusted or unauthenticated data see XML vulnerabilities.
A lot of people encouraged me to push further on this tool and improve it. Without you all this project wouldn't have been the same so it's time for a proper shout-out: - @JeanBedoul @McProustinet @MilCashh @Aspeak @mrjay @Esbee|sandboxescaper @Rosen @Cyb3rops @RussianPanda @Dr4k0nia - @Inversecos @Vs1m @djinn @corelanc0d3r @ramishaath @chompie1337 Thanks for your feedback, support, encouragement, test, ideas, time and care.
有关 Bushido Security 的更多信息,请访问我们的网站:https://www.bushido-sec.com/。