搜尋

Valorantanguard反作弊系統Vanguard遊戲修改器

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

[電玩遊戲] 《Valorant》Vanguard反作弊系統深度技術整理 核心架構、驅動層防護與BYOVD防禦機制

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

快速閱讀精華


  • Vanguard採用核心層驅動(Kernel Driver)架構,深入Windows系統底層進行即時監控
  • 具備15組系統呼叫攔截機制,透過HAL PMC Hook技術規避PatchGuard偵測
  • 內建BYOVD(Bring Your Own Vulnerable Driver)防禦系統,自動封鎖120+種已知漏洞驅動
  • 採用XOR-IAT動態整理技術保護核心API呼叫,防止靜態分析與篡改
  • 獨立27組根憑證資料庫,不依賴Windows內建信任鏈,確保簽章驗證可靠性




前言介紹



對於熱愛競技射擊遊戲的玩家來說,《Valorant》的公平性一直是社羣關注的焦點。Riot Games為此打造了業界矚目的Vanguard反作弊系統,這套系統以其深入核心層的防護能力著稱,但也因為其高度侵入性引發了不少討論。

這篇文章將帶大家深入瞭解Vanguard的技術內幕——不是為了破解它,而是理解現代反作弊系統如何運作。我們會從驅動層架構、系統呼叫攔截、漏洞驅動防禦等多個面向,心得這套系統的設計哲學與實作細節。

【重要提醒】本文內容純屬技術研究與教育用途,所有資訊來自公開的逆向工程分析。任何試圖繞過或幹擾反作弊系統的行為都可能違反遊戲服務條款,並導致帳號永久停權。


👉 GM後台版 遊戲 推薦 ⬇️⬇️⬇️ 快速玩各種二次元動漫手遊app



系統架構總覽



Vanguard的核心由兩個主要元件組成:

元件名稱執行層級主要功能
vgk.sys(Vanguard核心驅動)Ring 0(核心層)系統監控、Hook安裝、硬體識別
vgc.exe(使用者模式服務)Ring 3(使用者層)遊戲通訊、證據收集、UI回報


這種雙層架構的設計讓Vanguard能夠同時掌握系統底層狀態與遊戲執行資訊。核心驅動在系統啟動早期載入,確保任何試圖在遊戲執行後才啟動的作弊程式都無法隱藏痕跡。

驅動初始化流程



當Windows載入vgk.sys時,會執行以下13個關鍵步驟

  • 建立裝置物件:創建`\Device\vgk_PLZNOHACK`與符號連結`\DosDevices\vgk`,供vgc.exe通訊使用
  • 載入BYOVD黑名單:初始化已知漏洞驅動的雜湊資料庫(詳見後續章節)
  • 建立憑證資料庫:載入27組RSA根憑證,若少於16組成功載入則拒絕執行
  • 註冊物件回呼:在高度351820安裝行程與執行緒的Handle保護回呼
  • 設定系統通知:註冊行程建立、映像載入、執行緒建立的通知常式
  • 登錄檔監控:保護`HKLM\SOFTWARE\Riot Vanguard`等關鍵路徑
  • 啟動工作執行緒:建立掃描迴圈、心跳監控、LBR監控三條系統執行緒
  • 安裝HAL PMC Hook:攔截效能監視計數器呼叫作為系統呼叫分派基底
  • 建立SSDT攔截表:初始化15組系統呼叫替換處理常式
  • 清除SMEP/SMAP:透過IPI廣播暫時停用處理器保護位元(後續恢復)
  • 建立共享記憶體:配置0x2000位元組的環形緩衝區供vgc.exe讀取證據
  • 設定IRP分派表:綁定Create/Close/DeviceControl處理常式,並禁止驅動卸載
  • 驗證啟動狀態:檢查`C:\Windows\vgkbootstatus.dat`的BGKV魔術數字


SSDT攔截與Hook機制



傳統的SSDT(系統服務描述表)修補會觸發Windows的PatchGuard保護機制,導致系統不穩定。Vanguard採用更精妙的HAL PMC Hook技術

// 攔截點:HalPrivateDispatchTable+0x248(HalCollectPmcCounters)
// 原始指標儲存於 qword_FFFFF8013ADF4160
// 哨兵值 0xF33 寫入 dword_FFFFF8013AE03544 標記Hook已安裝

