第 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 |
| 只信反编译结果 | 用动态验证静态猜想 |
| 一个工具死磕 | 静态↔动态↔模拟执行切换 |
动手练习
- 用
file、strings分析一个你电脑上的 exe/dll,写下你发现的三条线索。 - 运行
strings搜一个 exe 里的 URL 和路径字符串,猜它大概干什么。 - 准备一个 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 月学习路线)