M02 · CTF
讀懂 load commands
載入內建 arm64 樣本,用解剖器讀出標頭與 load commands:說出進入點在哪、 哪個 segment 可執行、哪個可寫,並指出兩者為何不重疊(W^X)。
Mach-O 解剖器
模型邊界:本工具真解析 Mach-O 結構(對照本機 otool 驗證), 但不做 CMS 簽章驗證、不算 CodeDirectory CDHash(M03)。上傳的檔案全程留在你的瀏覽器,不會上傳。僅在自有/獲授權的樣本上練習(DESIGN.md §10)。
過關目標
- 讓 header.fileTypeName 達到 "EXECUTE"
- 讓 segment.__TEXT.prot 達到 "r-x"
- 讓 loadCommand.LC_MAIN.entryoff 達到 1128
- 用自己的話解釋:用自己的話說明為何 __TEXT(r-x) 與 __DATA_CONST(rw-) 的權限刻意不重疊。
解答是「操作模擬器到對的狀態 + 能說出原理」,非提交 flag 字串。互動式自動評分為 roadmap 項目;目前以自我檢核完成。
提示
卡住時
進入點看 LC_MAIN 的 entryoff;保護權限看每個 LC_SEGMENT_64 的 initprot 欄位。
走錯方向時
__TEXT 是 r-x(可執行不可寫),__DATA_CONST 是 rw-(可寫不可執行)。沒有 segment 同時 w+x。
想更深入
想想:若 __TEXT 可寫,攻擊者就能直接改程式碼頁。W^X 正是要切斷「寫入→執行」這條路。
相關指令
otoolsize