Communitygithub.com

radare2

面向 radare2 CLI 的二進位分析技能,專注於直接透過命令列進行偵察、分析、定位、匯出與輕量修改,不依賴 GUI。

radare2 是什麼?

此技能專為使用 radare2 命令列工具鏈(r2、rabin2、rasm2、radiff2、rahash2、rax2)進行二進位分析的開發者與安全研究人員設計。它強調在沒有圖形介面的情況下,快速完成對 PE、ELF、Mach-O、APK、DEX、WASM 等格式檔案的偵察與逆向工作。技能內建標準化偵察腳本(scripts/recon.ps1)與命令速查表,提供從快速偵察、互動式分析到二進位修補的完整工作流程。關鍵優勢在於其嚴格的強制門禁控制,特別是導入表檢查(rabin2 -i)必須執行並記錄證據,才能進入更深層的分析,確保分析過程的嚴謹性與可追溯性。支援 Windows 平台自動化自舉安裝,並與 radare2-skills 生態系統(如 r2xsql、r2mcp、radius2)整合,同時明確定義了與 IDA 逆向、動態分析等上游與下游技能的路由關係。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zhaoxuya520/reverse-skill/tree/main/skills/radare2

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

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 可用。先檢查:

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 -File "<skill-root>\radare2\scripts\recon.ps1" -TargetPath "C:\path\to\sample.exe"

如果需要附帶 r2 自動分析:

powershell -File "<skill-root>\radare2\scripts\recon.ps1" -TargetPath "C:\path\to\sample.exe" -RunAnalysis

references/cheatsheet.md

當需要更多命令細節、常見場景模板、或要快速回憶語法時,讀取這個速查表,而不是憑記憶硬猜。

已知現象

Windows 下偶發 .sdb 缺失告警

某些 PE 檔案在 rabin2 偵察時,可能出現類似下面的告警:

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 段);DLL/SYS 另 MUST rabin2 -E 並記 E-exports
  2. 將完整/分類後的匯入表結果寫入 Evidence(建議 id:E-imports 或 E-triage-imports),至少包含:
    • 復現命令(repro_command)
    • 關鍵匯入分類摘要:網路 / 檔案 / 加密 / 程序注入 / 登錄檔 / 其他可疑 API
    • 若匯入表為空、解析失敗或工具報錯:仍 MUST 記錄失敗現象與原始輸出為 Evidence,不得靜默跳過
    • 匯入表「過乾淨」(僅基礎 DLL):MUST 註明動態載入嫌疑,SHOULD 轉入動態抓 API
  3. .NET 等無傳統 IAT:MUST 走等價錨點(dnSpy/IL/元資料摘要)寫入同一 Evidence 語義槽,禁止空過
  4. 加殼樣本 IAT 修復:x86 用 ImportREC(或等價)、x64 用 Scylla(或等價)。修復失敗 MUST 記 E-iat-repair-fail 後轉動態 API 中斷點;禁止在靜態 IAT 上無限死磕(見 reverse-engineering/references/re-agent-workflow.md §1.2)
  5. 使用者明確要求「重做匯入表檢查 / 重新檢查匯入表 / 重做 IAT」時:MUST 重做被點名步驟本身(阻塞時先走可行性門閂:說明前提+請確認;強制則標 quality=unreadable),禁止改換為無關步驟冒充完成

未記錄匯入表(或合法等價錨點 / IAT 失敗旁路)Evidence 前:MUST NOT 聲稱「基礎偵察完成」,MUST NOT 進入工作流 2+ 的深挖結論。

優先直接執行內建腳本:

powershell -File "<skill-root>\radare2\scripts\recon.ps1" -TargetPath "sample.exe"

如果只需要手動最小命令,則使用:

rabin2 -I sample.exe
rabin2 -z sample.exe
rabin2 -i sample.exe
rabin2 -E sample.exe

關注點:

  • 檔案格式、位元數、架構、平台
  • 進入點位址
  • 可疑字串:URL、路徑、報錯、登錄檔、命令列參數
  • 匯入函式:網路、檔案、加密、程序注入、登錄檔操作(MUST 落 Evidence,見上方硬門禁)

