搜尋

BattlEyeBEDaisyTrampoline遊戲修改器

返回清單
切換到指定樓層
通知這文章過時或找檔案 發表主題

[電玩遊戲] 《BattlEye》BEDaisy 驅動入口點整理下載 反作弊保護繞過、Trampoline Chain 分析、Symbolic Execution 實作

[複製連結]
1
Polomale ( Lv.30 大天使 ) 發表於 1 小時前 | 只看該作者 回覆獎勵 |降序瀏覽 |閱讀模式

《BattlEye》BEDaisy 驅動整理 快速閱讀精華


  • 🛡️ 層層防護:BattlEye 的 CodeDefender 將 140KB 驅動程式膨脹成 39MB 的混淆迷宮
  • 🔄 無限跳轉:Entry Point 指向 65,538 個連續的 5 位元組跳轉指令(JMP rel32),形成 Trampoline Chain
  • 🧠 符號執行:使用 Symbolic Execution 框架追蹤符號化 CPU 狀態,自動折疊常數運算,一線性掃描即可穿透跳轉鏈
  • 🎯 精準定位:當遇到非 JMP 指令時即為真實驅動程式碼起點,可計算新的 RVA 並修補 PE 標頭
  • ⚠️ 風險提醒:修改核心驅動可能導致系統不穩定或觸發反作弊偵測,僅供學術研究與逆向工程學習




前言:面對 BattlEye 的層層防護


如果你曾經嘗試分析過《虹彩六號》、《絕地求生》或《逃離塔科夫》等使用 BattlEye 防護的遊戲,你一定碰過那個讓人頭痛的 BEDaisy.sys。這個驅動程式就像一道堅不可摧的數位城牆,保護著遊戲程序不被外來修改器侵擾。

但我們在實測中發現,真正的挑戰不只是驅動本身,而是 BattlEye 使用的 CodeDefender 保護層。它會將原本僅有 140KB 的驅動程式碼,膨脹成一個 39MB 的巨型二進制檔案。這就像是把一把鑰匙藏在了一座迷宮中央,而這座迷宮還是動態生成的。

今天,我們要分享的就是如何運用 Trampoline Chain 分析Symbolic Execution(符號執行) 技術,精準定位被混淆的真實入口點(Entry Point)。這不只是理論探討,更是一套可實作的驅動分析流程。

問題心得:39MB 中的 140KB 真相


當你第一次用 Cheat Engine (CE修改器) 或 IDA Pro 開啟 BEDaisy.sys 時,你會看到一個極度詭異的結構:

  • 檔案大小:39 MB
  • 實際驅動程式碼:約 140 KB
  • AddressOfEntryPoint:指向一個巨大的無名可執行區段(unnamed executable section),而非標準的 .text 區段


這個設計的意圖非常明確:浪費你的時間。在分析者還沒碰到任何有意義的程式邏輯前,就必須先處理 38MB 以上的混淆資料。這種保護機制在業界被稱為 CodeDefender,它並不依賴加密,而是利用極度冗餘的控制流來疲勞攻擊分析者。

Trampoline Chain:65,538 次的無限跳轉迷宮


現在讓我們放大觀察那個神祕的 Entry Point 區域。你會發現一個令人絕望的規律:這裡沒有實質的函數邏輯,只有無窮無盡的跳轉指令。

每一個「函數」都精確地只有 5 個位元組:

E9 xx xx xx xx  ; jmp rel32


這就是所謂的 Trampoline(彈牀)。Entry Point 指向第一個 Trampoline,它跳向第二個,第二個跳向第三個,如此反覆。我們實測發現這個鏈條長達 65,538 次跳轉!

更狡猾的是,這條鏈會在巨大的混淆區段(blob)與真正的 .text 區段之間反覆橫跳,不斷跨越區段邊界。這會讓 IDA Pro 等靜態分析工具徹底迷失,耗費數小時甚至數天在這個無意義的迷宮中打轉。

Symbolic Execution:用符號執行斬斷跳轉鏈


面對 65,538 次的手動追蹤,人類分析者顯然沒有這種耐心。但我們發現了一個關鍵弱點:每一次跳轉的目標都是固定的相對位移(rel32),直接燒錄在指令位元組中。沒有執行期計算,沒有暫存器依賴——整條鏈完全可以從靜態檔案位元組中整理出來。

這正是 Symbolic Execution(符號執行) 登場的時機。與其用笨迴圈硬跟,我們建立一個符號化的 CPU 狀態:

  • 通用暫存器(GPRs)初始為不透明符號(Sym("rax") 等)
  • 指令指標(RIP)初始為具體的入口點虛擬位址(VA)


當執行器遇到算術指令時,它建立一個抽象語法樹(AST),並在可能的情況下折疊常數。但關鍵在於處理跳轉指令的邏輯:

