M12 · CTF
靜態偵察——只讀檔案,把一個 binary 讀回語意
給你一個「你自己擁有」的合成 binary(不執行它)。用靜態工具鏈回答四個問題:它連了哪些 dylib/framework、匯出/匯入哪些符號、它的 ObjC class 與 method 介面長怎樣、它的 Swift/C++ 符號 demangle 後是什麼。全程唯讀、不執行目標,辨認哪些線索只靠靜態就能拿到、哪些得等動態。
此關卡對應的模擬器(reverse-bench)尚未提供。
過關目標
- 讓 analysis.staticOnly 達到 true
- 讓 analysis.objcInterface.recovered 達到 true
- 用自己的話解釋:這條 binary 的哪些資訊「只靠靜態、不執行目標」就拿得到(結構、符號、ObjC metadata、連結關係),哪些非得動態才看得到(執行期解密字串、實際分支)?為什麼對未知/可疑樣本,靜態先行比直接執行更安全?
解答是「操作模擬器到對的狀態 + 能說出原理」,非提交 flag 字串。互動式自動評分為 roadmap 項目;目前以自我檢核完成。
提示
卡住時
先 otool -L / dyld_info -linked_dylibs 看它依賴什麼,再 nm -m 看符號來源,最後 otool -oV 把 ObjC metadata(class/method)dump 出來。這三步不執行目標。
走錯方向時
想看「執行期解密後的字串」或「實際走哪條分支」?那不是靜態能給的——靜態看到的是「所有可能路徑」與「保留在檔案裡的 metadata」。先把靜態地圖建完,動態才驗問號。
想更深入
Swift/C++ 符號是 mangled。Swift 用 `xcrun swift-demangle`(swift-demangle 在 Xcode toolchain,不在預設 PATH),C++ 用內建 c++filt。class-dump 是第三方,需先安裝。
相關指令
otoolnmdyld_infoclass-dumpc++filtswift-demangle