《Marvel Rivals》usermode anticheat 原始碼分析 快速閱讀精華
- 🕵️ 這次流出的原始碼揭露了《Marvel Rivals》使用者模式反作弊系統的內部運作邏輯,包含 Pytdon 驗證腳本 與 UAC 權限檢查機制。
- 🔐 核心檔案 magic_box_validator.py 採用 AES 加密與 Base64 編碼,內建 25 種狀態碼判斷系統完整性,防止作弊工具竄改。
- ⚠️ 原始碼中包含網易內部開發者信箱([email protected]),並曝光 Postman 性能分析系統與 ACSDK 組件的內部 API 端點。
👉 GM後台版 遊戲 推薦 ⬇️⬇️⬇️ 快速玩各種二次元動漫手遊app
前言與風險提醒
這篇文章整理的原始碼來自《Marvel Rivals》(漫威爭鋒)的使用者模式反作弊系統(usermode anticheat)dump 檔案。內容包含 Pytdon 驗證腳本、UAC 權限檢查邏輯,以及網易內部開發工具鏈的組態設定。
- 重要法律聲明:本文僅作為遊戲安全技術研究與教育用途。原始碼版權歸網易(NetEase)與 Marvel 所有,未經授權散佈、修改或用於商業用途可能觸犯著作權法與電腦犯罪相關法規。
- 使用風險警告:執行或使用這些腳本繞過遊戲保護機制,極可能導致《Marvel Rivals》帳號永久停權。我們強烈建議僅在離線環境或虛擬機器中進行原始碼分析,切勿在正式伺服器上使用。
magic_box_validator.py 核心驗證機制
在 `Scripts/anticheat/magic_box_validator.py` 這個檔案中,網易實作了一套完整的加密驗證鏈。這個「Magic Box」驗證器主要用來確保遊戲執行環境的完整性,防止記憶體修改或 DLL 注入。
import os
import json
import base64
import time
from enum import IntEnum
from typing import Dict, Any, Optional
import pyaes
class StatusCode(IntEnum):
SUCCESS = 0
ENV_VAR_NOT_FOUND = 101
ENV_VAR_EMPTY = 102
BASE64_DECODE_ERROR = 201
BASE64_INVALID_LENGTH = 202
AES_DECRYPT_ERROR = 301
AES_PADDING_ERROR = 302
JSON_DECODE_ERROR = 401
JSON_INVALID_FORMAT = 402
MISSING_SEED = 501
MISSING_VERSION = 502
MISSING_RESULT = 503
INVALID_SEED_TYPE = 504
INVALID_VERSION_TYPE = 505
INVALID_RESULT_TYPE = 506
INVALID_RESULT_FORMAT = 507
SEED_TOO_OLD = 508
ALGORITHM_VERSION_MISMATCH = 601
ALGORITHM_RESULT_MISMATCH = 602
DEFAULT_ENCRYPTION_KEY = b"&8pX6'fbXt^4" + b"\x00" * (32 - len(b"&8pX6'fbXt^4"))
從原始碼可以看出幾個關鍵設計:
- 多層錯誤碼系統:定義了 25 種不同的 StatusCode,從環境變數遺失(101)、Base64 解碼錯誤(201)、AES 解密失敗(301),到演算法版本不匹配(601),提供精確的除錯資訊。
- AES 加密保護:使用 `pyaes` 函式庫進行加密,預設金鑰為 `&8pX6'fbXt^4` 補零至 32 位元組。這種硬編碼金鑰雖然方便部署,但一旦洩漏就容易被繞過。
- Base64 編碼層:在 AES 加密之上額外使用 Base64 編碼,增加人工閱讀難度,同時也方便在 JSON 等文字格式中傳輸加密資料。
UAC 權限檢查與系統安全
在 `Scripts/component/acsdk_component.py` 中,網易實作了嚴格的 UAC(使用者帳戶控制)檢查機制。這段程式碼專門用來偵測玩家是否嘗試繞過 Windows 的安全防護,以管理員權限執行遊戲或注入作弊程式。
def check_uac_bypass():
try:
compat_layer = os.environ.get("__COMPAT_LAYER", "")
if compat_layer:
compat_layer_lower = compat_layer.lower()
if "runasinvoker" in compat_layer_lower:
WARN_LOG(
f"""[check_uac_bypass] UAC bypass detected: __COMPAT_LAYER={compat_layer}"""
)
return True
compat_layer_runasinvoker = os.environ.get("__COMPAT_LAYER_RUNASINVOKER", "")
if compat_layer_runasinvoker:
WARN_LOG(
"[check_uac_bypass] UAC bypass detected: __COMPAT_LAYER_RUNASINVOKER set"
)
return True
return False
except Exception as e:
WARN_LOG(f"""[check_uac_bypass] Error: {e}""")
return False
這段程式碼主要檢查兩個關鍵的環境變數:
- __COMPAT_LAYER:當這個變數包含 `runasinvoker` 字串時,表示執行檔正在以相容性模式執行,試圖欺騙系統相信它不需要提高權限。這是常見的 UAC 繞過手法。
- __COMPAT_LAYER_RUNASINVOKER:這是更具體的標記,直接表明使用了 RunAsInvoker 相容性修正,允許程式以與父進程相同的權限等級執行,通常是為了避免 UAC 彈窗。
除了 UAC 檢查,原始碼還包含 `is_running_as_admin()` 和 `is_uac_enabled()` 兩個函式,分別透過 Windows API 檢查當前是否以管理員身份執行,以及系統的 UAC 功能是否開啟。這些資訊會被回傳到網易的伺服器,用於風險評估和帳號安全分析。
網易內部開發架構整理
這次洩漏的原始碼不僅僅是反作弊模組,還包含了網易內部開發工具鏈的組態設定。在檔案開頭的註解中,出現了兩位網易開發者的內部信箱:
這些信箱屬於網易(NetEase)公司內部域名,證明瞭這些腳本確實來自官方開發環境。原始碼中還包含了一個名為 `postman` 的性能分析系統配置,這是網易內部使用的遊戲性能監控工具。
AGENT_VERSION = '1.4.12'
BASE_URL = 'https://tool.api.postman.nie.netease.com/data_api/v1/postman'
BASE_CHECK_URL = BASE_URL + '/postman_profile_base_check'
從這些配置可以看出,網易的開發架構包含以下幾個關鍵組件:
- ACSDK (Anti-Cheat SDK):核心反作弊軟體開發套件,負責初始化、心跳檢測(heartbeat)、截圖回傳(screenshot callback)等功能。原始碼顯示它會定期呼叫 `acsdk.call_sdk("hb")` 進行心跳驗證,以及 `acsdk.call_sdk("ss")` 進行螢幕截圖。
- Postman Profiler:性能分析工具,透過 `BASE_URL` 與網易內部 API 通訊,上傳性能分析資料(profile data)。配置中提到了 `INSTANCE_UPLOAD_INTERNAL_HOST` 和 `INSTANCE_UPLOAD_DEFAULT_HOST`,顯示支援內網與公網兩種上傳模式。
- WebGM (web game Master):遊戲管理員系統組件,在原始碼中負責接收反作弊事件的回呼,例如 `C_SCREEN_SHOT_BACK` 處理截圖回傳結果,`C_HEATBEAT_LOG` 記錄心跳日誌。
值得注意的是,原始碼中還包含了一個 `magic_box_validator.py` 的引用,這個「魔盒驗證器」使用了一系列魔法數字(Magic Numbers)如 `MAGIC_A = 0x9E3779B97F4A7C15`,這些常數通常用於雜湊演算法或加密簽名,進一步增強了反作弊系統的安全性。
檔案下載點 🔽
本次分析的原始碼檔案已整理成壓縮包,包含 `Scripts/anticheat/*.py`、`Scripts/component/acsdk_component.py` 以及 `Scripts/component/web_gm_component.py` 等關鍵檔案。由於內容涉及遊戲安全機制,下載後請務必在隔離環境中進行研究。
所有站內附件皆會附上安全掃描報告 請會員查看純淨度百分比後判斷使用
相關檔案須知: 取得檔案前,請先詳細閱讀文章內容 避免不必要錯誤與誤會發生。 也可多參考文章討論樓層內容 了解附件檔案相關討論資訊。
常見問題Q&A
Q:這個原始碼洩漏會對《Marvel Rivals》玩家造成什麼影響?
雖然反作弊原始碼公開可能讓作弊開發者更容易找到繞過方法,但現代反作弊系統(如本案例中的 ACSDK)通常具備伺服器端驗證與即時更新能力。網易可以透過更新 `MAGIC_A`、`MAGIC_B` 等加密常數,或調整 `StatusCode` 驗證邏輯,快速抵消原始碼洩漏帶來的風險。
Q:magic_box_validator.py 中的「Magic Box」到底是什麼?
這是網易內部對核心驗證模組的代號。該模組使用 AES-256 加密與自定義的雜湊算法(包含 `MAGIC_A`、`MAGIC_B`、`MAGIC_C` 三個魔法常數)來驗證遊戲檔案完整性。它會檢查環境變數、系統時間戳(Seed)與演算法版本,確保客戶端沒有被修改。
Q:UAC 檢查機制是如何運作的?
遊戲啟動時會呼叫 `check_uac_bypass()` 函式,檢查系統環境變數 `__COMPAT_LAYER` 與 `__COMPAT_LAYER_RUNASINVOKER`。如果發現 `runasinvoker` 字串,表示玩家可能使用相容性模式繞過 UAC 彈窗,此時系統會記錄警告日誌並回傳風險標記。同時也會檢查當前進程是否以管理員身份執行(`IsUserAnAdmin`)。
Q:這些 Pytdon 腳本可以在 Linux 或 Mac 上執行嗎?
理論上 `magic_box_validator.py` 等純 Pytdon 腳本具有跨平臺相容性,但 `acsdk_component.py` 中大量使用了 Windows 專用的 API(如 `ctypes.windll.shell32.IsUserAnAdmin`、`winreg` 模組檢查 UAC 設定)。因此這些反作弊組件實際上只能在 Windows 環境中完整運作,這也符合《Marvel Rivals》PC 版的系統需求。
Q:下載這些檔案會有法律問題嗎?
單純下載原始碼進行安全研究在大多數司法管轄區屬於合法行為,但將原始碼用於開發作弊工具、繞過遊戲保護機制,或散佈修改後的遊戲客戶端,則可能違反《數位千禧年著作權法》(DMCA)或當地類似法規。我們強烈建議將研究範圍限制在本地隔離環境,切勿連線至官方遊戲伺服器。
|