NTSTATUS vgk_install_hal_pmc_hook(VOID)
{
    PVOID* slot = (PVOID*)((PUCHAR)&HalPrivateDispatchTable + 0x248);
    if (slot == NULL || *slot == NULL) return STATUS_NOT_FOUND;
   
    qword_FFFFF8013ADF4160 = *slot;  // 儲存原始處理常式
   
    ULONG64 old_cr0 = __readcr0();
    __writecr0(old_cr0 & ~0x10000ULL);  // 暫時關閉寫入保護
    _disable();
    InterlockedExchangePointer(slot, (PVOID)vgk_hal_collect_pmc_counters_hook);
    _enable();
    __writecr4(old_cr0);
   
    _InterlockedExchange((volatile LONG*)&dword_FFFFF8013AE03544, 0xF33);
    return STATUS_SUCCESS;
}


透過這個機制,Vanguard在不直接修改SSDT的情況下,攔截了以下15組系統呼叫

編號原始函式替換處理常式監控目的
0nt!IoCreateFilevgk_hook_iocreatefile檔案建立監控
1nt!ZwClosevgk_hook_zwcloseHandle關閉追蹤
2nt!ObReferenceObjectByHandlevgk_hook_obref物件參考監控
3ci!CiCheckSignedFilevgk_hook_cicheck簽章驗證攔截
5nt!ObQueryNameInformationvgk_hook_obquery隱藏`\Device\vgk`路徑
7nt!MmCopyVirtualMemoryvgk_hook_mmcopy記憶體複製監控
8nt!NtMapViewOfSectionvgk_hook_ntmapview區段映射追蹤
9-10nt!PsSuspendThread/Processvgk_hook_pssuspend暫停操作監控
11-12win32k輸入/GDI函式vgk_hook_win32k輸入模擬偵測
13dxgkrnl!DxgkPresentvgk_hook_dxgkpresent畫面呈現監控
14win32k視窗親和性vgk_hook_affinity視窗覆蓋偵測


BYOVD漏洞驅動防禦



BYOVD(Bring Your Own Vulnerable Driver)是現代作弊程式常用的技術——利用有漏洞的合法驅動(如`gdrv.sys`、`rtcore64.sys`等)來取得核心層權限。Vanguard對此建構了四層防禦:

  • 名稱比對層:約120組驅動名稱的FNV1a-32雜湊黑名單(如`mhyprot2.sys`、`kdmapper.sys`等)
  • 映像雜湊層:約25組已知不良驅動的SHA-256雜湊
  • 憑證驗證層:整理PKCS#7簽章,比對130組憑證黑名單
  • 特徵掃描層:前64KB區域的ASCII標記偵測(如`"kdmapper"`、`"blackbone"`等)


當偵測到可疑驅動時,Vanguard會:

// 觸發VAN 0x70(BYOVD_DETECTED)錯誤
// 強制卸載驅動(ZwUnloadDriver)
// 若遊戲進行中且設定啟用,可能觸發KeBugCheckEx(0x119)藍底白字

vgk_byovd_handle_match(full_image_name, image_info, 0xE0000101 /* BYOVD_IMG */);


行程監控與防護



Vanguard維護一個32槽的受保護行程環形緩衝區,用於追蹤兩類關鍵行程:

行程類型類型代碼原因代碼保護行為
vgc.exe(Vanguard服務)7290 (0x122)Handle權限限制、記憶體保護
VALORANT遊戲主程式68159 (0x1FDF)完整防護、注入偵測
其他受保護行程1258 (0x102)基礎監控


每個槽位記錄32位元組資訊,包含行程指標、時間戳記與分類標記。當外部程式嘗試開啟這些行程的Handle時,物件回呼機制會自動剝離危險權限:

// 行程Handle:剝離 VM_OPERATION、VM_READ、VM_WRITE、DUP_HANDLE
// 執行緒Handle:根據是否為vgc行程,剝離不同權限位元

ACCESS_MASK after = before & (16 * (LONG)is_vgc - 59);
// is_vgc=0: 0xFFFFFFC5(剝離0x3A)
// is_vgc=1: 0xFFFFFFD5(允許VM_READ)


記憶體與頁表保護



Vanguard在覈心層進行精細的頁表操作,以確保Hook安裝過程的原子性:

  • PTE批次切換:透過`vgk_pte_present_batch_toggle`函式,暫時清除PTE的Present位元
  • 全域TLB刷新:兩次CR4.PGE位元切換,確保CPU轉譯快取的一致性
  • 序列化屏障:`cpuid(eax=1)`指令確保記憶體寫入順序
  • 鎖定字元協調:位元15標記寫入視窗開啟,位元0標記修補完成


這種設計允許Vanguard在不中斷系統運作的情況下,將原本唯讀的核心頁面暫時設為可寫入,完成Hook安裝後再恢復保護狀態。

