Garena的防作弊機制 (anti-cheat mechanism)
只是機制研究說明,不會告訴你如何破解
傳統的方式
runing process scan (檢查你是不是開著作弊程式)
prcoess memory check (檢查記憶體中遊戲有沒有被動過手腳)
細節大概有人寫吧,不詳提
傳統的方式
runing process scan (檢查你是不是開著作弊程式)
prcoess memory check (檢查記憶體中遊戲有沒有被動過手腳)
細節大概有人寫吧,不詳提
還原競時通和遊戲的檔案,確保你不是執行修改過的檔案 (順便擋LOL改skin?)
8/25 Garena LOL 7.17更新後,我發現OBS game capture不能使用了 (Riot版本還是能用)
做了一些研究
我注意到 kernel mode driver
C:\Windows\System32\drivers\gaprotect.sys
這個東西無法停掉,停掉砍掉一開LOL也會回去
防毒程式好像也不能把他加進黑名單... 開檔案(按瀏覽那個,叫啥名字我忘了)找不到gaprotect.sys
就算你真的擋掉,我猜Garena也會炸給你看,不給你玩
觀察到有以下行為 (可能不是全部)
1) 隱藏process information
看不到process的argument (無法記錄後令外起動避開anti-cheat?)
可能是改system structure或是用hook system api達成 (沒研究)
可能是改system structure或是用hook system api達成 (沒研究)
2) hook system api
Garena的做法是api return都是成功,但實際上沒幫你做事
所以依靠return value來抓哪邊被擋無效
一般人大概會被騙,以為是自己哪裡做錯了
程式權限層級和行為
簡單說就是一個類似防毒軟體的東西,但只防護他想防的東西
Garena的GTV長得和OBS好像阿
OBS get-graphics-offsets32.exe, inject-helper32.exe, graphics-hook32.dll
GTV get-graphics-offsets.exe. inject-helper.exe, graphics-hook.dll
不只檔名長的和OBS很像,連用法都一樣,真是非常有趣
連自訂錯誤return value也一樣 (system error code本來就會一樣了)
OBS的用法是這樣: inject-helper32.exe dll mode pid/tid
mode 1=inject to thread, 0 inject to process
ex: inject-helper32.exe graphics-hook32.dll 1 lol_thread_id
同樣參數給GTV也通用喔
OBS的用法是這樣: inject-helper32.exe dll mode pid/tid
mode 1=inject to thread, 0 inject to process
ex: inject-helper32.exe graphics-hook32.dll 1 lol_thread_id
同樣參數給GTV也通用喔
個人覺得Garena工程師非常有可能是在參考OBS後寫的
OBS的license是 GNU GPL v2
至於有沒有抄襲/盜用,我就不知道了,認定方式也沒研究
有興趣的人可以去找比較程式執行檔的工具,看相似性
如果任何一個檔改檔名會inject失敗 (copy OBS檔案覆蓋也一樣)
猜測應該是有建立whitelist,以某種條件過濾檔案
可能是filename, checksum?
OBS get-graphics-offsets32.exe
output to %appdata%\Roaming\obs-studio\plugin_config\win-capture\32.ini
內容
[d3d8]
present=0x662e0
[d3d9]
present=0x4a064
present_ex=0xbdfc4
present_swap=0x781f
d3d9_clsoff=0x29e8
is_d3d9ex_clsoff=0x4b80
[dxgi]
present=0x21bd1
present1=0x21d0d
resize=0x255ed
GTV get-graphics-offsets.exe
output to stdout
[d3d9]
present=0x4a064
present_ex=0xbdfc4
present_swap=0x781f
d3d9_clsoff=0x29e8
is_d3d9ex_clsoff=0x4b80
[dxgi]
present=0x21bd1
resize=0x255ed
[dinput]
getdevicedata=0x6ba7
getdevicestate=0x69dd
沒有d3d8大概是用不到, dxgi沒有present1是因為OBS後來才加的
dinput大概是聊聊之類的要用熱鍵吧
結論就是
除非Garena的防護有漏洞,或是有可攻擊的地方
只能去RE,直接不讓防護機制啟動
我只是想用OBS而已,沒興趣這麼花功夫....
OBS get-graphics-offsets32.exe
output to %appdata%\Roaming\obs-studio\plugin_config\win-capture\32.ini
內容
[d3d8]
present=0x662e0
[d3d9]
present=0x4a064
present_ex=0xbdfc4
present_swap=0x781f
d3d9_clsoff=0x29e8
is_d3d9ex_clsoff=0x4b80
[dxgi]
present=0x21bd1
present1=0x21d0d
resize=0x255ed
GTV get-graphics-offsets.exe
output to stdout
[d3d9]
present=0x4a064
present_ex=0xbdfc4
present_swap=0x781f
d3d9_clsoff=0x29e8
is_d3d9ex_clsoff=0x4b80
[dxgi]
present=0x21bd1
resize=0x255ed
[dinput]
getdevicedata=0x6ba7
getdevicestate=0x69dd
沒有d3d8大概是用不到, dxgi沒有present1是因為OBS後來才加的
dinput大概是聊聊之類的要用熱鍵吧
結論就是
除非Garena的防護有漏洞,或是有可攻擊的地方
只能去RE,直接不讓防護機制啟動
我只是想用OBS而已,沒興趣這麼花功夫....
留言
張貼留言