本文所載技術僅供為技術探討以及玩遊戲之用,並非支持使用外掛。有些遊戲明訂禁止使用虛擬機,操作風險自負。
本文Ivon試圖解決Linux系統的QEMU/KVM虛擬機,在Windows虛擬機玩遊戲下所遇到的防作弊偵測問題。
在GPU直通+採用Looking Glass改善虛擬機的遊戲性能後,會遇到遊戲反作弊程式偵測處於虛擬機環境而不給玩的情況。
目前最常見的反作弊系統是藍色熊貓「Easy Anti-Cheat」和「Battleye」,這些系統屬於核心級別的反作弊服務,禁掉遊戲會不給啟動。因此為繞過Easy Anti-Cheat偵測,需要對QEMU動一些手腳才能繞過對虛擬機的偵測。
經過對QEMU硬體訊息做修改之後,可成功執行《VRChat》與堡壘之夜《Fortnite》二款採用Easy Anti-Cheat的遊戲。
使用Battleye的虹彩六號《Tom Clancy’s Rainbow Six® Siege》成功啟動(單人模式)。
不過,採用自家防作弊技術的《Valorant》仍無法啟動。
1. 環境#
- Host OS:Arch Linux
- Linux核心版本:6.4.7
- Guest OS:Windows 11 22H2
- CPU:Intel I5-7400
- GPU:Intel UHD 630
- GPU:Nvidia GTX-1050Ti
- Host OS桌面環境:KDE Plasma X11
- Host OS音訊伺服器:Pipewire
- QEMU版本:8.0.3
參考 QEMU/KVM + Looking Glass一文的說明,將Nvidia GTX-1050Ti直通給Windows 11虛擬機,並設定好Looking Glass服務。
2. 修改虛擬機的硬體訊息#
開啟Virt Manager(或是使用指令
virsh edit
),點選編輯 → 偏好設定 → 啟用XML編輯開啟Windows 11虛擬機的XML頁面
找到
<os></os>
這段,填入以下內容,啟用smbios
<os>
<smbios mode="sysinfo"/>
</os>
- 執行以下指令,取得電腦主機板的訊息
sudo dmidecode --type bios
sudo dmidecode --type baseboard
sudo dmidecode --type system
- 回到Virt Manager,在
<os></os>
上方新增<sysinfo></sysinfo>
段落,填入實體機主機板訊息。其實你不用真的如實填寫,只要這些欄位看起來像真的就行了,以下是我照抄網友提供的設定值。
<sysinfo type="smbios">
<bios>
<entry name="vendor">LENOVO</entry>
</bios>
<system>
<entry name="manufacturer">Microsoft</entry>
<entry name="product">Windows11</entry>
<entry name="version">22H2</entry>
</system>
<baseBoard>
<entry name="manufacturer">LENOVO</entry>
<entry name="product">20BE0061MC</entry>
<entry name="version">0B98401 Pro</entry>
<entry name="serial">W1KS427111E</entry>
</baseBoard>
<chassis>
<entry name="manufacturer">Dell Inc.</entry>
<entry name="version">2.12</entry>
<entry name="serial">65X0XF2</entry>
<entry name="asset">40000101</entry>
<entry name="sku">Type3Sku1</entry>
</chassis>
<oemStrings>
<entry>myappname:some arbitrary data</entry>
<entry>otherappname:more arbitrary data</entry>
</oemStrings>
</sysinfo>
- 最後找到
<features></features>
這段,設定Hyper-V模式為custom,隱藏KVM狀態
<features>
...
<acpi/>
<apic/>
<hyperv mode="custom">
<relaxed state="on"/>
<vapic state="on"/>
<spinlocks state="on" retries="8191"/>
<vpindex state="on"/>
<runtime state="on"/>
<synic state="on"/>
<stimer state="on"/>
<reset state="on"/>
<vendor_id state="on" value="123456789123"/>
<frequencies state="on"/>
</hyperv>
<kvm>
<hidden state="on"/>
</kvm>
<vmport state="off"/>
<smm state="on"/>
<ioapic driver="kvm"/>
...
</features>
- 試著開機,安裝含有Easy Anti-Cheat的遊戲試試吧。
3.其他繞過Easy Anti-Cheat偵測的方法#
有些玩家提出對QEMU本身打patch再重新編譯來繞過偵測的作法,例如 lexi-src/spoofed-qemu還有 zhaodice/qemu-anti-detection,後者宣稱只有Vanguard和Roblex的繞不過去。
不一定要將QEMU安裝到系統,Virt Manager可以修改XML檔案,將路徑指向自訂編譯的QEMU執行檔。