加密與憑證系統



Vanguard內建27組RSA根憑證,完全不依賴Windows的憑證儲存區。這個設計防止攻擊者透過羣組原則或AD注入偽造的信任根:

// 憑證資料庫位於 0xFFFFF8013ADEF260
// 每槽600位元組,包含發行者CN、RSA模數、BCrypt金鑰Handle
// 必須成功載入至少16組,否則驅動拒絕初始化

#define VGK_CERT_SLOT_RIOT_OPERATOR_ROOT     8  // "DigiCert Trusted Root G4"
#define VGK_CERT_SLOT_RIOT_INTERMEDIATE     15 // "DigiCert G4 Code Signing 2021 CA1"
#define VGK_CERT_SLOT_RIOT_HONEYPOT         26 // "Gamerdoc Inc"(蜜罐憑證)


值得注意的是第26槽的"Gamerdoc Inc"蜜罐憑證——這是Riot故意放置的標記,用於偵測試圖偽造簽章的攻擊者。

IRP通訊與證據回報



vgc.exe透過DeviceIoControl與vgk.sys通訊,使用0x22C0EC等IOCTL碼。核心驅動維護一個64項的分派表,每項532位元組,包含:

  • 命令代碼(或0xFFFFFFFF萬用字元)
  • 動作代碼(0=允許,1=拒絕)
  • 裝置名稱(最多260個寬字元)
  • 輪換槽位與呼叫者歷史記錄


證據回報採用變動長度寬字元格式,包含時間戳記前綴、類別前綴與格式化訊息。嚴重違規可能觸發KeBugCheckEx藍底白字(如自我完整性驗證失敗時的0xC4參數)。

登錄檔監控



Vanguard在高度351820註冊CmRegisterCallbackEx回呼,監控以下關鍵路徑的修改嘗試:

  • `\Registry\Machine\SYSTEM\CurrentControlSet\Services\vgk*`(驅動服務設定)
  • `\Registry\Machine\SOFTWARE\Riot Vanguard`(反作弊組態)
  • `\Registry\Machine\SOFTWARE\Microsoft\Cryptography`(硬體識別碼)
  • `\Registry\Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Image File Execution Options`(映像劫持)


任何寫入嘗試都會設定`DET_REGISTRY_TAMPER`標記,並回傳`STATUS_ACCESS_DENIED`。

反除錯機制



Vanguard在多個層面部署反除錯措施:

  • DR暫存器清除:透過DPC廣播清除所有處理器的除錯暫存器
  • 計時異常偵測:RDTSC時間戳記比對,識別單步執行或虛擬化延遲
  • CR4完整性監控:檢查SMEP、SMAP、OSXSAVE等保護位元是否被清除
  • 跨行程注入偵測:監控執行緒建立時的返回位址與呼叫者行程
  • XCR0基線檢查:驗證擴充控制暫存器的一致性


常見問題Q&A



Q:Vanguard會影響系統效能嗎?
A:核心驅動的掃描迴圈在VGC連線時每1.5秒執行一次,未連線時每30秒執行一次。對現代硬體而言,這個頻率的影響微乎其微。

Q:為什麼Vanguard需要在系統啟動時載入?
A:這是為了確保在Windows載入過程的早期階段就建立監控基準,任何試圖在遊戲啟動後才載入的驅動都會被標記為可疑。

Q:Vanguard會收集哪些個人資訊?
A:根據技術分析,Vanguard主要收集硬體識別資訊(CPU品牌、磁碟序號、網卡MAC、SMBIOS UUID、TPM EK雜湊等),用於建立機器指紋,而非個人識別資訊。

Q:可以關閉Vanguard嗎?
A:可以透過服務管理員停止vgc.exe,但這會導致無法啟動《Valorant》。驅動層的vgk.sys設計為無法卸載(DriverUnload = NULL),需要重新啟動才能完全移除。

Q:Vanguard與其他反作弊系統(如BattlEye、Easy Anti-Cheat)有何不同?
A:Vanguard的獨特之處在於其自主的憑證驗證鏈深度BYOVD防禦,不依賴Windows的信任基礎建設,且對漏洞驅動的防禦更為積極。

Q:為什麼有時會看到VAN錯誤代碼?
A:VAN代碼是Vanguard的違規分類系統,例如VAN 1067表示PMC Hook哨兵異常,VAN 0x70表示偵測到BYOVD嘗試。這些代碼幫助支援團隊快速定位問題類型。





大家正在看啥


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

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

本版積分規則

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

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

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