为了开挂,无所不能不其用
绝地求生可以通过修改PAK文件的方式能实现诸如无后座、人物上色、早都不是什么秘密了。这也是很多市面上的插件用的方法,但是对于PAK文件如何修改
无论国内外都鲜有介绍的教程。

本文的目的在于探讨如何修改PAK,并综合了UnknownCheats论坛的论坛的一些成果。

目前知道的信息

  • 1.吃鸡正式服截止目前时间UE4引擎版本为 4.16 PAK打包及解包方式都应基于此版本(目前还无法使用UE4引擎修改PAK
     
  • 2.目前的PAK加密及解密key45DD15D6DD2DA50AEB71CE7A5284CF8EA498B2EC3D52B7E336F3EA0071CE44B3
     
  • 3.解包要通过QuickBms 以及一个bms的脚本和上面的key实现解密。打包需使用UE4引擎自带的UnrealPAK.exe来进行。
    解包结果如下: 这是一个提取自插件的无后座PAK解包 包含两个文件夹 Blueprints Animations 图为 Blueprints 内的文件

image-20210302183052630
 

  • 4.对PAK的修改是研究的重点。UnknownCheats论坛上有人这么说:使用十六进制编辑器对解密出来的武器uexp文件 在160h-200h修改即可修改武器后坐力。
     
  • 5.PAK的加载机制。遍历游戏目录content\PAKs\下的所有PAK文件后 全部加载。
    问题:

1.游戏自带的252PAK文件目前还未发现包含类似上图的文件。(是给枪械附加了一条无后座数据吗?而非修改武器文件的方式吗?)

 

2021.1.20研究进展

  • 1.游戏对PAK的加载分为同步加载和异步加载2种。
     
  • 2.后坐力文件位于PAKchunk1000-WindowsNoEditor_bps.PAk现在来看是原本的.PAK文件内后坐力文件被覆盖了实现的无后座。
     
  • 3.大更新后/PAKs/目录下多了 一个.js文件 如需添加PAK文件必须在js文件内加入自己的PAK文件名。

发点不知道有什么用的东西。 写了个SSDT钩子监视PAK文件的加载情况。读取同一个文件会对同一个文件打开四次 即产生四个文件句柄。

目测其中有玄机.... 待研究..

image-20210302183430405

 

2021.2.2研究进展

到处搜索,最开始我、在github上面看到了章鱼的一套源码,利用的是minifliter来实现的,原理就是注册一个微过滤驱动,并且在读的回调里,判定操作对象和上线文,对PUBG访问PAK进行拦截,但是好像这种方法已经被和谐,我试着编译了一个,果然牺牲了一个绝地的号,然后我就想,绝地肯定是要读这个文件的,我又尝试用独占PAK的方法来锁,但是但是现在ban的非常厉害 基本都是在线25 全局封禁。
 
我专门抓了一下 知道了大概的思路,微软提供的Procmon还是蛮好用的 不会被反调试检测到...但是功能比较弱 对付PAK检测流程足够了
首先 在PUBG init的时候 有一个动作 很少见。

createfile \`pak`s

createfile可以打开设备对象,文件,其实还有目录,知道可以打开目录 但是真正的从来没有用过。PUBG用这种方式把所有的PAK文件读入内存 如果丢进去一个编辑过的PAK文件 可以实现各种什么无后座 除草遁地。

其实我一直觉得这样读文件真TM S B...但是也可能是这个位置代码不好改 一动就动全身 不过讲道理 你每次更新恨不得比游戏本体都大,这点代码不会改?
PUBG在这里加了一个检测,第一个圈缩完的时候 差不多这个时候吧 检测开始

createfile 
ntqeuryinfomationfile

这两个函数,那么思路来了,做掉这两个函数 应该就能规避掉他的检测。参数我也找出来了,5和14 、MSDN查了一下
FileStandardInformation和FilePositionInformation

具体见https://docs.microsoft.com/en-us ... ueryinformationfile

看起来没什么比较特殊的 具体内部不知道 但是应该不会上传服务器验证 只是本地一个校验 我没有去搞反反调试 我的WIN7除了点问题 我不想在物理机上各种加载驱动。
这次抓了一下API CALL以后差不多想通了PUBG的SB思路了。createfile遍历 然后读取整个目录的文件 依次读出来 然后进行验证 这就给了隐藏文件的用处,隐藏文件内核里面走的API其实是ntquerydrietoryfile.根据infomation会返回不同结构 大部分结构中都包含一个链表
其实只要写一个minifilter驱动 把链表中的文件移出去 就跟以前隐藏进程一样 就能实现隐藏文件。

方法的确是有效的 但是ban的也快 我觉得是特征码被抓了,于是我尝试了加壳、隐藏驱动、删服务、删注册表、都无效
我说句实话 PUBG这个游戏敢去扫内核内存?我是不太信的...这事实在是有点太危险了...在隐藏驱动之后(pchunter查不到)的情况下 想抓出来一个驱动很难 扫内核内存? 不怕蹦么...

所以我开始甩锅给minifilter 我觉得是检查了微过滤的特征,然后我饶了一条远路 艹PG 然后上内核钩子,结果还真的绕过去了...

上图:就做了个除草,染色,无后座。至于具体怎么过滤,windbg挂上去,看看这两个函数的参数 ,大概就懂了!

 

2021.2.28研究进展

现在绝地求生对PAK修改的检测越来越严,导致很多辅助不能用了,现在来说一下现在的一些过检测方法。

吃鸡是一款通用游戏引擎制作的游戏,这款引擎跟经典游戏植物大战僵尸引擎极其相似。

该引擎会指定一个资源文件夹(吃鸡里就是PAKs文件夹),搜索该文件夹及子目录里面所有PAK文件然后加载,加载顺序是按照文件名排序的,当出现重名文件时,新加载的文件会覆盖旧加载的文件。

于是在最早没有PAK检测的版本,最早的吃鸡无后坐方法就是用修改后的PAK文件放进去,游戏就会自动加载。

然后为了对抗这种无后坐,吃鸡团队开始检测PAK文件。

最早的检测方法很简单:看看PAKs文件夹里面有没有多余的PAK文件,于是当时的方法就是进游戏以后删掉修改过的PAK文件。

那么问题来了:文件正在占用,怎么删掉? 当时本人做了第一个方法:mklink建立软链接,进游戏后解除软链接就可以了。
这个方法发现是受到网吧下载的Steam启发——吃鸡是不允许放在中文文件夹的,但是网吧的可以。盖伦下载器下载的吃鸡在中文文件夹,但是不影响运行。研究发现是因为用软链虚拟到C:\steam里面了。

这个方法稳定了很长时间,直到方法被人抄袭传的遍网都是,这个方法基本上凉凉了。 因为吃鸡开始检测PAK文件夹有没有软链。
于是有人发现了新方法(别人发现的):把PAK文件夹复制一份重命名,进游戏前修改的文件夹改名PAKS放进修改的文件,进游戏后文件夹名字改回来。 这个方法稳定了得有一个半月,直到2月22更新后,这个方法作废了。

其实还有个办法,但是该办法不稳定:
进游戏跳伞落地以后,暂停BEservice.exe进程(冻结,不是终止),打完一局退出以前再终止该进程重启BEservice服务。该方法目前仍然能用,但是冻结时机必须好好掌握,否则很容易出现提示:BEservice反作弊服务没有运行。
有国外大神提供方法,不是冻结进程,而是冻结线程:BEservice的主线程是保留的,只把检测线程暂停。 苦于本人能力有限,不知道怎么做到全自动实现这个功能,只能按照国外方法手动冻结。 到现在已经过去一个多月,该方法目前是否有效不得而知。

2月22日更新后,放入PAK和修改PAKS文件夹的方法也凉了,现在初始加载就会记录加载了多少个PAK文件,有多余的PAK文件是不行的。并且吃鸡会着重检测两个重要的PAK文件有没有修改

细心的发现:

  • 1:TslGame-WindowsNoEditor_erangel_lod.PAK 这个文件是多余的,可以删掉。
  • 2:TslGame-WindowsNoEditor_ui.PAK 这个文件不会被检测是否修改
  • 3:TslGame-WindowsNoEditor_ui.PAK调用很晚,可以修改。

于是新方法诞生了: 第一步:删掉原来的TslGame-WindowsNoEditor_erangel_lod.PAK文件 ,第二步,将原来的TslGame-WindowsNoEditor_ui.PAK改名为TslGame-WindowsNoEditor_erangel_lod.PAK,第三步:将修改文件(比如无后坐文件)改名为TslGame-WindowsNoEditor_ui.PAK放入PAKs文件夹。

说下为什么不直接把修改文件改名为TslGame-WindowsNoEditor_erangel_lod.PAK:
因为上面说了,PAK文件是按顺序加载,新加载的文件会覆盖旧文件,TslGame-WindowsNoEditor_erangel_lod.PAK加载顺序比较靠前,修改后的文件会被后加载的原版文件覆盖失效。

这个方法也是目前相对来说稳定的一个方法,但是缺点是只有一个文件,同时实现多个功能不方便。

网上也有软件利用改文件同时实现无后坐和除草2个功能,需要安装python-2.7,其实知道的的人都知道,python-2.7可以用来打包PAK文件的,他用的方法就是把需要的功能(无后坐、除草)的文件解压出来,通过python-2.7的u4PAK.py打包成PAK文件,然后重命名为TslGame-WindowsNoEditor_ui.PAK,放入PAKs文件夹。

删掉TslGame-WindowsNoEditor_erangel_lod.PAK 然后修改TslGame-WindowsNoEditor_ui.PAK这个方法已经传开了,估计不久就会封掉。不知道下个版本,又能想出什么过检测的方法、东西已经放在网盘里了,有需自取。

Last modification:March 2, 2021
如果你想请我喝奶茶的话