協定逆向工程 是做什麼的?
立刻執行
NOW: 讀取 ../field-journal/precedent-reverse.md — 確認授權與常規操作邊界
NOW: 確認任務是否為協定/流量/序列化格式逆向(非純 Web 參數簽名 → 轉 js-reverse/)
NOW: 若有目標網路交互 → ../scripts/case-init.ps1 完成 scope;auth 未 granted 禁止對目標 ACT
NEXT: 讀取 ../tool-index.md;缺工具 bootstrap(tshark/wireshark 等可能需手動)
ACT: 進入工作流 Phase 1,產出幀佈局或消息字典草稿
適用場景
- 自訂 TCP/UDP 二進位協定
- Protobuf / gRPC / FlatBuffers / MessagePack
- WebSocket / MQTT / 私有 RPC
- PCAP / PCAPNG 還原欄位與狀態機
- 客戶端-服務端校驗、序號、加密幀頭
不走本技能
| 情況 | 去哪 |
|---|
| 僅 HTTP 參數簽名 / JS 加密 | js-reverse/ |
| 僅 TLS 憑證問題 | pentest-tools/ 或瀏覽器代理 |
| 韌體內協定棧深挖 + 模擬 | firmware-pentest/ 後再回本技能 |
工作流
Phase 1 — 採集與分診
□ 拿到樣本:PCAP / 代理匯出 / 客戶端日誌 / 二進位
□ 標記方向:C→S / S→C;是否有握手、心跳、重連
□ 固定頭?魔數?長度欄位?TLV?定長?
□ 是否壓縮(zlib/gzip/lz4)或加密(AES/ChaCha 幀內)
□ tshark -r cap.pcap -T fields -e frame.number -e ip.src -e tcp.payload
Phase 2 — 幀佈局還原
□ 對齊多個同類訊息,找不變位元組 / 自增序號
□ 長度欄位:大端/小端、含頭/不含頭
□ 校驗:CRC16/32、checksum、HMAC 位置
□ 畫出狀態機:Connect → Auth → Ready → Request/Response → Close
□ 工具:Wireshark 自訂 dissector 草稿 / ImHex / 010 Editor 模板 / Kaitai Struct
Phase 3 — 序列化與加密
□ Protobuf:.proto 恢復(blackboxprotobuf / pbtk / protoc --decode_raw)
□ gRPC:HTTP/2 headers + protobuf body
□ 加密:找金鑰派生(客戶端 so/dll/JS)→ 聯合 ida-reverse / js-reverse / apk-reverse
□ 重放:僅在授權 scope 內;先無害欄位再敏感操作
Phase 4 — 產出
MUST 產出:
- 訊息類型表(name / opcode / fields)
- 至少 1 條可重現的解碼命令或腳本
- Evidence:原始 hex 摘錄 + 解碼結果(脫敏)
工具鏈
| 工具 | 必需 | 用途 | 自舉 |
|---|
| tshark / Wireshark | 強烈建議 | PCAP 解析 | 手動 / winget |
| Python3 | 是 | 解碼腳本 | 系統 |
| blackboxprotobuf | 可選 | 未知 protobuf | pip |
| ImHex / 010 | 可選 | 結構模板 | 手動 |
| IDA / r2 / Ghidra | 按需 | 客戶端序列化函數 | 見對應技能 |
參考
references/protocol-workflow.md — 幀佈局與 Protobuf 速查
- 相關:
../ida-reverse/ ../js-reverse/ ../firmware-pentest/ ../pentest-tools/
路由上下文
上游: MASTER-ROUTING R21 · routing.md
下游: 需客戶端演算法 → ida-reverse/js-reverse;需利用重放 → pentest-tools/api-security
同級: malware-analysis(C2 協定)、digital-forensics(流量取證)
任務完成自檢