逆向工程入门指南

从零开始学习 Ghidra 静态分析 + Frida 动态 Hook,掌握程序逆向的核心技能

什么是逆向工程

逆向工程(Reverse Engineering)是在没有源码的情况下,通过分析编译后的二进制文件,理解程序的功能、逻辑和数据结构的技术。

两种核心方法

静态分析

Static

不运行程序,直接分析二进制文件的代码结构。反汇编(看汇编)、反编译(还原伪代码)。

代表工具:Ghidra、IDA Pro

动态分析

Dynamic

运行程序,实时观察内存、函数调用、网络通信。可以 Hook(拦截)函数,修改参数和返回值。

代表工具:Frida、LLDB

能做什么

逆向工具全景

Ghidra

免费 静态

NSA(美国国家安全局)开源的逆向框架。支持 50+ CPU 架构,自带反编译器,功能接近商业工具 IDA Pro。

Frida

免费 动态

跨平台动态插桩工具,支持 Windows / macOS / Linux / Android / iOS。用 JavaScript 编写 Hook 脚本,实时拦截函数。

IDA Pro

$1,879+/年 静态

行业标准反汇编器,94% 函数边界识别准确率。Hex-Rays 反编译器生成最干净的伪代码。

Binary Ninja

$299 静态

现代化界面,API 设计优秀。支持实时协作,性价比最高的商业工具。

Hopper

$99 买断 静态

macOS 原生体验最好的反汇编器,轻量快速,特别适合分析 macOS / iOS 程序。

Radare2 / Cutter

免费 静态

开源逆向框架,命令行为主(Cutter 是 GUI 版)。极其灵活,脚本化能力强。

Ghidra 使用教程

1. 启动 Ghidra

# macOS 启动命令
/Applications/ghidra_12.0.4_PUBLIC/ghidraRun

# 需要 JDK 21(已安装)
java -version

2. 创建项目

  1. 启动后选择 File → New Project
  2. 选择 Non-Shared Project(单人项目)
  3. 选一个目录存放项目文件,起个名字

3. 导入二进制文件

  1. File → Import File,选择要分析的可执行文件
  2. Ghidra 会自动识别文件格式(ELF / Mach-O / PE)
  3. 双击导入的文件,打开 CodeBrowser(主分析界面)
  4. 弹出提示问是否自动分析 → 点 Yes,等待分析完成

4. 核心界面说明

面板作用
Listing(中间)反汇编视图,显示汇编指令
Decompile(右侧)反编译伪代码,接近 C 语言,最常看的面板
Symbol Tree(左侧)函数列表、导入表、导出表
Data Type Manager数据结构定义
Program Trees程序段(.text / .data / .bss)

5. 常用操作

快捷键操作
G跳转到指定地址
L重命名函数 / 变量(最重要的操作)
;添加注释
T修改数据类型
Ctrl+Shift+F搜索字符串
X查看交叉引用(谁调用了这个函数)
Ctrl+E搜索内存中的字节序列
技巧:分析的第一步通常是 Search → For Strings 搜索字符串,通过错误提示、日志信息、关键字快速定位核心逻辑。

6. 分析一个程序的典型步骤

导入文件 自动分析 搜索字符串 定位关键函数 读反编译代码 重命名 + 注释 理解逻辑

Frida 使用教程

1. 基本概念

Frida 是一个动态插桩工具 — 它能在程序运行时注入 JavaScript 代码,拦截(Hook)任意函数,查看参数、修改返回值。

2. 常用命令

# 列出当前运行的进程
frida-ps

# 列出 USB 设备上的进程(手机)
frida-ps -U

# 附加到一个正在运行的进程
frida -n "Safari"

# 跟踪某个 App 的 ObjC 方法调用
frida-trace -m "-[NSURLSession dataTaskWithRequest:*]" -n "Safari"

3. 编写 Hook 脚本

新建一个 hook.js 文件:

// hook.js — 拦截 macOS 上的文件打开操作
Interceptor.attach(Module.findExportByName(null, "open"), {
    onEnter: function(args) {
        // 打印每次打开的文件路径
        console.log("[open] " + Memory.readUtf8String(args[0]));
    },
    onLeave: function(retval) {
        // 打印返回的文件描述符
        console.log("  → fd = " + retval);
    }
});
# 运行 Hook 脚本
frida -n "目标进程名" -l hook.js

4. Hook ObjC 方法(macOS / iOS)

// 拦截 NSURLRequest,查看所有网络请求的 URL
var NSURLRequest = ObjC.classes.NSURLRequest;

Interceptor.attach(NSURLRequest["- URL"].implementation, {
    onLeave: function(retval) {
        var url = new ObjC.Object(retval);
        console.log("[Request] " + url.absoluteString());
    }
});

5. 实用场景

场景Frida 做法
查看 App 发了什么网络请求Hook NSURLSession 相关方法
查看加密前的明文数据Hook CCCrypt(CommonCrypto)
绕过越狱检测Hook 检测函数,强制返回 false
导出内存中的解密数据Hook 解密函数的 onLeave,dump 返回值
追踪函数调用链frida-trace 批量 Hook
技巧:Ghidra 先静态分析找到关键函数名,再用 Frida 动态 Hook 验证 — 这是最高效的逆向组合拳。

工具深度对比

反编译准确率

IDA Pro + Hex-Rays94%
Ghidra89%
Binary Ninja85%

全面对比

维度GhidraIDA ProBinary Ninja
价格免费$1,879+/年$299
反编译质量优秀(89%)顶级(94%)很好(85%)
架构支持50+ 架构30+ 架构20+ 架构
多人协作原生支持需要插件原生支持
插件生态丰富(Java/Python)最丰富(IDAPython)增长中
上手难度中等中等较低
AI 集成有 MCP Server有插件有 API
macOS 体验良好良好良好
结论:学习阶段用 Ghidra 完全足够。当你能熟练使用 Ghidra 后,IDA Pro 的额外 5% 准确率优势才有实际意义。

实战工作流

完整逆向分析流程

1. 信息收集 2. Ghidra 静态分析 3. 定位关键逻辑 4. Frida 动态验证 5. 编写报告

Step 1 — 信息收集

file 命令查看文件类型,用 strings 提取可见字符串,了解目标程序的基本信息。

file target_binary
strings target_binary | grep -i "password\|key\|token"

Step 2 — Ghidra 静态分析

导入程序到 Ghidra,自动分析后浏览函数列表。从字符串搜索和导入函数入手定位核心代码。

Step 3 — 定位关键逻辑

通过交叉引用(Xref)追踪调用链,在反编译窗口阅读伪代码,重命名变量让代码更可读。

Step 4 — Frida 动态验证

对静态分析中发现的关键函数编写 Hook 脚本,运行时验证参数和返回值是否符合预期。

macOS 程序分析示例

# 1. 查看 macOS App 的二进制文件
file /Applications/Calculator.app/Contents/MacOS/Calculator

# 2. 查看它链接了哪些系统库
otool -L /Applications/Calculator.app/Contents/MacOS/Calculator

# 3. 导出 ObjC 类名(macOS 程序特有)
class-dump /Applications/Calculator.app/Contents/MacOS/Calculator

# 4. 用 Frida 查看计算器运行时调用了哪些方法
frida-trace -m "-[* *calculate*]" -n "Calculator"

学习资源

入门练习

CTF 练习平台

  • picoCTF — 入门级 CTF,有 Reverse 分类
  • crackmes.one — 专门的逆向练习题库
  • Hack The Box — 综合安全练习平台
  • OverTheWire — 闯关式学习

学习路线

  1. 学 x86/ARM 汇编基础
  2. 用 Ghidra 分析简单 CrackMe
  3. 学 Frida 写 Hook 脚本
  4. 做 CTF Reverse 题目
  5. 分析真实开源软件
  6. 进阶:混淆对抗、漏洞挖掘

推荐书籍 / 课程

  • 《逆向工程核心原理》
  • 《加密与解密》(看雪学院)
  • Ghidra 官方自带教程(Help → Ghidra Functionality)
  • Frida 官方文档 frida.re

社区