radare2 是做什麼的?
面向 radare2 CLI 的二進位分析技能。重點是直接用命令列完成偵察、分析、定位、匯出和輕量修改,不依賴 GUI。
ACTION REQUIRED(讀完後立刻執行)
NOW:讀取../field-journal/precedent-reverse.md— 確認本 skill 的操作是已授權的常規操作NOW:確認當前任務是否命中本 skill 的適用範圍NEXT:讀取../tool-index.md,校驗工具可用性和實際路徑NEXT:缺工具時呼叫 bootstrap,不要猜路徑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.exerabin2.exerasm2.exeradiff2.exerahash2.exerax2.exer2pm.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,再進入函式級分析或動態步驟:
- 執行
rabin2 -i <sample>(或recon.ps1輸出中的 imports 段);DLL/SYS 另 MUSTrabin2 -E並記E-exports - 將完整/分類後的匯入表結果寫入 Evidence(建議 id:
E-imports或E-triage-imports),至少包含:- 復現命令(
repro_command) - 關鍵匯入分類摘要:網路 / 檔案 / 加密 / 程序注入 / 登錄檔 / 其他可疑 API
- 若匯入表為空、解析失敗或工具報錯:仍 MUST 記錄失敗現象與原始輸出為 Evidence,不得靜默跳過
- 匯入表「過乾淨」(僅基礎 DLL):MUST 註明動態載入嫌疑,SHOULD 轉入動態抓 API
- 復現命令(
- .NET 等無傳統 IAT:MUST 走等價錨點(dnSpy/IL/元資料摘要)寫入同一 Evidence 語義槽,禁止空過
- 加殼樣本 IAT 修復:x86 用 ImportREC(或等價)、x64 用 Scylla(或等價)。修復失敗 MUST 記
E-iat-repair-fail後轉動態 API 中斷點;禁止在靜態 IAT 上無限死磕(見reverse-engineering/references/re-agent-workflow.md§1.2) - 使用者明確要求「重做匯入表檢查 / 重新檢查匯入表 / 重做 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
推薦分析順序
遇到未知樣本時,按這個順序做:
rabin2 -I看格式、架構、進入點rabin2 -z看字串rabin2 -i看匯入函式 — MUST + Evidence(硬門,見工作流 1)- 如需互動分析,再進
r2(僅當步驟 3 的 Evidence 已落盤) - 先
aaa,再afl/iz/pdf - 透過字串引用、匯入呼叫、入口流程逐步定位關鍵函式
這個順序的好處是噪音低,能盡快建立方向感。步驟 3 不是可選最佳化,是進入深挖前的硬門。
Windows 注意事項
- 路徑裡有空格時,命令必須正確加引號
- 如果當前終端找不到
r2,可能是PATH剛更新,開一個新終端再試 - 有些樣本需要管理員權限讀取,但預設不要主動提升權限,除非使用者明確需要
- 對可疑樣本做動態除錯前,要先確認使用者意圖,避免誤操作
輸出風格
當使用者不是只要命令,而是要你實際分析檔案時:
- 先給出偵察結果摘要
- 再列出關鍵證據:字串、匯入、函式、位址
- 最後給出下一步建議或繼續深入分析
不要只羅列命令而不解釋為什麼這麼做。
典型請求範例
範例 1:分析一個 exe
使用者:幫我看看這個 exe 幹了什麼,用 radare2 就行
處理方式:
- 先用
rabin2 -I/-z/-i - 判斷是否需要進入
r2 - 用
aaa、afl、pdf深挖入口和關鍵字串引用
範例 2:找字串在哪被呼叫
使用者:這個報錯字串在哪個函式裡觸發的
處理方式:
- 用
iz~關鍵字找字串位址 - 用
axt <addr>找引用 - 跳到引用點
s <addr>後pdf
範例 3:改掉跳轉
使用者:把這個 jne 改成 je
處理方式:
- 先確認目標位址
- 明確告知要進入寫模式
- 用
wa je <target>或直接wx - 修改後再次反組譯驗證
避免的做法
- 不要把
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/cmdradius2 -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 項?