news 2026/9/24 17:08:24

免费逆向分析框架 Ghidra:从导入第一个 .exe 到看懂一条恶意代码的完整路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
免费逆向分析框架 Ghidra:从导入第一个 .exe 到看懂一条恶意代码的完整路径

免费逆向分析框架 Ghidra:从导入第一个 .exe 到看懂一条恶意代码的完整路径

【免费下载链接】ghidraGhidra is a software reverse engineering (SRE) framework项目地址: https://gitcode.com/GitHub_Trending/gh/ghidra

凌晨两点,你在案头放了一个来路不明的 Windows 样本,没人告诉它干了什么。你把文件拖进 Ghidra——这个由 NSA 开源的软件逆向工程框架——它自动识别 PE 格式、定位入口点、把机器码翻成汇编,顺手把函数调用关系画给你看。反编译、XREF 交叉引用、控制流图、调试器,全是免费带走的。这篇分享就讲一件事:怎么把它用顺手。

第一次打开它的样子:解压、导入、看第一屏反汇编

Ghidra 是纯 Java 写的,解压后跑ghidraRun就行,不需要装数据库或编译器。第一次启动会问你创建还是打开项目,我们新建一个本地项目,然后把样本从 File → Import File 拖进去。导入对话框会让你选语言:一般选 "Import as Single Image",语言留空它自己猜,x86、ARM、MIPS 这些都能认。

接下来它会自动分析:识别入口点、识别函数边界、恢复字符串引用。这个过程别打断,大二进制要跑几分钟很正常。

自动分析跑完,中间的反汇编列表左边是原始字节(比如4d 5a 90),右边是对应的 MOV、POP 指令,Ghidra 已经给局部变量起了local_24这种名字。右边那个 XREF 面板是最值钱的:光标停在任意变量或地址上,它能列出所有引用这个位置的地方。

上图里的箭头是自动分析算出来的:实线是无条件跳转,虚线是 JZ 这类条件跳转。看一张函数的时候,我一般先不读指令,先看箭头——入口在哪、回跳形成循环、出口从哪走,结构清楚了再逐条啃。

它到底能干什么,干不了什么

按"你遇到的问题"分,Ghidra 真正擅长三件事。

看不懂这段代码在干嘛:除了汇编,它内置 decompiler(基于 SLEIGH),对 x86/x64、ARM 这类主流架构能直接出 C 风格伪代码,变量类型自动推断。绝大多数分析时间其实是花在伪代码窗口里的。

变量被谁改了、谁又用了它:XREF 面板把"定义-引用"关系整理好,配合操作数高亮(鼠标悬停,所有相关位置变黄),追踪一个密钥在函数间怎么传递,不用再人肉 grep 十六进制地址。

两个版本差异在哪:ProgramDiff 插件可以直接对比两个程序,函数级的差异一目了然,做补丁分析特别顺手。

它不擅长的也要说清楚。第一,反编译质量依赖语言定义:冷门架构或者重度混淆的 OLLVM 样本,伪代码可能乱得没法看,得回汇编层手动标类型。第二,它是静态分析为主——动态调试虽然带(Ghidra/Debug/ 下有 debugger,对接 GDB、LlDB 等),但远程附加、断点调试的体验和 GDB 本身比还是糙,重度动态活我一般 Ghidra 看代码 + GDB 跑行为,两边对照。

一条完整的实战工作流:分析一个可疑 Windows 样本

拿一个真实的恶意样本复盘。

导入后先别急着进函数。我第一步是看 String 列表(Window → Program Trees → Strings),样本里带http://C:\reg add这类字符串的,八成是核心逻辑,直接右键跳过去看引用它的代码。

然后进那个可疑函数,切到反编译视图。这时卡住很正常——全是local_28FUN_00401234。我的处理顺序:先看伪代码里的字符串常量,给函数改名(比如build_url);再看它调用的FUN_xxx有没有 Windows API 特征,用 Symbol Tables 对照,把FUN_004015c0标成CreateProcess这类;最后回到调用点,数据流就清楚了。我上次卡了半小时的地方,后来发现是 Ghidra 把 C 语言的sprintf调用参数没推对,手动把参数类型一改,伪代码立刻通顺。