工作流 2:互動式分析函式

r2 sample.exe

進入後常用:

aaa          # 常規自動分析
afl          # 列出函式
iz           # 列出字串
iS           # 列節區
is           # 列符號
s entry0     # 跳到進入點
pdf          # 反組譯當前函式
VV           # 進入視覺化模式(如果終端適合)
q            # 退出

說明:

  • 預設優先 aaa,不要一開始就用更重的 aaaa
  • 如果樣本很大或分析很慢,可以只分析入口附近,再手動擴充

工作流 3:定位 main / 關鍵邏輯

afl~main
afl~sym.
iz~http
iz~error
axt <addr>

思路:

  • 先從 main、進入點、字串引用入手
  • 用 axt 查誰引用了某個字串或位址
  • 找到引用點後再 s <addr>、pdf

工作流 4:十六進位與記憶體查看

px 64        # 當前位址起 64 位元組十六進位
pd 20        # 反組譯 20 條指令
psz          # 讀取當前位址字串
pxa          # 更友善的十六進位視圖

工作流 5:二進位 patch

僅當使用者明確要求修改檔案時使用:

r2 -w sample.exe

進入後例如:

s 0x401000
wa nop
wa jmp 0x401050
wq

常見寫操作:

  • wa <asm>:寫組合語言
  • wx <hex>:寫原始位元組
  • wq:寫入並退出

修改前最好先備份原檔案。如果使用者沒提備份,至少提醒一次。

工作流 6:非互動自動化

適合一次性輸出結果:

r2 -A -q -c "afl;iz;ii;q" sample.exe

常用參數:

  • -A:啟動時自動分析
  • -q:安靜模式
  • -c:執行命令串

如果命令很多,優先整理成易讀順序,不要塞入難以維護的超長串。

更推薦先用內建偵察腳本打底,再決定要不要補定制命令。

常用子工具

rabin2

適合靜態資訊提取:

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

適合快速組譯/反組譯:

rasm2 -d "9090"
rasm2 -a x86 -b 64 "xor eax, eax"

radiff2

適合對比兩個二進位:

radiff2 old.exe new.exe
radiff2 -C old.exe new.exe

rahash2

適合算雜湊:

rahash2 -a md5 sample.exe
rahash2 -a sha256 sample.exe

rax2

適合進位和編碼轉換:

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 不得進入下一步;使用者要求重做匯入表時禁止改做其他步驟
  • 禁止 IAT 修復失敗後靜態死磕:記 E-iat-repair-fail 後轉動態;禁止 64 位元樣本只用 ImportREC
  • 不要把網頁 JS 逆向誤導到這個 skill;那是 reverse-engineering 的範圍

參考資料

  • 命令速查:references/cheatsheet.md
  • 標準偵察腳本:scripts/recon.ps1

radare2-skills 生態

radare2-skills 專案(radareorg/radare2-skills)提供了更完整的生態工具和工作流:

  • r2xsql:SQL 查詢二進位匯入表 / 字串 / 函式
  • r2mcp / r2http:MCP 工具與 HTTP 狀態化命令通道
  • radius2:符號執行、符號動態分析
  • r2pm:外掛管理、擴充
  • decompiler plugins:radare2 外掛機制

使用策略:

  • 當使用者提到 r2xsql、r2mcp、r2http、radius2、r2pm、rabin2、rasm2、radiff2、rahash2、rax2 時,優先路由到本 skill(radare2/SKILL.md)
  • 這些工具只是生態加速器,不能繞過:授權門禁、tool-index 校驗、Evidence 匯入、寫模式確認
  • 給出最小可復現命令範例:
    • r2xsql -s <file> -q "SELECT ..."
    • curl.exe -sS --data-binary 'aaa' http://127.0.0.1:9393/cmd
    • radius2 -p <binary> ...
    • r2pm -ci <plugin>

本 skill 保持原有硬門禁和證據鏈完整性,不允許跳過任何授權或 Evidence 步驟。


路由上下文

