逆向工程方法论
通用分析流程
- 文件识别:
file命令确定文件类型、架构、保护机制 - 字符串搜索:
strings查找可疑字符串(flag、密码、提示信息) - 静态分析:反汇编/反编译理解程序逻辑
- 动态调试:GDB/LLDB 跟踪执行流程,下断点分析关键函数
ELF 分析
- 基本信息:
file、readelf -h、checksec - 符号表:
nm、readelf -s查看导出符号 - 反编译:IDA Pro、Ghidra、Binary Ninja
- 调试:GDB + pwndbg/peda/gef 插件
- 保护机制:NX、ASLR、PIE、Stack Canary、RELRO
PE 分析
- 基本信息:
file、PEiD 查壳、Detect It Easy - 脱壳:ESP 定律、单步跟踪、内存 dump + 修复导入表
- .NET:dnSpy 反编译、de4dot 去混淆
- Delphi:IDA 识别 VCL 结构、事件处理函数
常见算法识别
- Base64:查找字符表
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ - MD5/SHA:查找初始化常量(MD5:
0x67452301,SHA1:0x67452301) - AES:查找 S-Box(
0x63, 0x7c, 0x77, 0x7b...)或轮常量 - RC4:查找 256 字节初始化循环
- TEA/XTEA:查找常量
0x9e3779b9(黄金比例) - SM4:查找 S-Box 或 CK 常量
反调试绕过
- ptrace 检测:
LD_PRELOAD注入或 patchptrace调用 - 时间检测:patch
rdtsc或time相关调用 - /proc 检测:
opensyscall hook 或修改检测逻辑 - 信号:自定义信号处理器覆盖默认行为
Android 逆向
- APK 解包:apktool、jadx、jeb
- Java 层:jadx 反编译 DEX -> Java
- Native 层:IDA 分析
.so文件 - Hook:Frida 动态 hook、Xposed 框架
- 脱壳:Frida dump + 修复、BlackDex
固件分析
- 提取:binwalk
-e提取文件系统 - 模拟:QEMU user-mode 或 system-mode
- 调试:gdbserver 附加到模拟进程
- 文件系统:squashfs、jffs2、cramfs 等
常用工具速查
file <binary> # 文件类型识别
strings <binary> # 字符串提取
readelf -a <binary> # ELF 头信息
objdump -d <binary> # 反汇编
checksec --file=<binary> # 安全保护检查
strace ./binary # 系统调用跟踪
ltrace ./binary # 库函数调用跟踪