前言
玩吃雞時間長的雞友們 應該都知道現在的游戲環境非常差 特別在高端局 神仙滿天飛 搞得很多普通玩家非常沒有游戲體驗
因為吃雞的火爆 衍生出了一條巨大的外掛利益鏈 導致市面上出現了各式各樣的外掛http://news.17173.com/z/pubg/content/12072017/144924727.shtml
正是因為現在的神仙滿天飛 像我這種菜逼實在沒辦法生存下去 我的報復欲促使我開始了科學研究
先給大家介紹一下現在市面上的外掛種類
傳統外掛
fps游戲都有一個共同的特點,大部分計算都是本地完成的,不可能每一個動作都和服務器交互,有幾個原因:
-
- 會造成服務器負荷過大,提高運營成本
- 在對槍殺人時,幾十ms的延遲可能會扭轉戰局
- 會極大影響游戲體驗
信息安全的一個基本原則,永遠不要相信用戶的輸入。這里的輸入就是指在本地進行運算的結果。本地進行的計算越少,與服務器交互的越多,外掛利用難度更大。”>信息安全的一個基本原則,永遠不要相信用戶的輸入。這里的輸入就是指在本地進行運算的結果。本地進行的計算越少,與服務器交互的越多,外掛利用難度更大。由於大量的計算都是在本地完成的,而游戲又是運行在內存中,那么導致了我們有很多種方法進行利用。最簡單的就是用CE修改內存里的數據,常規的有注入和Hook,還有各種奇淫技巧。單以注入為例,就有五花八門的注入技術。下面是《游戲外掛攻防藝術》一書中的提到的一些方法:
-
- 注冊表注入
- 遠線程注入
- 依賴可信進程注入
- APC注入
- 消息鈎子注入
- 導入表注入
- 劫持進程創建注入
- LSP劫持注入
- 輸入法注入
- ComRes注入
修改本地文件的PUBG外掛
本篇文章就是基於這種方法實現的,原理是通過修改本地游戲資源(*.pak),來實現的各種功能,而PUBG采用BattlEye來實現反外掛,游戲運行時后台有個叫BEservice.exe的進程,進游戲后打開任務管理器就能看到兩個很明顯的PUBG logo的進程,另外一個叫TslGame.exe是游戲的進程。BEservice.exe對PAK修改的檢測十分嚴格,而且不斷在更新,這也是各種輔助有時在游戲更新后會失效的一個主要原因。而基本上一個外掛失效,也只用更新下過檢測(BEservice.exe),就能滿血復活了。
外掛介紹來自:https://bbs.ichunqiu.com/thread-37371-1-1.html?from=timeline&isappinstalled=0
科學研究
上面說了基本上通過修改pak文件的外掛失效只需要更新一下過檢測就行了
自從前幾天的游戲大更后 市面上很多過檢測的方法都已經失效了 查了很多資料實驗了很多次后 找到了個目前來說還算是穩定的方法:
復制一份PUBG目錄 以下稱bypass目錄將PUBG目錄重命名為PUBG1使用mklink命令創建bypass目錄的軟鏈接命名為PUBG使用mklink命令創建功能pak文件的軟鏈接 將其放入PUBG這個軟鏈接中的paks目錄登steam 隨便開一局游戲 上飛機后 刪除第四步在paks目錄里創建的軟鏈接刪除第三步創建的PUBG軟鏈接將PUBG1目錄重命名回PUBG
這樣就大功告成了 前4步是初始化 后3步才算是過檢測 復制完的bypass目錄在不進行大更新的情況下可以不刪除 也就是說如果你退出了游戲 就需要從第2步重新開始
發明科技
要完成這個科技其實非常簡單 只需要一些簡單的文件操作基礎即可 這里就不多bb了 直接上成品
#! /usr/bin/env python # -*- coding: utf-8 -*- """ @ Author : NNNNNaiquan @ Mail : misitenq@gmail.com """ import config import os import shutil class bypass(): def __init__(self, steamapps_path): self.steamapps_path = steamapps_path self.pubg_path = steamapps_path + 'PUBG' self.bypass_path = steamapps_path + 'bypass' if not os.path.exists(self.bypass_path): l('Info',unicode('正在初始化','utf-8').encode('gbk')) shutil.copytree(self.pubg_path,self.bypass_path) #step 1 shutil.move(self.pubg_path,self.steamapps_path + 'PUBG1') #step 2 l('Info',unicode('初始化完成','utf-8').encode('gbk')) def make_link(self, ): pubg_pak_path = self.pubg_path + '\\TslGame\\Content\\Paks\\TslGame-WindowsNoEditor_ui1.pak' l('Info',unicode('正在創建軟鏈接','utf-8').encode('gbk')) os.popen('mklink /j "' + self.pubg_path + '" "' + self.bypass_path + '"') #step 3 os.popen('mklink "' + pubg_pak_path + '" "' + config.FUNC_PAK_PATH + '"') #step 4 l('Info',unicode('軟鏈接創建成功','utf-8').encode('gbk')) def clean(self, ): bypass_pak_path = self.bypass_path + '\\TslGame\\Content\\Paks\\TslGame-WindowsNoEditor_ui1.pak' l('Info',unicode('正在過檢測','utf-8').encode('gbk')) os.remove(bypass_pak_path) #step 5 os.popen('rd /s /q "' + self.pubg_path + '"') #step 6 shutil.move(self.steamapps_path + 'PUBG1',self.pubg_path) #step 7 l('Info',unicode('成功過檢測 開始奔放吧','utf-8').encode('gbk')) def l(s,message): print '[%s] %s'%(s,message) def main(): steamapps_path = config.STEAM_PATH + 'steamapps\\common\\' if os.path.exists(steamapps_path + 'PUBG'): obj = bypass(steamapps_path) obj.make_link() l('Info',unicode('上飛機后切回來按任意鍵開始過檢測','utf-8').encode('gbk')) os.system('pause') obj.clean() else: l('Warning',unicode('請檢查配置文件中的游戲目錄是否正確','utf-8').encode('gbk')) if __name__ == '__main__': main()