上游入口: 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 或 .NET 等價)?DLL/SYS 是否含 E-exports?
  • IAT 修復失敗是否記錄 E-iat-repair-fail 並轉動態?重做請求是否回到同一步?
  • 我是否基於 tool-index 使用了真實工具路徑?
  • 我是否產出了可復現證據(命令/腳本/截圖/報告)?
  • 我是否完成並回寫了 RULES 要求的 Checklist 項?

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

api-security

Use for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication, authorization, rate-limit, and CI/CD testing.

apk-reverse

在 CLI 环境下做 Android APK 逆向时使用。适用于 APK 解包、Java 反编译、smali 修改、重打包、Frida 动态 Hook,以及按需切换到 so/native 分析。优先使用本机已安装的 jadx、apktool、frida、adb、ida-reverse、radare2。

attack-chain

Use for authorized multi-stage attack-path planning and orchestration when a task spans reconnaissance, initial access, privilege escalation, lateral movement, or impact assessment. Route single-stage tasks directly to their specialist skill.

binary-diff

|

binary-ninja-reverse

Use for authorized binary analysis in Binary Ninja, including HLIL/MLIL/LLIL inspection, strings/imports/exports, cross-references, types, patch review, Python API automation, and optional Binary Ninja MCP or localhost HTTP integration.

browser-automation

|

browser-extension-reverse

Use for authorized reverse engineering of browser extensions (Chrome/Firefox) including manifest analysis, background workers, and extension-based credential or traffic logic recovery.

case-review

Reviews a reverse-skill case package for scope readiness, Evidence to Finding to Path traceability, work item coverage, timeline references, and optional artifact hash integrity before report handoff.

cloud-k8s

Use for authorized cloud, container, and Kubernetes security assessment including metadata SSRF, IAM misconfig, container escape paths, and cluster RBAC review.

code-audit

Use for authorized source-code security review and SAST workflows including Semgrep, CodeQL patterns, dangerous API hunting, and fix verification.

ctf-sandbox

Thin PRIMARY for CTF / AWD / 靶场 multi-type orchestration. Hands off to the sidecar CTF-Sandbox-Orchestrator. Use when the user says CTF, AWD, 靶场, or 比赛题 and no more specific pwn/APK/IDA route already won.

database-security

Use for authorized database security assessment covering PostgreSQL/MySQL/MSSQL/Mongo/Redis exposure, authz, UDF/command paths, and misconfiguration review.

diagram-generator

generate, refine, validate, and render diagrams from natural language, notes, code snippets, schemas, tables, or existing diagram source. use for flowcharts, swimlanes, sequence diagrams, state diagrams, er diagrams, class diagrams, architecture/c4-style diagrams, dependency graphs, gantt charts, mind maps, user journeys, sankey-style flows, org charts, network graphs, and other visual models. supports mermaid by default, graphviz dot for complex graph layout, plantuml for uml-heavy engineering diagrams, and svg output when direct markup is more reliable.

digital-forensics

Use for authorized digital forensics including memory dumps, disk timelines, PCAP investigation, artifact triage, and IR evidence preservation.

docs-generator

|

dotnet-reverse

.NET / C# 二进制逆向。当目标是 .NET assembly(PE 头含 CLR、.exe/.dll 托管程序)、C# 编译产物(含 NativeAOT)、红队 Sharp* 工具(Rubeus / SharpHound / SharpHound 等)、.NET 混淆程序(ConfuserEx / SmartAssembly / Babel / Eazfuscator)、.NET loader / info-stealer / 套壳 malware 时使用。优先用 dnSpyEx + de4dot,需要 AI 直接操作时联动 dnSpy MCP。不用于纯 native 二进制(走 reverse-engineering / ida-reverse)。

edr-bypass-re

|

email-security

Use for authorized email security review including phishing analysis, header authentication (SPF/DKIM/DMARC), BEC patterns, and mailbox token abuse research.

firmware-pentest

|

ghidra-reverse

Use for free/open reverse engineering with Ghidra (headless or GUI), including decompile, cross-refs, and optional Ghidra MCP workflows when IDA is unavailable.

相關技能