↓快轉到主要內容
所有專案

資安 CTF 戰隊|B33F 50UP

戰隊讀書會

在 B33F 50UP 發表四場戰隊讀書會,主要分享 angr 符號執行與 DLL 載入安全研究。

資安 CTF 戰隊|B33F 50UP 戰隊讀書會封面
Year
2024–2025
Role
主題研究/實驗/簡報分享
Team
個人技術分享
Share
100%
01 / Overview

專案總覽

這個頁面整理我在 B33F 50UP 戰隊讀書會獨立完成的四場技術分享。主要內容為 angr 符號執行進階實驗,以及 DLL 載入與遊戲環境中的安全議題;另外也曾分享 Windows LNK Malware 研究與 TeamT5 Camp 的 BeaverTail 惡意程式分析。

本頁以 angr 與 DLL 兩場作為主要案例,LNK 與 TeamT5 Camp 已有各自的專案頁,因此只保留分享紀錄與完整簡報。
02 / Challenge

問題與動機

符號執行與 DLL 安全都涉及底層程式行為,單看文件難以理解實際限制;需要透過小型實驗與案例把抽象機制轉成可觀察結果。

路徑與約束

angr 的狀態、路徑爆炸與 XOR 行為需要透過實驗逐步驗證。

載入與信任

DLL 的搜尋、載入與應用程式互動會形成不同安全邊界。

03–05 / Topic Tracks

選擇主要分享內容

兩場主要分享都從可重現的程式與問題出發,但研究方向不同。可在下方切換 angr 或 DLL,分別查看符號執行與 Windows 動態連結函式庫的核心內容。

03 / Solution PRIMARY TALK 01 · SYMBOLIC EXECUTION

方法與核心內容

用路徑、狀態與約束求出程式輸入

分享從 angr.Project、state 與 simulation manager 開始,透過小型題目觀察符號值如何沿程式路徑傳播,再使用 find/avoid 條件尋找能抵達目標輸出的輸入。

狀態建立

比較 entry state 與指定位置建立 state,並處理暫存器、記憶體和 stdin 中的符號值。

路徑探索

以成功輸出或目標位址定義 find,並避開錯誤分支,降低無效路徑數量。

XOR 與 BitVector

透過 8-byte XOR 實驗說明位元寬度、切片與 zero extension 對約束的影響。

失敗實驗

逐步移除題目捷徑,保留 path explosion 與 constraint 失效的過程,說明 angr 的實際限制。

angr 能協助探索程式狀態,但前提是分析者正確描述輸入、記憶體與目標條件;模型不完整時,求解結果也會失去意義。
04 / Architecture

技術脈絡

angr 的核心不是直接暴力嘗試輸入,而是把程式執行狀態、分支條件與輸入值轉成求解器能處理的約束。

BINARY載入目標程式
STATE建立符號狀態
EXPLORE探索與排除路徑
SOLVE求出可行輸入

Project、State 與 Simulation Manager

以 angr.Project 載入目標程式後,可從 entry_state 或指定位置建立 state。simulation manager 管理 active、found、avoided 等狀態集合,分析者再以位址或 stdout 內容定義 find/avoid,縮小需要求解的路徑。

建模重點

  • 不易模擬的輸入函式可從呼叫後開始,手動將 symbolic bitvector 放入暫存器或記憶體。
  • 記憶體、暫存器與運算元寬度必須符合目標架構,否則 constraint 會失真或無法建立。
  • 成功與失敗條件應盡量明確,避免 simulation manager 保留大量無關狀態。

XOR、BitVector 與位元寬度

分享以多組 8-byte 輸入和 XOR key 測試符號值傳播。concrete XOR 可直接計算,symbolic value 則必須使用 BitVector 操作;遇到寬度不一致時,以 zero_extend 或重新切分位元修正 constraint。

路徑爆炸、錯誤切片與寬度不一致,是實驗中最常造成求解時間增加或結果錯誤的原因。
05 / How it works

執行流程

從能人工理解的小題目開始,逐步拿掉捷徑,觀察 angr 在輸入模型與路徑條件改變後的行為。

01 — 標定成功與失敗條件

先以輸出字串或程式位址定義目標路徑與必須避開的錯誤路徑。

02 — 建立符號輸入

依輸入來源將 BitVector 放進 stdin、暫存器或指定記憶體位置,並補上必要約束。

03 — 探索並驗證結果

由 found state 求出具體值,再回到原始程式執行,確認輸入確實能抵達目標。

保留失敗實驗

『火拳のエース』案例會逐步移除 print_flag、xor_strings 等可直接定位答案的捷徑,再觀察 active state、constraint 與求解時間如何變化。失敗結果用來說明模型缺失與 path explosion,而不是只展示最後成功的腳本。

從解題腳本回到分析方法

簡報保留題目程式、state 建立方式、find/avoid 條件與位元處理,讓隊員能修改條件重新實驗,而非只能複製固定答案。

06 / My Contribution

我的貢獻

貢獻比例 100%。四場 B33F 50UP 讀書會皆由我獨立完成主題研究、實驗設計、簡報製作與現場分享。

  1. 01主題研究整理 angr、符號執行、DLL 與逆向相關資料。
  2. 02實驗設計建立 XOR、路徑求解與 DLL 行為驗證案例。
  3. 03簡報製作將推測與實驗結果整理成四份完整教材。
  4. 04讀書會分享帶領技術說明、示範與隊員討論。
07 / Result & Reflection

成果與反思

完成四場可獨立閱讀的技術分享。頁面以 angr 與 DLL 作為主要案例,並保留 LNK Malware 與 TeamT5 Camp 延伸分享,使研究成果成為戰隊內可重現、可延伸的知識材料。

讀書會最有價值的部分往往是沒有立刻成功的實驗;保留推測和驗證過程,比只留下結論更能幫助後續研究。
08 / Presentation

完整簡報

符號執行:angr 進階

angr、XOR 實驗與符號執行分享,共 62 頁。

滑到簡報區域後載入…

1—

若瀏覽器無法顯示嵌入式 PDF,請另開完整簡報。