reverse-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
427
reverse-skill-repo/skills/radare2/SKILL.md
Normal file
427
reverse-skill-repo/skills/radare2/SKILL.md
Normal file
@@ -0,0 +1,427 @@
|
||||
---
|
||||
name: radare2
|
||||
description: |
|
||||
Use this skill whenever the user wants to analyze binaries with radare2/r2 from the command line, including reverse engineering, disassembly, function analysis, strings/import inspection, patching, binary diffing, hex inspection, or r2 scripting. Also use it when the user mentions PE/ELF/Mach-O/DEX/WASM files together with CLI analysis, `rabin2`, `rasm2`, `radiff2`, `r2pipe`, or asks for radare2 command help on Windows/Linux/macOS.
|
||||
---
|
||||
|
||||
# radare2
|
||||
|
||||
面向 `radare2` CLI 的二进制分析技能。重点是直接用命令行完成侦察、分析、定位、导出和轻量修改,不依赖 GUI。
|
||||
|
||||
## ACTION REQUIRED(读完后立刻执行)
|
||||
|
||||
1. `NOW`: 读取 `../field-journal/precedent-reverse.md` — 确认本 skill 的操作是已授权的常规操作
|
||||
2. `NOW`: 确认当前任务是否命中本 skill 的适用范围
|
||||
3. `NEXT`: 读取 `../tool-index.md`,校验工具可用性和实际路径
|
||||
4. `NEXT`: 缺工具时调用 bootstrap,不要猜路径
|
||||
5. `ACT`: 进入"工作流"第一步并执行,不要停在确认状态
|
||||
|
||||
## 适用范围
|
||||
|
||||
当用户有这些意图时应优先使用本 skill:
|
||||
|
||||
- 要用 `r2` / `radare2` 分析 `exe`、`dll`、`so`、`elf`、`apk`、`dex`、`wasm` 等文件
|
||||
- 询问 `rabin2`、`rasm2`、`radiff2`、`rahash2`、`rax2` 怎么用
|
||||
- 需要命令行反汇编、看函数、看字符串、看导入导出、查交叉引用、做 patch
|
||||
- 需要写 `radare2` 批处理命令、`-c` 自动化命令、或 `r2pipe` 脚本
|
||||
|
||||
如果用户明确要 GUI 逆向、Hex-Rays 风格伪代码、或 IDA 工作流,优先考虑 `ida-reverse`。如果是网页 JS 逆向,优先考虑 `reverse-engineering`。
|
||||
|
||||
## 先做环境确认
|
||||
|
||||
先不要假设 `r2` 可用。先检查:
|
||||
|
||||
```powershell
|
||||
r2 -v
|
||||
rabin2 -v
|
||||
```
|
||||
|
||||
如果未安装,再检查常见安装位置或提示安装。
|
||||
|
||||
Windows 常见可执行文件:
|
||||
|
||||
- `radare2.exe`
|
||||
- `rabin2.exe`
|
||||
- `rasm2.exe`
|
||||
- `radiff2.exe`
|
||||
- `rahash2.exe`
|
||||
- `rax2.exe`
|
||||
- `r2pm.exe`
|
||||
|
||||
## 内置资源
|
||||
|
||||
这个 skill 自带两个资源,优先复用,不要每次临时组织一套重复命令。
|
||||
|
||||
### `scripts/recon.ps1`
|
||||
|
||||
标准侦察脚本,适合先做第一轮概况分析。会输出:
|
||||
|
||||
- 基本信息
|
||||
- 节区
|
||||
- 导入
|
||||
- 导出
|
||||
- 字符串
|
||||
- 可选的 `r2 -A` 自动分析摘要
|
||||
|
||||
调用方式:
|
||||
|
||||
```powershell
|
||||
powershell -File "<skill-root>\radare2\scripts\recon.ps1" -TargetPath "C:\path\to\sample.exe"
|
||||
```
|
||||
|
||||
如果需要附带 `r2` 自动分析:
|
||||
|
||||
```powershell
|
||||
powershell -File "<skill-root>\radare2\scripts\recon.ps1" -TargetPath "C:\path\to\sample.exe" -RunAnalysis
|
||||
```
|
||||
|
||||
### `references/cheatsheet.md`
|
||||
|
||||
当需要更多命令细节、常见场景模板、或要快速回忆语法时,读取这个速查表,而不是凭记忆硬猜。
|
||||
|
||||
## 已知现象
|
||||
|
||||
### Windows 下偶发 `.sdb` 缺失告警
|
||||
|
||||
某些 PE 文件在 `rabin2` 侦察时,可能出现类似下面的告警:
|
||||
|
||||
```text
|
||||
ERROR: Cannot find ...\share\format\dll\*.sdb
|
||||
```
|
||||
|
||||
如果主体输出仍然正常返回,通常不影响基础侦察结论,先继续分析即可。不要因为这类附带告警就直接判定分析失败。
|
||||
|
||||
## 基本原则
|
||||
|
||||
### 1. 先侦察,后深挖
|
||||
|
||||
不要一上来就全量自动分析。先用轻量命令确认文件类型、架构、入口点、字符串、导入表,再决定是否做 `aaa`、`aaaa` 或定向分析。
|
||||
|
||||
### 2. 优先最小足够命令
|
||||
|
||||
`radare2` 命令非常多,用户通常只需要最短路径:
|
||||
|
||||
- 看文件信息:`rabin2 -I`
|
||||
- 看字符串:`rabin2 -z`
|
||||
- 看导入导出:`rabin2 -i` / `rabin2 -E`
|
||||
- 交互分析:`r2 <file>` 后再执行局部命令
|
||||
|
||||
### 3. 修改前保持谨慎
|
||||
|
||||
如果用户要 patch 二进制:
|
||||
|
||||
- 默认先只读打开:`r2 <file>`
|
||||
- 只有在明确需要修改时再用写模式:`r2 -w <file>` 或会话中 `oo+`
|
||||
- 修改前先告知风险,避免无意覆盖原文件
|
||||
|
||||
## 常用工作流
|
||||
|
||||
## 工作流 1:快速侦察
|
||||
|
||||
适合刚拿到一个二进制文件时。
|
||||
|
||||
### 硬门禁(MUST — 未满足禁止进入工作流 2 及后续)
|
||||
|
||||
对 PE/ELF/Mach-O 等含导入表的二进制,**MUST** 先完成导入表检查并落成 Evidence,再进入函数级分析或动态步骤:
|
||||
|
||||
1. 执行 `rabin2 -i <sample>`(或 `recon.ps1` 输出中的 imports 段)
|
||||
2. 将完整/分类后的导入表结果写入 Evidence(建议 id:`E-imports` 或 `E-triage-imports`),至少包含:
|
||||
- 复现命令(`repro_command`)
|
||||
- 关键导入分类摘要:网络 / 文件 / 加密 / 进程注入 / 注册表 / 其他可疑 API
|
||||
- 若导入表为空、解析失败或工具报错:仍 MUST 记录失败现象与原始输出为 Evidence,**不得静默跳过**
|
||||
3. 用户明确要求「重做导入表检查 / 重新检查导入表」时:MUST 重做本硬门步骤本身,**禁止改换为其他步骤冒充完成**
|
||||
|
||||
未记录导入表 Evidence 前:MUST NOT 声称「基础侦察完成」,MUST NOT 进入工作流 2+ 的深挖结论。
|
||||
|
||||
优先直接运行内置脚本:
|
||||
|
||||
```powershell
|
||||
powershell -File "<skill-root>\radare2\scripts\recon.ps1" -TargetPath "sample.exe"
|
||||
```
|
||||
|
||||
如果只需要手动最小命令,则使用:
|
||||
|
||||
```powershell
|
||||
rabin2 -I sample.exe
|
||||
rabin2 -z sample.exe
|
||||
rabin2 -i sample.exe
|
||||
rabin2 -E sample.exe
|
||||
```
|
||||
|
||||
关注点:
|
||||
|
||||
- 文件格式、位数、架构、平台
|
||||
- 入口点地址
|
||||
- 可疑字符串:URL、路径、报错、注册表、命令行参数
|
||||
- 导入函数:网络、文件、加密、进程注入、注册表操作(**MUST 落 Evidence,见上方硬门禁**)
|
||||
|
||||
## 工作流 2:交互式分析函数
|
||||
|
||||
```powershell
|
||||
r2 sample.exe
|
||||
```
|
||||
|
||||
进入后常用:
|
||||
|
||||
```text
|
||||
aaa # 常规自动分析
|
||||
afl # 列出函数
|
||||
iz # 列出字符串
|
||||
iS # 列节区
|
||||
is # 列符号
|
||||
s entry0 # 跳到入口点
|
||||
pdf # 反汇编当前函数
|
||||
VV # 进入可视化模式(如果终端适合)
|
||||
q # 退出
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
- 默认优先 `aaa`,不要一开始就用更重的 `aaaa`
|
||||
- 如果样本很大或分析很慢,可以只分析入口附近,再手动扩展
|
||||
|
||||
## 工作流 3:定位 main / 关键逻辑
|
||||
|
||||
```text
|
||||
afl~main
|
||||
afl~sym.
|
||||
iz~http
|
||||
iz~error
|
||||
axt <addr>
|
||||
```
|
||||
|
||||
思路:
|
||||
|
||||
- 先从 `main`、入口点、字符串引用入手
|
||||
- 用 `axt` 查谁引用了某个字符串或地址
|
||||
- 找到引用点后再 `s <addr>`、`pdf`
|
||||
|
||||
## 工作流 4:十六进制与内存查看
|
||||
|
||||
```text
|
||||
px 64 # 当前地址起 64 字节十六进制
|
||||
pd 20 # 反汇编 20 条指令
|
||||
psz # 读取当前地址字符串
|
||||
pxa # 更友好的十六进制视图
|
||||
```
|
||||
|
||||
## 工作流 5:二进制 patch
|
||||
|
||||
仅当用户明确要求修改文件时使用:
|
||||
|
||||
```powershell
|
||||
r2 -w sample.exe
|
||||
```
|
||||
|
||||
进入后例如:
|
||||
|
||||
```text
|
||||
s 0x401000
|
||||
wa nop
|
||||
wa jmp 0x401050
|
||||
wq
|
||||
```
|
||||
|
||||
常见写操作:
|
||||
|
||||
- `wa <asm>`:写汇编
|
||||
- `wx <hex>`:写原始字节
|
||||
- `wq`:写入并退出
|
||||
|
||||
修改前最好先备份原文件。如果用户没提备份,至少提醒一次。
|
||||
|
||||
## 工作流 6:非交互自动化
|
||||
|
||||
适合一次性输出结果:
|
||||
|
||||
```powershell
|
||||
r2 -A -q -c "afl;iz;ii;q" sample.exe
|
||||
```
|
||||
|
||||
常用参数:
|
||||
|
||||
- `-A`:启动时自动分析
|
||||
- `-q`:安静模式
|
||||
- `-c`:执行命令串
|
||||
|
||||
如果命令很多,优先整理成易读顺序,不要塞入难以维护的超长串。
|
||||
|
||||
更推荐先用内置侦察脚本打底,再决定要不要补定制命令。
|
||||
|
||||
## 常用子工具
|
||||
|
||||
### `rabin2`
|
||||
|
||||
适合静态信息提取:
|
||||
|
||||
```powershell
|
||||
rabin2 -I sample.exe # 基本信息
|
||||
rabin2 -S sample.exe # 节区
|
||||
rabin2 -s sample.exe # 符号
|
||||
rabin2 -i sample.exe # 导入
|
||||
rabin2 -E sample.exe # 导出
|
||||
rabin2 -z sample.exe # 字符串
|
||||
rabin2 -zz sample.exe # 更详细字符串
|
||||
```
|
||||
|
||||
### `rasm2`
|
||||
|
||||
适合快速汇编/反汇编:
|
||||
|
||||
```powershell
|
||||
rasm2 -d "9090"
|
||||
rasm2 -a x86 -b 64 "xor eax, eax"
|
||||
```
|
||||
|
||||
### `radiff2`
|
||||
|
||||
适合对比两个二进制:
|
||||
|
||||
```powershell
|
||||
radiff2 old.exe new.exe
|
||||
radiff2 -C old.exe new.exe
|
||||
```
|
||||
|
||||
### `rahash2`
|
||||
|
||||
适合算哈希:
|
||||
|
||||
```powershell
|
||||
rahash2 -a md5 sample.exe
|
||||
rahash2 -a sha256 sample.exe
|
||||
```
|
||||
|
||||
### `rax2`
|
||||
|
||||
适合进制和编码转换:
|
||||
|
||||
```powershell
|
||||
rax2 0x401000
|
||||
rax2 4198400
|
||||
rax2 -s hello
|
||||
```
|
||||
|
||||
## 推荐分析顺序
|
||||
|
||||
遇到未知样本时,按这个顺序做:
|
||||
|
||||
1. `rabin2 -I` 看格式、架构、入口点
|
||||
2. `rabin2 -z` 看字符串
|
||||
3. `rabin2 -i` 看导入函数 — **MUST + Evidence(硬门,见工作流 1)**
|
||||
4. 如需交互分析,再进 `r2`(仅当步骤 3 的 Evidence 已落盘)
|
||||
5. 先 `aaa`,再 `afl` / `iz` / `pdf`
|
||||
6. 通过字符串引用、导入调用、入口流程逐步定位关键函数
|
||||
|
||||
这个顺序的好处是噪音低,能尽快建立方向感。步骤 3 不是可选优化,是进入深挖前的硬门。
|
||||
|
||||
## Windows 注意事项
|
||||
|
||||
- 路径里有空格时,命令必须正确加引号
|
||||
- 如果当前终端找不到 `r2`,可能是 `PATH` 刚更新,开一个新终端再试
|
||||
- 有些样本需要管理员权限读取,但默认不要主动提升权限,除非用户明确需要
|
||||
- 对可疑样本做动态调试前,要先确认用户意图,避免误操作
|
||||
|
||||
## 输出风格
|
||||
|
||||
当用户不是只要命令,而是要你实际分析文件时:
|
||||
|
||||
- 先给出侦察结果摘要
|
||||
- 再列出关键证据:字符串、导入、函数、地址
|
||||
- 最后给出下一步建议或继续深入分析
|
||||
|
||||
不要只罗列命令而不解释为什么这么做。
|
||||
|
||||
## 典型请求示例
|
||||
|
||||
### 示例 1:分析一个 exe
|
||||
|
||||
用户:`帮我看看这个 exe 干了什么,用 radare2 就行`
|
||||
|
||||
处理方式:
|
||||
|
||||
1. 先用 `rabin2 -I/-z/-i`
|
||||
2. 判断是否需要进入 `r2`
|
||||
3. 用 `aaa`、`afl`、`pdf` 深挖入口和关键字符串引用
|
||||
|
||||
### 示例 2:找字符串在哪被调用
|
||||
|
||||
用户:`这个报错字符串在哪个函数里触发的`
|
||||
|
||||
处理方式:
|
||||
|
||||
1. 用 `iz~关键字` 找字符串地址
|
||||
2. 用 `axt <addr>` 找引用
|
||||
3. 跳到引用点 `s <addr>` 后 `pdf`
|
||||
|
||||
### 示例 3:改掉跳转
|
||||
|
||||
用户:`把这个 jne 改成 je`
|
||||
|
||||
处理方式:
|
||||
|
||||
1. 先确认目标地址
|
||||
2. 明确告知要进入写模式
|
||||
3. 用 `wa je <target>` 或直接 `wx`
|
||||
4. 修改后再次反汇编验证
|
||||
|
||||
## 避免的做法
|
||||
|
||||
- 不要把 `radare2` 当成只有 `aaa` 一个命令的工具
|
||||
- 不要在未说明风险时直接写模式打开用户文件
|
||||
- 不要在还没做基础侦察前就下结论
|
||||
- **禁止跳过导入表检查**(`rabin2 -i` / recon imports):未写入 Evidence 不得进入下一步;用户要求重做导入表时禁止改做其他步骤
|
||||
- 不要把网页 JS 逆向误导到这个 skill;那是 `reverse-engineering` 的范围
|
||||
|
||||
## 参考资料
|
||||
|
||||
- 命令速查:`references/cheatsheet.md`
|
||||
- 标准侦察脚本:`scripts/recon.ps1`
|
||||
|
||||
---
|
||||
|
||||
## 路由上下文
|
||||
|
||||
**上游入口**: `skills/SKILL.md`(总控)、`routing.md`
|
||||
**上游备选**: `ida-reverse/`(需要反编译/伪代码时升级到 IDA)
|
||||
**下游出口**:
|
||||
- 需动态分析 → `reverse-engineering/tools-dynamic.md`(Frida/GDB)
|
||||
- 需深度反编译 → `ida-reverse/`
|
||||
- PAT 发现有趣字符串后需交叉引用 → `ida-reverse/`(IDA 的 xref 更强大)
|
||||
|
||||
**同级关联模块**: `ida-reverse/`(互补:r2 侦察快,IDA 反编译深)
|
||||
|
||||
---
|
||||
|
||||
## 按需自举(On-Demand Bootstrap)
|
||||
|
||||
本 skill 的入口脚本已接入统一自举系统。缺少 radare2 时不会直接报错,而是自动尝试安装。
|
||||
|
||||
### 自动化能力边界
|
||||
|
||||
| 工具 | 可自动安装 | 安装方式 | 说明 |
|
||||
|------|-----------|---------|------|
|
||||
| r2 | ✓ | GitHub Release ZIP (w64) | 自动下载解压到 `%USERPROFILE%\Tools\radare2\` |
|
||||
| rabin2 | ✓ | 同上(包含在 radare2 发行包中) | — |
|
||||
| rasm2 | ✓ | 同上 | — |
|
||||
| radiff2 | ✓ | 同上 | — |
|
||||
| rahash2 | ✓ | 同上 | — |
|
||||
| rax2 | ✓ | 同上 | — |
|
||||
|
||||
### 自举触发点
|
||||
|
||||
- `scripts/recon.ps1`:缺 `rabin2` 或 `r2` 时自动调用 `bootstrap-reverse.ps1`
|
||||
|
||||
### 自举失败时
|
||||
|
||||
如果自动安装失败(网络不通、GitHub API 限流等),脚本会抛出明确错误并附带手动安装链接。
|
||||
|
||||
手动安装:从 https://github.com/radareorg/radare2/releases 下载 `radare2-*-w64.zip`,解压到 `%USERPROFILE%\Tools\radare2\` 并确保 `bin\` 目录在 PATH 中。
|
||||
|
||||
|
||||
## 任务完成自检(声称完成前 MUST 通过)
|
||||
|
||||
- [ ] 我是否执行了工作流中的每一步(而不是只阅读)?
|
||||
- [ ] 导入表检查是否已执行且写入 Evidence(E-imports / E-triage-imports)?若用户要求重做,是否重做了同一步而非换步骤?
|
||||
- [ ] 我是否基于 `tool-index` 使用了真实工具路径?
|
||||
- [ ] 我是否产出了可复现证据(命令/脚本/截图/报告)?
|
||||
- [ ] 我是否完成并回写了 RULES 要求的 Checklist 项?
|
||||
97
reverse-skill-repo/skills/radare2/references/cheatsheet.md
Normal file
97
reverse-skill-repo/skills/radare2/references/cheatsheet.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# radare2 速查表
|
||||
|
||||
## 基础侦察
|
||||
|
||||
```powershell
|
||||
rabin2 -I sample.exe
|
||||
rabin2 -S sample.exe
|
||||
rabin2 -i sample.exe
|
||||
rabin2 -E sample.exe
|
||||
rabin2 -zz sample.exe
|
||||
```
|
||||
|
||||
## 进入交互
|
||||
|
||||
```powershell
|
||||
r2 sample.exe
|
||||
```
|
||||
|
||||
```text
|
||||
aaa
|
||||
afl
|
||||
iz
|
||||
iS
|
||||
is
|
||||
s entry0
|
||||
pdf
|
||||
q
|
||||
```
|
||||
|
||||
## 字符串和引用
|
||||
|
||||
```text
|
||||
iz~http
|
||||
iz~error
|
||||
axt <addr>
|
||||
s <addr>
|
||||
pdf
|
||||
```
|
||||
|
||||
## 常用查看
|
||||
|
||||
```text
|
||||
px 64
|
||||
pd 20
|
||||
psz
|
||||
pxa
|
||||
```
|
||||
|
||||
## patch
|
||||
|
||||
```powershell
|
||||
r2 -w sample.exe
|
||||
```
|
||||
|
||||
```text
|
||||
s 0x401000
|
||||
wa nop
|
||||
wx 9090
|
||||
wq
|
||||
```
|
||||
|
||||
## 非交互模式
|
||||
|
||||
```powershell
|
||||
r2 -A -q -c "afl;iz;ii;q" sample.exe
|
||||
```
|
||||
|
||||
## 其他工具
|
||||
|
||||
### rasm2
|
||||
|
||||
```powershell
|
||||
rasm2 -d "9090"
|
||||
rasm2 -a x86 -b 64 "xor eax, eax"
|
||||
```
|
||||
|
||||
### radiff2
|
||||
|
||||
```powershell
|
||||
radiff2 old.exe new.exe
|
||||
radiff2 -C old.exe new.exe
|
||||
```
|
||||
|
||||
### rahash2
|
||||
|
||||
```powershell
|
||||
rahash2 -a md5 sample.exe
|
||||
rahash2 -a sha256 sample.exe
|
||||
```
|
||||
|
||||
### rax2
|
||||
|
||||
```powershell
|
||||
rax2 0x401000
|
||||
rax2 4198400
|
||||
rax2 -s hello
|
||||
```
|
||||
85
reverse-skill-repo/skills/radare2/scripts/recon.ps1
Normal file
85
reverse-skill-repo/skills/radare2/scripts/recon.ps1
Normal file
@@ -0,0 +1,85 @@
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$TargetPath,
|
||||
|
||||
[int]$StringsLimit = 40,
|
||||
|
||||
[int]$ImportsLimit = 80,
|
||||
|
||||
[switch]$RunAnalysis
|
||||
)
|
||||
|
||||
# 强制当前脚本使用 UTF-8 输出,尽量减少中文标题乱码。
|
||||
[Console]::InputEncoding = [System.Text.UTF8Encoding]::new($false)
|
||||
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
|
||||
$OutputEncoding = [System.Text.UTF8Encoding]::new($false)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
. (Join-Path $PSScriptRoot '..\..\scripts\lib\ToolDiscovery.ps1')
|
||||
|
||||
$bootstrapScript = Join-Path $PSScriptRoot '..\..\scripts\bootstrap-reverse.ps1'
|
||||
|
||||
function Get-RequiredToolSpec {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Name
|
||||
)
|
||||
|
||||
$spec = Resolve-ReverseToolSpec -Name $Name
|
||||
if (-not $spec.Available) {
|
||||
# Attempt auto-bootstrap
|
||||
if (Test-Path -LiteralPath $bootstrapScript) {
|
||||
Write-Output "INFO: $Name not found, attempting auto-bootstrap..."
|
||||
& powershell.exe -NoProfile -ExecutionPolicy Bypass -File $bootstrapScript -Capability @($Name) -SkipRefresh
|
||||
$spec = Resolve-ReverseToolSpec -Name $Name
|
||||
}
|
||||
if (-not $spec.Available) {
|
||||
throw "缺少命令:$Name — 自动安装失败,请手动安装。参考: https://github.com/radareorg/radare2"
|
||||
}
|
||||
}
|
||||
return $spec
|
||||
}
|
||||
|
||||
function Write-Section {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Title
|
||||
)
|
||||
|
||||
# 用固定分段标题,方便人看,也方便后续 grep。
|
||||
""
|
||||
"=== $Title ==="
|
||||
}
|
||||
|
||||
$rabin2 = Get-RequiredToolSpec -Name 'rabin2'
|
||||
$r2 = $null
|
||||
if ($RunAnalysis) {
|
||||
$r2 = Get-RequiredToolSpec -Name 'r2'
|
||||
}
|
||||
|
||||
# 将输入路径规范化成绝对路径,避免 r2/rabin2 在相对路径下歧义解析。
|
||||
$resolvedPath = Resolve-Path -LiteralPath $TargetPath
|
||||
$target = $resolvedPath.Path
|
||||
|
||||
"目标文件: $target"
|
||||
|
||||
Write-Section -Title '基本信息'
|
||||
& $rabin2.Command @($rabin2.PrefixArgs + @('-I', '--', $target))
|
||||
|
||||
Write-Section -Title '节区'
|
||||
& $rabin2.Command @($rabin2.PrefixArgs + @('-S', '--', $target))
|
||||
|
||||
Write-Section -Title '导入'
|
||||
& $rabin2.Command @($rabin2.PrefixArgs + @('-i', '--', $target)) | Select-Object -First $ImportsLimit
|
||||
|
||||
Write-Section -Title '导出'
|
||||
& $rabin2.Command @($rabin2.PrefixArgs + @('-E', '--', $target))
|
||||
|
||||
Write-Section -Title '字符串'
|
||||
& $rabin2.Command @($rabin2.PrefixArgs + @('-zz', '--', $target)) | Select-Object -First $StringsLimit
|
||||
|
||||
if ($RunAnalysis) {
|
||||
Write-Section -Title '函数与入口分析'
|
||||
& $r2.Command @($r2.PrefixArgs + @('-A', '-q', '-c', 's entry0;afl;iz;ii;q', '--', $target))
|
||||
}
|
||||
91
reverse-skill-repo/skills/radare2/scripts/recon.sh
Normal file
91
reverse-skill-repo/skills/radare2/scripts/recon.sh
Normal file
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env bash
|
||||
# recon.sh — radare2 快速侦察(二进制基本信息、节区、导入导出、字符串)
|
||||
# 等价于 Windows 版的 recon.ps1
|
||||
#
|
||||
# 用法:
|
||||
# bash recon.sh <target_file> [--strings-limit 40] [--imports-limit 80] [--analyze]
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
KALI_BOOTSTRAP="$(cd "$SCRIPT_DIR/../../../kali/scripts" 2>/dev/null && pwd)/bootstrap-reverse.sh"
|
||||
|
||||
# ─── 参数 ──────────────────────────────────────────────────────────────────────────
|
||||
|
||||
TARGET=""
|
||||
STRINGS_LIMIT=40
|
||||
IMPORTS_LIMIT=80
|
||||
RUN_ANALYSIS=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--strings-limit) STRINGS_LIMIT="$2"; shift 2 ;;
|
||||
--imports-limit) IMPORTS_LIMIT="$2"; shift 2 ;;
|
||||
--analyze) RUN_ANALYSIS=true; shift ;;
|
||||
-*) echo "未知选项: $1"; exit 1 ;;
|
||||
*) TARGET="$1"; shift ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "$TARGET" ]]; then
|
||||
echo "用法: $0 <target_file> [--strings-limit N] [--imports-limit N] [--analyze]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$TARGET" ]]; then
|
||||
echo "ERR: 文件不存在: $TARGET"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ─── 工具检测 ──────────────────────────────────────────────────────────────────────
|
||||
|
||||
ensure_tool() {
|
||||
local name="$1"
|
||||
if command -v "$name" &>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
echo "INFO: $name 未找到,尝试安装..."
|
||||
if [[ -x "$KALI_BOOTSTRAP" ]]; then
|
||||
bash "$KALI_BOOTSTRAP" r2 --skip-refresh 2>/dev/null || true
|
||||
fi
|
||||
if ! command -v "$name" &>/dev/null; then
|
||||
echo "ERR: $name 不可用。安装: apt install radare2"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
ensure_tool "rabin2"
|
||||
[[ "$RUN_ANALYSIS" == "true" ]] && ensure_tool "r2"
|
||||
|
||||
# ─── 绝对路径 ──────────────────────────────────────────────────────────────────────
|
||||
|
||||
TARGET="$(realpath "$TARGET")"
|
||||
echo "目标文件: $TARGET"
|
||||
|
||||
# ─── 侦察 ─────────────────────────────────────────────────────────────────────────
|
||||
|
||||
echo ""
|
||||
echo "=== 基本信息 ==="
|
||||
rabin2 -I -- "$TARGET"
|
||||
|
||||
echo ""
|
||||
echo "=== 节区 ==="
|
||||
rabin2 -S -- "$TARGET"
|
||||
|
||||
echo ""
|
||||
echo "=== 导入 ==="
|
||||
rabin2 -i -- "$TARGET" | head -n "$IMPORTS_LIMIT"
|
||||
|
||||
echo ""
|
||||
echo "=== 导出 ==="
|
||||
rabin2 -E -- "$TARGET"
|
||||
|
||||
echo ""
|
||||
echo "=== 字符串 ==="
|
||||
rabin2 -zz -- "$TARGET" | head -n "$STRINGS_LIMIT"
|
||||
|
||||
if [[ "$RUN_ANALYSIS" == "true" ]]; then
|
||||
echo ""
|
||||
echo "=== 函数与入口分析 ==="
|
||||
r2 -A -q -c 's entry0;afl;iz;ii;q' -- "$TARGET"
|
||||
fi
|
||||
Reference in New Issue
Block a user