结论的落地:用书签(marker)标关键位置,右键 → Add Marker 写清楚"这里外发数据到 C2 地址";再顺手加个书签到字符串表里。最后导出,analyzeHeadless命令行跑批量分析,报告数据直接从工程库拉。

这套流程换个场景也通用:固件分析就是把固件解包出的 ELF 直接导入,MIPS/ARM 的语言定义在仓库的处理器模块里都有现成的。

让它变成你的样子:脚本、扩展与处理器支持

Ghidra 的扩展体系是三层。

脚本:仓库里 Ghidra/Features/Base/ghidra_scripts/ 下有两百多个示例,Java 和 Python(Jython)都能写。SearchTextScript.javaExportProgramScript.java这种改改参数就能用——比如"给所有没注释的函数批量跑一遍某检查",十分钟写完。

插件:Ghidra/Features/ 下每个目录就是一个功能模块——FunctionGraph 画控制流图、ProgramDiff 做二进制 diff、VersionTracking 做版本关联、PDB 解析 Windows 符号。要自己写插件,看 Ghidra/ 里挑一个小的参考(比如 FunctionID)照着抄结构。

处理器支持:x86、ARM/AArch64、MIPS、PowerPC 这些语言定义都在仓库里,新架构出现后官方会持续补。想深入某个架构的指令集定义,看对应 processor 目录下的 SLEIGH 文件就行。

开发环境本身也友好:GPL/ 下有 GPL 模块(GNU 反汇编器、反编译器),DevGuide.md 是开发者指南,Ghidra/Configurations/Public_Release/管发布配置。

新手最容易踩的 3 个坑

自动分析没跑完就开翻。进度条还在动的时候函数识别是不完整的,你看到的"缺失函数"可能只是没分析到。等它停,或者看 Window → AutoAnalysis 看进度,这是第一条纪律。

项目文件当垃圾文件放。.gpr/.gprj这几个文件就是你全部分析成果——改名、注释、类型定义全在里面。我一般分析到一半就打包备份一次,丢了重来真的一晚上。

静态和动态的时机搞反。上来就附加调试器,样本一看就知道是沙箱逃逸检测,直接不执行了。反过来,纯静态死磕一段加壳代码,也是浪费时间。先静态摸清行为和字符串,确定要观测的点,再上调试器验证,顺序别反。

接下来怎么走

想动手的话,三件具体的事:先用analyzeHeadless命令行跑一个自己机器上的小 C 程序编译出的 ELF,感受自动分析的边界;再读一遍 DevGuide.md 里关于扩展开发的章节,知道插件长什么样;遇到具体问题去官方论坛搜,Ghidra 用户群很活跃,大部分坑都有人踩过。处理器支持、SLEIGH 语法这类进阶内容,仓库里对应的模块自带 README,比任何二手教程都新。

【免费下载链接】ghidraGhidra is a software reverse engineering (SRE) framework项目地址: https://gitcode.com/GitHub_Trending/gh/ghidra

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 17:08:09

3 步搞定:国家中小学智慧教育平台电子课本下载工具使用指南

3 步搞定:国家中小学智慧教育平台电子课本下载工具使用指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目…

作者头像 李华
网站建设 2026/9/24 17:03:46

30 分钟配好 Continue:JetBrains 插件安装、离线构建与调参指南

30 分钟配好 Continue:JetBrains 插件安装、离线构建与调参指南 【免费下载链接】continue open-source coding agent 项目地址: https://gitcode.com/GitHub_Trending/co/continue 写代码时总要切到网页版 AI 问一句,答完再切回来贴代码&#xf…

作者头像 李华
网站建设 2026/9/24 16:58:17

45 分钟搭好 MinIO 监控:从指标抓取到 Grafana 完整指南

45 分钟搭好 MinIO 监控:从指标抓取到 Grafana 完整指南 【免费下载链接】minio MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license. 项目地址: https://gitcode.com/GitHub_Trending/mi/minio 周五下午磁盘…

作者头像 李华