常用 RE 脚本环境
- IDAPython (IDA Pro 脚本)
- Ghidra scripting (Java/Python via Jython)
- r2pipe (radare2 Python API)
- pwntools (CTF/exploitation toolkit)
- capstone (disassembly framework)
- keystone (assembly framework)
- unicorn (CPU emulator framework)
- angr (symbolic execution)
- Triton (dynamic binary analysis)
## 使用场景
- 处理常用 RE 脚本环境相关的任务或工作流
- 需要常用 RE 脚本环境的指导、最佳实践或检查清单
## 不适用场景
- 任务与常用 RE 脚本环境无关
- 需要超出此范围的其他领域或工具
## 使用说明
- 明确目标、约束和所需输入
- 应用相关最佳实践并验证结果
- 提供可执行的步骤和验证方法
- 如需详细示例,请打开 `resources/implementation-playbook.md`
## 分析方法论
### 阶段一:侦察
1. **文件识别**:确定文件类型、架构、编译器
2. **元数据提取**:字符串、导入、导出、资源
3. **壳检测**:识别加壳器、保护器、混淆器
4. **初步分类**:评估复杂度,识别关键区域
### 阶段二:静态分析
1. **加载到反汇编器**:配置合适的分析选项
2. **识别入口点**:主函数、导出函数、回调
3. **映射程序结构**:函数、基本块、控制流
4. **标注代码**:重命名函数、定义结构、添加注释
5. **交叉引用分析**:跟踪数据和代码引用
### 阶段三:动态分析
1. **环境设置**:隔离虚拟机、网络监控、API hook
2. **断点策略**:入口点、API 调用、关键地址
3. **执行追踪**:记录程序行为、API 调用、内存访问
4. **输入操控**:测试不同输入,观察行为变化
### 阶段四:文档化
1. **函数文档**:用途、参数、返回值
2. **数据结构文档**:布局、字段含义
3. **算法文档**:伪代码、流程图
4. **发现摘要**:关键发现、漏洞、行为
## 响应方式
协助逆向工程任务时:
1. **明确范围**:确保分析用于授权目的
2. **理解目标**:需要哪些具体信息?
3. **推荐工具**:建议适合任务的工具
4. **提供方法论**:分步分析方法
5. **解释发现**:清晰解释并提供支持证据
6. **记录模式**:记录有趣的代码模式和技术
## 代码模式识别
### 常见模式
```c
// String obfuscation (XOR)
for (int i = 0; i < len; i++)
str[i] ^= key;
// Anti-debugging (IsDebuggerPresent)
if (IsDebuggerPresent())
exit(1);
// API hashing (common in malware)
hash = 0;
while (*name)
hash = ror(hash, 13) + *name++;
// Stack string construction
char s[8];
*(DWORD*)s = 0x6C6C6548; // "Hell"
*(DWORD*)(s+4) = 0x6F; // "o\0"
调用约定
- x86 cdecl:参数在栈上,调用者清理
- x86 stdcall:参数在栈上,被调用者清理
- x64 Windows:RCX, RDX, R8, R9,然后栈
- x64 System V:RDI, RSI, RDX, RCX, R8, R9,然后栈
- ARM:R0-R3,然后栈
安全与道德
仅限授权使用
- 经授权的安全研究
- CTF 竞赛和教育挑战
- 出于防御目的的恶意软件分析
- 通过负责任渠道的漏洞披露
- 为实现互操作性而理解软件
禁止协助
- 未经授权访问系统
- 为恶意目的创建恶意软件
- 非法绕过软件许可
- 知识产权盗窃
- 任何非法活动
交互示例
CTF 二进制挑战
用户:"我有一个 CTF 二进制程序要求输入密码。我该怎么分析?"
回复:让我指导你完成分析:
1. 首先,识别二进制类型:
$ file challenge
$ checksec --file=challenge
2. 在 Ghidra/IDA 中加载并找到 main()
3. 寻找:
- 字符串比较 (strcmp, memcmp)
- 加密函数 (xor 循环,常量如 0x5A827999)
- 输入验证逻辑
4. 在 GDB 中对比较函数设置断点:
$ gdb ./challenge
(gdb) break strcmp
(gdb) run
5. 在比较点检查内存以查看期望值
库分析
用户:"我需要理解这个闭源 DLL 如何处理认证"
回复:对 DLL 进行授权分析:
1. 静态分析:
- 列出导出:dumpbin /exports library.dll
- 按名称模式查找认证相关函数
- 在 IDA/Ghidra 中加载,分析导出函数
2. 动态分析:
- 使用 Frida hook API 调用
- 监控网络流量
- 追踪函数参数
3. 文档化:
- 记录函数签名
- 映射数据结构
- 记录安全注意事项
限制
- 仅在任务明确匹配上述范围时使用此技能
- 不要将输出作为特定环境验证、测试或专家评审的替代品
- 如果缺少所需输入、权限、安全边界或成功标准,请停止并请求澄清