指令類型處理方式
jmp rel32 / rel8目標永遠是 Concrete(具體位址),直接跟隨,並用已訪問集合偵測循環
jmp 暫存器評估暫存器狀態——Concrete 則跟隨,Symbolic 則停止
其他指令停止,你已抵達真實程式碼


在 Trampoline Chain 的情況下,每一個 jmp rel32 都立即評估為 Concrete(VA)。整條 65,000+ 跳的鏈在一線性掃描中就崩塌了。執行器持續前進,直到遇到一條非跳轉指令——那就是 Trampoline Chain 的終點,也是真實驅動程式碼的起點。這個位址就是你的真實入口點(Real Entry Point)。

驅動修補:修改 Entry Point 實戰


找到真實入口點後,最後一步是修補 PE 檔案,讓它在載入時直接跳到我們找到的真實程式碼,而非那個混淆的 Trampoline Chain。

AddressOfEntryPoint 位於 PE 可選標頭(Optional Header)的固定偏移處:

e_lfanew + 4 + 20 + 16


這是一個 4 位元組的 little-endian u32 值,代表進入點的相對虛擬位址(RVA)。只需將這四個位元組替換為我們透過符號執行找到的新 RVA,存檔,就完成了。

這個修補後的驅動在載入時將會:
  • 跳過 65,538 次的無意義跳轉
  • 直接進入真實的驅動初始化程式碼
  • 讓 IDA Pro 等工具能夠正常分析,不再迷失在 Trampoline Chain 中


檔案下載與使用須知


本次分析使用的二進制檔案為 BEDaisy 驅動(版本 21.40 MB),已整理供研究使用。



所有站內附件皆會附上安全掃描報告
請會員查看純淨度百分比後判斷使用



相關檔案須知:
取得檔案前,請先詳細閱讀文章內容
避免不必要錯誤與誤會發生。
也可多參考文章討論樓層內容
了解附件檔案相關討論資訊。





常見問題Q&A


Q:什麼是 BEDaisy.sys?為什麼會出現在我的遊戲裡?
A:BEDaisy.sys 是 BattlEye 反作弊系統的核心驅動程式。當你啟動使用 BattlEye 保護的遊戲(如《虹彩六號》、《絕地求生》、《逃離塔科夫》等)時,這個驅動會載入系統核心,監控遊戲記憶體以防止作弊程式修改遊戲數據。

Q:修改 BEDaisy 驅動會不會被遊戲封鎖?
A:會。任何對反作弊驅動的修改都可能觸發 BattlEye 的檢測機制,導致遊戲帳號被永久封鎖。本文提供的分析方法與檔案僅供學術研究與逆向工程學習使用,不建議在連線遊戲中實際套用。

Q:什麼是 Trampoline Chain?為什麼 IDA Pro 會分析到當機?
A:Trampoline Chain 是一種程式碼混淆技術,透過數萬個連續的跳轉指令(JMP)組成「跳轉鏈」,讓分析工具在嘗試追蹤程式流程時陷入無限迴圈或消耗大量記憶體。本文分析的 BEDaisy 樣本就包含 65,538 次連續跳轉,足以讓傳統靜態分析工具崩潰。

Q:Symbolic Execution 是什麼?為什麼能解決 Trampoline Chain?
A:Symbolic Execution(符號執行)是一種程式分析技術,它將程式變數視為「符號」而非具體數值,透過建立抽象語法樹(AST)來追蹤程式狀態。面對 Trampoline Chain 時,符號執行器可以立即辨識出每個 JMP 指令的目標位址是「具體常數」(Concrete Value),而非需要執行期計算的變數,因此能在一線性掃描中直接「折疊」整條跳轉鏈,瞬間定位到真實程式碼。

Q:如何計算 PE 檔案的 Entry Point 偏移位址?
A:在 PE(Portable Executable)格式中,Entry Point 的相對虛擬位址(RVA)儲存在可選標頭(Optional Header)的固定偏移處。計算公式為:e_lfanew + 4 + 20 + 16。其中 e_lfanew 指向 PE 標頭的偏移量(通常位於檔案偏移 0x3C 處)。在該偏移處的 4 位元組 little-endian 整數即為目前的 Entry Point RVA,將其修改為符號執行找到的新位址即可完成修補。





大家正在看啥


收藏收藏 分享文章到FB上分享
回覆 使用道具 檢舉
複製專屬你的推廣連結:發至FB與各論壇宣傳:累積點數換GP商品 & 藍鑽
每五點閱率就可以兌換藍鑽積分或遊戲點卡 夢遊推廣文章換GP商品

你需要登入後才可以回覆 登入 | 加入會員

本版積分規則

Copyright (C) 2010-2020 夢遊電玩論壇

廣告合作:請直接聯繫我們,並附上您預刊登位置的預算。  

快速回覆 返回頂端 返回清單