Ghidra 入门:NSA 开源的逆向分析神器到底怎么用

1608 字
8 分钟
Ghidra 入门:NSA 开源的逆向分析神器到底怎么用

你拿到一个不知名的二进制文件。没有源代码,没有文档,只有一段 file 命令的输出告诉你”这是 ELF 64-bit LSB executable”。你想知道它里面到底干了什么——有没有偷偷联网?有没有读取敏感文件?硬编码了什么密码?

用 strings 只能看到明文字符串,用 objdump 看汇编又太累。你需要一个能把二进制还原成代码的图形化工具。

IDA Pro 是最好的选择——但免费版功能受限,Pro 版要几千美元。除非你公司报销,个人用户很难下得去手。

Ghidra 是 NSA(美国国家安全局)在 2019 年开源的反汇编与逆向分析框架。这不是玩票项目——NSA 内部用了几十年的工具,拿出来免费给所有人用。功能上对标 IDA Pro,而且反编译器的质量在一些场景下甚至比 IDA 更好。最关键是:完全免费,开源,还能写插件。


一、Ghidra vs IDA Pro vs radare2#

对比项GhidraIDA Proradare2
价格免费$2,789/年起免费
开源✅❌✅
图形界面✅ 开箱即用✅ 开箱即用⚠️ 需装 Cutter
反编译器✅ 内置✅ 内置❌ 需插件(Ghidra 的)
调试器⚠️ 内测中✅ 内置✅ 内置
插件生态丰富(Java/Python)丰富(IDC/Python)一般
学习曲线中等中高高
跨平台✅(需 JRE)✅✅

如果你刚开始学逆向,Ghidra 是最合适的门槛——功能足够强大,且免费让你没有心理负担。等以后遇到非要调试不可的场景,再考虑 IDA Pro 或者加一个 gdb 辅助。


二、安装#

前置要求#

Ghidra 基于 Java,需要 JDK 17 以上:

Terminal window
# Ubuntu/Debian
sudo apt install openjdk-21-jdk
# macOS
brew install openjdk@21
# 验证
java -version

下载 Ghidra#

去 GitHub Releases 下载最新版,解压即可使用:

Terminal window
wget https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_11.2_build/ghidra_11.2_PUBLIC_20250210.zip
unzip ghidra_11.2_PUBLIC_20250210.zip
cd ghidra_11.2_PUBLIC
./ghidraRun # 启动图形界面

注意目录路径中不能有空格。 Ghidra 对路径比较敏感,如果启动失败,先检查路径。


三、反编译第一个程序#

用之前第一篇 GDB 汇编教程里的 add 程序作为目标,或者随便找一个你编译过的 Linux ELF 文件。

Step 1:创建项目#

启动 Ghidra 后点击 File → New Project,选择 Non-Shared Project,填一个项目名和目录。

Step 2:导入目标文件#

把 add 拖进 Ghidra 窗口。弹窗里直接点 Yes 确认导入,然后点 OK 使用默认分析选项。

Step 3:用 CodeBrowser 打开#

导入完成后,双击文件图标打开 CodeBrowser。Ghidra 会自动开始分析——耐心等待底部的进度条走完。

Step 4:看反编译结果#

分析完成后,你会看到三个主要面板:

左侧:Symbol Tree(函数列表)
中间:Listing(反汇编)
右侧:Decompiler(反编译的 C 代码)

在左侧找到 main 函数双击,中间显示汇编代码,右侧自动显示对应的 C 语言伪代码:

void main(void)
{
int iVar1;
int local_10;
int local_14;
int local_18;
local_14 = 10;
local_18 = 20;
local_10 = add(local_14, local_18);
iVar1 = printf("Result: %d\n", local_10);
return 0;
}

跟原始代码几乎一模一样。这就是 Ghidra 最让新手震撼的地方——一个二进制文件进去,伪 C 代码出来。


四、Ghidra 最有用的四个操作#

1. 重命名变量#

反编译器生成的变量名都是 local_10、iVar1 这种毫无意义的名称。在反编译窗口里右键变量 → Rename Variable,改成有意义的名称(比如 result),修改后自动同步到所有引用位置。

2. 给函数改名#

双击选中函数名 → 右键 → Rename Function。如果你遇到了 FUN_00101234 这种自动命名,说明 Ghidra 不认识这个函数。分析调用上下文后手动改成有意义的名字。

3. 搜索字符串#

Search → For Strings,可以快速定位二进制中的硬编码字符串。很多恶意软件的关键行为线索就藏在字符串里。

4. 交叉引用#

右键一个变量或函数 → References → Show References to。看有哪些地方调用了这个函数、这个字符串被谁引用——这是理清代码逻辑的关键操作。


五、实战案例:分析一个假想的后门程序#

