前言
当 读取并修改内存 这门功夫被恶意利用于在PvP类或数据存档保存在服务端的游戏中时
普通玩家在这时失去了玩游戏的意义。如CS中的陀螺
虽然可以恰他打鸟狙(大部分情况)时的开枪间隔秒了他,但人家直接可以隔着墙看到你然后穿墙点头。这叫 透视。
也正是因为陀螺们的存在,破坏了原有的竞技氛围。
因此,反作弊就诞生了。
从用户态开始
在Win中(毕竟Win主流打游戏嘛,当然Linux也可以对内存进行增删改查),有个API函数叫
BOOL WriteProcessMemory(HANDLE hProcess,LPVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesWritten
);
,只要用OpenProcess()
打开游戏进程,找到内存中游戏内金钱或生命的地址,即可改到无敌无限金钱(早期)。
但这个太简陋了,想要N合一的“纪”,于是便使用了DLL注入(Win)/ SO注入(*nix)。
注入模块后,可以在游戏内打开“纪”的控制面板,实现对应的神仙功能。
不过,这一招被Hook WinAPI或者检查内存的反作弊给破了,如VAC。
Valve Anti-Cheat,主要是检查在游戏进程运行时的进程列表以及模块加载情况,发现异常的模块会自动与云端的特征码库比对。当然这个库会一直收录对应挂的特征码(大部分通过玩家上传)。被VAC是无解的,除非误封。并且封禁时会记录当前设备的一些特征以追踪作弊者(?)
趣事:在CS2中,有些时候鼠标DPI太高还会被VAC,甚至是游戏/驱动更新也会导致VAC。不过只要你没在游戏处于VAC保护下运行挂是没事的。
深入Kernel
BattleEye,这个内核级(与Win高度耦合)的反作弊作出了比VAC的封禁更进一步的操作——封硬件。
原神最开始的反作弊 mhyprot2.sys 被爆出一开始的常驻后台运行到提供容易被病毒利用的提权后的内核级操作的函数,并且Linux wine完全不支持它(这个不是淘汰它的主要原因),
故改用 mhyprot3.sys
(?)/HoYoKProtect.sys
(HOYOVERSE版)。以下是这个文件的类型:
HoYoKProtect.sys: PE32+ executable (native) x86-64, for MS Windows, 8 sections
这玩意也是native(内核级调用)层的,目前对正常玩家来说是个黑盒子(里面啥都不知道)。
不过,为了获得在Linux下运行原神的能力,原神在检测到是以wine运行时就不加载该内核模块(?这是作者推测,不代表官方)。
跳出Client的盒子
当然客户端没有使用反作弊时(原神在Linux下?),服务端可以安排 异常数据检测 。
例如,一个0命满精鱼叉210.5分(喵版)圣遗物的“芽衣姐”在没有被动的情况下对91级独眼小宝一个大砍出 41750 伤害,在误差(不知道多少,但有个对应区间)允许的情况下属于正常范围。如果这时候开纪打出 99999 伤害,服务端就会“警撅”并持续追踪该玩家的伤害数据。(大可能是这样?)直至在深渊12层表现出异常时或者是极短时间内获取大量原石后封禁。(?)
使用另一台电脑访问运行游戏时的电脑的内存
这个叫DMA(直接内存访问)/KVM(Linux下内核级虚拟化,然而会被挂用于访问套娃内内存数据),比较难应对的一种作弊方式。毕竟挂都没在游戏设备上运行。这种开纪方式在《瓦(国服)》上会被打压。
使用DMA的主要特征是 会多出个PCI/PCIE……设备 。
让人看看你开了吗
最终,比较可靠的是人工审核,也是最费力的事。
CSGO的OW机制就是这样,当你在最近的对局中收到大于一定量的举报时,你的demo会进入OW系统供150胜场且大于黄金1的玩家查看并给出你开了什么的信息,然后转发到V社内部再过目以决定是否采取OW封禁(有极小概率误判?)。
结语
你单机游戏(注:原神不是单机游戏)开挂没人管你,非要跑到PvP游戏(如CS)开挂获得不正当优势干嘛?影响正常人的心态。
怪不得在竞技类游戏圈流行着这句话:
开 挂 死 m
(仅对PvP类游戏内开挂玩家有效)