逆向工程实战手册 第 1 章

第 1 章 逆向工程是什么

📍 知识点地图 | 主题:逆向工程是什么 | 前置:无 | 后续:全书 | 核心概念:静态vs动态、快速捡漏、工作流

1.1 定义

逆向工程(Reverse Engineering,RE)是通过分析一个已完成的产品/程序,还原其设计思路、算法逻辑、数据结构的过程。在软件安全领域,特指:

  • 静态分析:不运行程序,直接分析文件内容(字节码、汇编、字符串、结构)
  • 动态分析:运行程序,观察其行为(调试、Hook、抓包、内存观察)

1.2 学习逆向的典型动机

动机 典型任务
CTF 竞赛 解 flag、逆向算法、写 exploit
安全研究 分析恶意软件、找漏洞、验证防护
商业分析 竞品协议分析、恢复丢失源码
红队/渗透 绕过检测、逆向签名逻辑、提取密钥
学术研究 理解老代码、分析格式规范

1.3 逆向的对象:一句话分类

目标 用什么方法 代表工具
ELF(Linux 可执行/库) 静态 + 动态 readelf, gdb, radare2, IDA, Ghidra
PE(Windows exe/dll) 静态 + 动态 IDA, x64dbg, Ghidra, radare2
Mach-O(macOS/iOS) 静态 + 动态 lldb, Hopper, class-dump, Frida
APK / DEX(Android) 反编译 + Hook jadx, apktool, Frida, MobSF
JS(前端/Web) 浏览器观察 + 补环境 DevTools, jshookmcp, Node
.NET / C# 元数据反编译 dnSpy, de4dot, ILSpy
Python 字节码 反编译字节码 uncompyle6, pycdc
固件(IoT) 提取 + 仿真 binwalk, unblob, QEMU
WASM 反编译到 C wasm2c, wabt, Ghidra
自定义 VM 指令集逆向 人工 + angr/Qiling/Unicorn

1.4 核心工作流(记住这个框架)

无论分析什么目标,都走这条链:

1. 侦察(Triage): file / strings / rabin2 -I → 确认类型、架构、可疑字符串
2. 静态分析: 反汇编、反编译、看导入导出、找关键函数
3. 动态验证: 运行、调试、Hook,确认静态猜想
4. 还原: 命名函数、加注释、恢复算法逻辑
5. 输出: 报告 / 补丁 / 脚本 / writeup

核心原则:静态不行就动态,Java 层不行就看 so,页面观察不够就断点,一条路不通就换一条。

1.5 快速捡漏(第一件事就做)

很多简单目标根本不需要深度逆向,先试这些:

# 1. 明文 flag / 密钥
strings binary | grep -E "flag\{|CTF\{|pico|secret|password"
rabin2 -z binary | grep -i "flag"

# 2. 动态跑一下,往往直接出结果
ltrace ./binary          # 跟踪库函数调用
strace -f -s 500 ./binary # 跟踪系统调用

# 3. hex 搜索
xxd binary | grep -i flag

# 4. 带输入跑
./binary AAAA
echo "test" | ./binary

1.6 逆向中的"第一性原理"

  • 程序只有两条路可走:比较(分支)和执行(跳转)。所有验证逻辑最终都是 cmp + jcc
  • flag/密钥/校验值一定存在内存某处(明文、加密常量、运行时计算),找到最终比较点就找到答案。
  • 反编译器(IDA/Ghidra)只是辅助,汇编看不懂时用伪代码,伪代码不信时回汇编。
  • 工具是手段,思路才是核心

1.7 常见误区

误区 正确做法
一上来就全量自动分析 先轻量侦察,再定向深入
Java 反编译不完整 = 不可分析 换 smali / so / 动态 Hook
只信反编译结果 用动态验证静态猜想
一个工具死磕 静态↔动态↔模拟执行切换

动手练习

  1. filestrings 分析一个你电脑上的 exe/dll,写下你发现的三条线索。
  2. 运行 strings 搜一个 exe 里的 URL 和路径字符串,猜它大概干什么。
  3. 准备一个 crackme(如从 pwn.college 或 crackmes.one 下载),只做侦察,不深入。

深入阅读

  • 仓库:skills/reverse-engineering/SKILL.md(问题解决工作流 + 快速捡漏清单)
  • 仓库:skills/reverse-engineering/field-notes.md(各类目标速查笔记)
  • 仓库:skills/awesome-re-resources.md(精选逆向学习资源,含 0-3 月/3-12 月学习路线)