假设你拿到了一个可疑的 ELF 文件,怀疑是后门。用 Ghidra 打开,搜索字符串:

你会看到类似这样的字符串:

/sbin/ifconfig
/etc/shadow
http://192.168.1.100:8080/upload
POST /upload HTTP/1.1

找到函数的交叉引用,追踪谁用了 http://192.168.1.100:8080/upload,你就能看到完整的网络请求逻辑——它把 /etc/shadow 文件内容打包发送到远程服务器。

整个过程不需要你一行一行读汇编。Ghidra 的反编译器和字符串搜索已经把 80% 的工作替你做了。


常见问题

Q:Ghidra 跟 IDA Pro 比反编译质量差很多吗? 在某些场景下 Ghidra 甚至更好(尤其是 x86-64 架构)。IDA Pro 的优势在于调试器、对嵌入式架构的支持、以及更成熟的插件生态。但就看代码这件事,Ghidra 完全够用。

Q:反编译出来的 C 代码能直接编译? 不能。Ghidra 生成的是”伪 C 代码”——它保留了逻辑结构,但变量名、类型推断都可能不准确。目的是让人看懂,不是让人重新编译。

Q:对中文支持好吗? Ghidra 的界面是英文的,但分析中文路径和字符串没有问题。字符串搜索也能正常显示 UTF-8 编码的中文字符。

Q:入门逆向需要会汇编吗? 建议至少了解基础指令(mov、push、call、jmp),Ghidra 会帮你反编译成伪 C 代码,但有时候伪 C 代码不准,你还是得看汇编确认。建议先看站内这篇《x86 汇编入门:用 GDB 看懂你的 C 程序在干什么》打基础。

Q:有 Python 接口吗? 有。Ghidra 的插件可以用 Java 写,也可以用 Jython(Python 的 Java 实现)写。写个自动分析脚本、批量处理多个二进制都很方便。


Ghidra 是为数不多的”NSA 出品,你我都能用”的工具。免费、强大、活跃更新——入门逆向从它开始是最划算的选择。

逆向分析不只是破解软件。排查恶意程序、分析固件漏洞、理解老旧代码——Ghidra 在这些场景下都是趁手的工具 🐾

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Ghidra 入门:NSA 开源的逆向分析神器到底怎么用
https://www.kshare.top/posts/ghidra-intro-reverse-engineering/
作者
Kshare
发布于
2026-06-20
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
x86 汇编入门:用 GDB 看懂你的 C 程序在干什么
技术科普 不用学汇编也能读懂汇编——用 GDB 反汇编功能理解 C 代码的底层执行过程
2
Ren'Py 下载与新手入门教程(2026):从安装到做出第一个 Galgame
开发工具 Ren'Py 下载安装与新手入门教程:免费开源的视觉小说引擎,30 分钟做出第一个 Galgame。含官网下载、项目创建、基础语法速览,文末附汉化解包、存档修改等进阶工具指引。
3
Go应用性能调优实战:从pprof到goroutine泄漏检测
开发工具 一文掌握Go pprof六大Profile类型,学会使用Go 1.27的goroutine leak profile检测goroutine泄漏,附实战代码和对比表格。
4
SQLite 的 B-Tree 是怎么让查询变快的?大一也能看懂数据库索引原理
技术科普 为什么 SQLite 加个索引,百万行数据的查询从十几秒降到几毫秒?这篇文章不堆公式,用翻字典、找教室这些日常类比,把 B-Tree 的分页、分裂、查找过程讲清楚,再手把手教你用 EXPLAIN QUERY PLAN 验证索引到底有没有被用上。
5
大一新生电脑开荒指南:开学第一周该装的 12 款开源/免费软件(2026 版)
软件推荐 大一新生电脑到手别瞎装全家桶。本文按"装机第一仗→资料管理→写作业→记笔记→备份"的真实大学使用流程,推荐 12 款开源/免费替代品,并附避坑清单:哪些软件千万别装、哪些坑大一新生最容易踩。
随机文章 随机推荐
Profile Image of the Author
Kshare
Hello, I'm Kshare.
重要公告
非常抱歉!本站此前接入的 Adsterra 广告联盟存在严重问题:其脚本会在访问者不知情的情况下强制跳转到第三方劫持页面(如 verify11.click 等恶意域名),严重影响了大家的访问体验与安全。我们已第一时间彻底移除了 Adsterra 的全部广告代码,并向因此受到困扰的访客致以最诚挚的歉意。目前站内仅保留安全的自营推广链接(无脚本、无弹窗、无跳转),其余广告投放保持关闭,感谢大家的理解与支持!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
218
分类
9
标签
283
总字数
555,774
运行时长
0 天
最后活动
0 天前

文章目录