《国王的恩赐2》中的技能点其实就是秩序、权利、混沌、策略四点,可以通过做任务获得,还可以通过CE修改器修改,但是很多玩家都不太清楚修改的方法是什么,其实技能点想要修改只需要用ce,数值类型4字节,搜索秩序、权利、混沌、策略点,更多如下。
技能点CE修改方法介绍用ce,数值类型4字节,反复搜索秩序、权利、混沌、策略点其中之一,找到该点数地址。我这里地址是3C开头的。
右键地址,选择“浏览相关内存区域”。
秩序、权利、混沌、策略 对应编号分别为 01 02 03 04
每一条点数对应一段数据,以秩序点为例,目前我秩序点为16,对应16进制为10.所以该段数据为:
01 00 00 00 10 00 00 00
其中01为编号,10为当前点数。
在这段数据附近可找到编号02、03、04的数据段,对应权利、混沌、策略点
在编号后面相应位置进行修改即可
最高级技能需要28点,对应16进制为1C。
《The Slormancer》中是可以使用CE改变材料的数量的,这样可以大幅度减少肝度,但是很多玩家都不太清楚改变数量的操作是什么,其实想要改材料数量首先需要有两个以上你要改的材料,更多如下。
CE改材料数量方法介绍
首先你得有2个以上的这个材料,这个游戏好像只能搜数目最后变动过的一种材料。比如10个传奇材料碎片,然后右键拿一个起来,搜9,再拿一个搜8,放回去再搜10多搜几遍就行。
外挂这个东西相信大家都不陌生,比如你刚刚回到家,累的不行,想打开电脑玩几把游戏,结果,心态爆炸,各种自瞄锁头。透视。举报了还没用,这个就是其他的人将自己的快乐建立在你的基础上,就大家聊聊那些反外挂的事
1.外挂起源外挂这个事情要追溯到 2000 年。当年星际争霸的开全图,CS 的透视、穿墙等,让游戏完全失去公平竞技性。当时反外挂的概念也呼之欲出。而后随着 PC 端网络游戏的崛起,就很少要有人再去玩或者谈起这些游戏,但是游戏外挂却跟随时代的脚步而不断前进。
2.外挂是如何工作的先说外挂的种类,大家都知道了,脱机挂(封包挂),内存挂(调用游戏内功能,篡改游戏数据),模拟挂(模拟键盘鼠标代替人工操作)诸如此类
技术性分类:
1.脱机类外挂
在游戏开发过程中,每款游戏的客户端与服务端都会有固定的通信格式,大部分游戏通信协议位于TCP层之上,自定义的数据结构,外挂开发者们称此为封包。下面简单列举一个简单的打斗封包,以方便说明脱机类外挂原理。
0000ABCD 0000DCBA 00001234 00001000
例如玩家1在与玩家2打斗过程中,发送到服务器这样一个16字节的数据包,其中游戏开发者定义此数据包含义如下:
0000ABCD:玩家1的ID。
0000DCBA:玩家2的ID。
00001234:玩家1所使用的技能编号。
00001000:玩家1对玩家2造成的伤害,转换为十进制为:4096。
当服务器接收到此数据包时,则会将玩家2的血量减少4096点,如果玩家血量减少后小于等于0,则判定为玩家2已经阵亡。这时服务器会返回给玩家2的客户端一个数据包,玩家2的客户端则播放一个玩家2已经死亡的动画。
以上逻辑,其实存在着大量的漏洞,比如说,服务器应该判定玩家上一次释放00001234号技能是否在冷却时间内,再比如说,服务器应该判定玩家战斗过程中所造成的伤害是否与其装备、法力值、攻击力、暴击等相吻合,是否超过了游戏本身限制的最大伤害。类似这种漏洞,每一款游戏都会存在,只不过不会这么明显。一些老游戏在这方面做的相对较弱,所以漏洞更多。
另外,在游戏开发过程中,数据通信的格式在游戏开发商的公司中都有相关文档明确定义的。而这些文档非常机密。一些游戏开发商公司的安全做的不够好的情况下,可能会造成游戏代码以及文档的泄露。这些资料,一旦流入外挂开发者手中,那么这款游戏就极有可能会出现脱机式外挂。
脱机外挂定义:在不开启游戏客户端的情况下,第三方程序直接与游戏服务器进行通信,模拟账号登陆验证、选择角色、进入游戏、进入场景、开始战斗、对怪物造成伤害等操作时的合法数据包,发送给服务器,而服务器是没有能力判断出这些包是否是客户端发来的,即便有验证手段,由于源码已经泄露,外挂开发者可以轻而易举的模拟出服务端的各种验证机制。即便数据包传送过程中是加密的,由于源码外漏,外挂开发者一样可以正确模拟出数据包的加密方式。
2.模拟发包类外挂
脱机类外挂多半依赖于游戏开发商的资料外泄,而模拟发包类外挂与脱机类外挂很近似。原因是一些外挂开发者本身可能是游戏开发者出身,对游戏中的逻辑相当了解,他们可以用调试+抓包分析的方法,在没有源码以及通信格式资料的情况下,分析出一些游戏中关键的数据包,并采用一定的模拟发包技术,完成游戏中本身含有的功能。
此类外挂多半需要向游戏中注入一个dll文件,并且用dll获取到与服务器通信的socket句柄,在此socket句柄上,将自己组织好的、合法的数据包发送到服务器。部分比较老的游戏中很常见此类的外挂,比如决战OL中的挂机内挂中的喊话功能,自动喝药功能,都是模拟发包方式完成的。
3、内存式外挂
在没有游戏客户端源码,并且没有一定的游戏开发经验的情况下,依然是可以进行外挂开发的。而这些外挂开发者,一般熟练掌握操作系统的各种底层机制,如模块、线程、内存、内核对象、内核机制等技术。这些技术,有助于他们去分析游戏客户端进程中的逻辑和重要数据,之后他们一般会注入dll到游戏进程,去操作游戏进程内数据,完成一些特殊功能。当遇到一些改动,服务器恰好没有校验时,他们的外挂功能便成功执行。
三、 游戏外挂的基本原理
对于单机游戏而言:游戏中绝大部分的参数(比如血、蓝、能量亦或是金币)都存储在计算机的堆栈中,一些类似剧情进度的则加密后写入本地的自定义配置文件中;所以单机外挂原理是修改本地配置文件
对于页游、网游和手游:游戏外挂通常是修改内存数据、或者截获网络封包。
1、修改内存数据的原理:服务器保存了大量的重要的参数,但由于客户端不可避免的需要进行大量的计算和资源的加载,本地内存种必定存有部分的临时变量,通过判断这些变量的变化规律和函数的破密寻到利于自身的参数,比如伤害值一类,继而寻找该变量的内存地址,根据指针偏移分析获得内存基址,再提升权限利用Windows API把自定义数值写入该内存块,就完成了修改某项数值的操作,一般来说,只要破解了一项数值,利用规律继而破解其他数值就更加容易了。
2、截获网络封包的基本原理:Internet客户/服务器模式的通讯一般采用TCP/IP通信协议,数据交换是通过IP数据包的传输来实现的,一般来说客户端向服务器发出某些请求,比如移动、战斗等指令都是通过封包的形式和服务器交换数据。那么我们把本地发出消息称为SEND,意思就是发送数据,服务器收到我们SEND的消息后,会按照既定的程序把有关的信息反馈给客户端,比如,移动的坐标,战斗的类型。把客户端收到服务器发来的有关消息称为RECV。接下来要做的工作就是分析客户端和服务器之间往来的数据(也就是封包),这样就可以提取到对我们有用的数据进行修改,然后模拟服务器发给客户端,或者模拟客户端发送给服务器,这样就可以实现修改游戏的目的。
什么是封包1.1 封包的概念 本文所讲的封包是指由sockets协议进行发送与接收的数据包。广义的封包是指计算机之间互相进行通信的数据包,其可以因通信协议的不同而在内容上有所不同。1.2 破解原理 目前破解封包加密与解密算法的方法主要是通过动态调试技术来实现的。其原理是首先通过动态调试跟踪并取出加密与解密算法的代码段,然后再通过分析这些代码最终得出结论。
内存挂再说内存挂,内存挂主要是对游戏数据进行验证,比如伤害,移动速度,血量等等,打个比方,就说以前很流行的变速齿轮(CE类修改内存),早些年游戏没有验证的时候几乎是想要跑多快跑多快,现在都被和谐了,和谐的方式也非常简单,计算人物速度,再取人物的一个坐标到另一个坐标距离,这其中有一定偏差,如果差距超过设定的额度那么就可以判定玩家在使用加速工具。伤害,血值,都类似,任何数据都有算法来计算是否超过了预期最大值。
游戏应用1、 压枪:压枪技术很多方法可以实现,但高精度的压枪,就需要修改内存或者网络封包,首先获得枪口偏移信息,然后通过鼠标移动的虚拟指令,将准星调到特定点。
2、透视:读取内存中的数据坐标,在屏幕上绘制出应该对玩家隐藏的信息。在OBS推流时,如果选择仅推流游戏,那么这类"信息"仅对直播者可见。
3、自动瞄头:上两者结合获得,获得玩家坐标,然后通过鼠标移动指令完成瞄头。
总结:如果能完美无视枪口跳动时随机的左右偏移量,那么基本可以认为是读取内存的压枪。对于透视的发现则难得多,但是不管装的多像,最终目的肯定还是从这项功能收益。自动瞄头最容易发现。
修改内存/封包类:同时秒杀多人、瞬移、一拳超人、圈外不受伤害等
总结:通过修改内存和封包实现各种丧心病狂的功能,及其容易被封号,也很容易被看出来。
反外挂与外挂的对决1、对服务器上的数据库进行严格加密,并且每天自动更新随机密码,数据包经常检验,而且效验结果以服务器上为准;
2、对游戏客户端进行严格检测,具体手段有:
(1)对关键api Hook进行保护,网络相关send recv;
(2)dll注入检测可能是hook loadlibrary,也有用定时检测进程模块的(找到非法模块就退出);
(3)对于用od进行调试客户端,还没有完全有效的方法,一般就是加些花指令,加壳,这些方法对大量水平低的外挂作者已经足够了;
(4)很多游戏都会对PE、OD、按键精灵、简单游等进行检测,主要是枚举窗口名字,进程名字,有这些名字的就,但这种低级方法效果不大。
(5)按键类外挂检测,对于后台脚本主要是用GetCursor,GetForegroundWindow,检测窗口位置和鼠标位置是否正确,还有些是对WM_ACTIVE消息进行处理(神武就是这么干),对于前台脚本除了把鼠标弄偏移外,也就没有什么更好的办法了,不过这个偏移对普通玩家也很不友好,也影响游戏公司留存玩家。
(6)对于有些人说检测鼠标点击位置的重复度,这个多半是他们自己的猜想,这样做很容易造成误封。
外挂技术与游戏安全性分析抵御逆向分析
除了少数通用性外挂(如键盘模拟外挂、通用加速挂)外,绝大部分外挂在制作前均需动态调试和静态分析游戏逻辑和数据,找到关键逻辑和数据的位置,才能对游戏进行修改,因此反调试和保护游戏逻辑是抵御游戏外挂产生的强有力的方式。
阻止外挂入侵
一旦游戏关键逻辑与数据被黑客分析完成,接下来黑客会通过编程对游戏客户端进行修改,修改游戏进程常常通过一些系统函数如 ReadProcessMemory,WriteProcessMemroy ,或者通过向游戏进程注入 dll 等方式修改游戏内存,因此保护游戏内存和恶意模块扫描是进一步防止外挂和被动检查外挂的有效措施。
游戏反外挂先行一步
Virbox 反外挂系统针对游戏安全问题,采用静态保护和动态保护相结合的方式,抵御和打击外挂,为端游保驾护航,目前仅支持 Windows 系统。
静态保护(Virbox Protector)
Virbox Protector 是深思自主研发的虚拟机外壳,用于保护游戏的代码逻辑,强大的虚拟机保护以及为 Unity 游戏设计的独特的 Unity3D 保护,对游戏的逆向分析造成极大的阻碍,有效遏制外挂的产生。
➤ 代码逻辑保护
现代反编译工具日益强大,即使是 C/C++ 这类静态语言编译后的程序,也能将代码还原到与源代码相差无几。没有代码保护,游戏客户端的代码逻辑暴露,很容易被黑客发现攻击的位置,使外挂的编写成本变得很低。
Virbox Protector 可以通过混淆、虚拟机、代码加密等方式对游戏中指定的函数进行保护,保护后的代码无法自动还原,黑客分析混淆和虚拟化的指令需要超过原先几十上百倍的时间。对游戏客户端的关键函数进行保护,每次客户端更新,黑客都需要大量的时间重新分析被保护的代码。
➤ 内存校验
绝大部分外挂的高级功能都采用"内存补丁"的方式对游戏模块进行修改,Virbox Protector 带有内存校验功能,能对游戏代码进行校验,防止被打补丁。(该功能目前不支持 Unity3D 游戏)
Unity3D 保护
Unity 游戏采用 C# 编写,相比于 C/C++ 开发的游戏,Unity 游戏更容易被黑客分析,使用 DnSpy、Reflector 等工具可以直接反编译 Assembly-CSharp.dll 中的代码,游戏代码中的变量与函数名清晰可见。
Virbox Protector 对 Assembly-CSharp.dll 中的方法都进行了加密,只有在该方法运行编译为汇编代码才解密,黑客无法通过 Dump 出原始代码。
动态保护(Virbox 反外挂引擎)
Virbox 反外挂引擎是一款驱动级进程保护系统。该系统结合了主动防御(反调试、内存保护、反注入、Hook 检测等)和被动防御(窗口检测、内存特征扫描等),动态地保护游戏进程。Virbox 反外挂引擎的主要功能如下:
➤ 反调试
编写外挂或者盗版补丁,首先要做的是使用调试器(如 OllyDbg、x64dbg、Windbg、 Cheating Engine 等)调试软件进程,分析关键代码逻辑和数据。Virbox 反外挂引擎对所保护的进程进行调试检测,并防止内核调试器(如 WinDbg)调试 Virbox 反外挂引擎自身,使各种调试器失效,对逆向分析过程造成了极大阻碍。
➤ 内存保护
黑客在分析软件时,除了调试之外,还会通过内存搜索(如使用 Cheating Engine)等方式定位关键数据的内存,另一方面,大部分外挂或是盗版补丁会通过另外的进程修改内存,Virbox 反外挂引擎通过驱动级内存保护,防止其它进程读写、修改被保护的进程,保证了被保护进程的安全。
➤ 反注入
修改进程内存,除了跨进程的内存访问之外,还可以通过注入 Dll 或者 ShellCode 的方式进行,Virbox 反外挂引擎通过内存保护和监控模块加载的方式拦截了绝大部分注入方式,并配合内存特征检测功能,拦截非法模块。
➤ 特征扫描
反外挂引擎可以检测内存特征、窗口特征、模块特征、驱动特征(如 HideToolz, PCHunter, StrongOD 等)
安全问题一定要引起重视,反外挂本身就是一个伴随游戏全生命周期的问题,你所碰到的问题也是其它游戏开发商碰到的问题,你先行一步,解决好反外挂的问题,可以领先其它开发商一大步。
网络游戏外挂与反外挂的研究
序
你见到过哪些NB的外挂?
外挂的分类:
反外挂的分类:
国内外当前的状况
国外
国内
外挂的研究
1.模拟类
2.内存修改类外挂
3.封包类外挂
3.脱机类外挂
网络游戏封包加密技术
异或加密
RC4 加密
RSA 加密
网络游戏外挂检测技术
鼠标键盘模拟检测技术
游戏数据修改检测技术
外挂实现与反外挂举例
射击类外挂
游戏实现要怎么预防呢?
杂谈
序
全球的网络的几乎普及到了每个角落,伴随着全球经济的发展与进步,游戏行业的玩家越来越多,许多违法犯法的活动也在网络游戏行业越来越多,也变得越来越多样化。例如 FPS 射击类游戏,这种以自由射击为蓝本的的竞技类游戏,深受网络外挂的毒害和侵扰,极大地破坏了竞技类游戏的公平性,由于竞技类游戏的功利性,很多新手玩家想要获得成就感,给外挂提供了滋生的环境,并且这类游戏的一些关键数据只能保存在本地客户端,不能实时上传服务器导致了外挂的泛滥,而外挂制作者通过售卖外挂非法获得巨额利润,所以防御和解决网络游戏中的非法行为已经迫在眉睫。
你见到过哪些NB的外挂?
CF:
透视(能用另一种颜色标识墙后敌人),
自瞄(瞬间自动瞄准敌人),
自动开枪(当枪在敌人身上会自动开火),
飞天(人能走到地底下),
遁地(同上),
无后座力(一般开枪,瞄准方向会上扬)
远程装包(C4远程安装)
DNF:
人物变大型外挂(这类外挂可以让角色瞬间变超大,技能也会随之变大)
全技能无消耗 (就是任何一个职业可以使用这个职业所有技能)
召唤某一个东西(召唤一些强力的怪)
全图秒杀 (一键全图的怪都死了)
召唤怪物类 (召唤一只或多只地下城里的怪物来帮你刷图)
冒险岛:
飞天,吸怪,无敌,自动攻击
QQ炫舞:
自动perfect
炉石传说:
自动上分(利用深度学习,自动战斗出牌)
LOL:
自动躲技能,神走位,自动战斗
韩服一些游戏(检测很弱):
修改本地txt的几个0 1
以上只是举一些例子,其实游戏外挂已经有很多很多了,在国外深圳有专门的论坛去学习,分享外挂制作的方法,比如看雪:link.
外挂的分类:
现如今游戏外挂的种类繁多,而且是每个网络游戏对应一种系列的外挂,针对某一个游戏,其外挂商家可能就多达 100 多家,而这些外挂所提供的的针对该游戏的功能达到几十种,所以面对这么多的外挂很有必要对外挂做一些分类,方便分析和总结外挂的技术和特点,传统的外挂分类方法笼统的把外挂分为两大类:非修改游戏数据类外挂和修改数据类外挂,其具体功能如下:
分类 功能
非修改游戏数据类外挂 通过模拟键盘鼠标操作,将网络游戏中很繁琐的动作或者重复的无聊的很费玩家时间的流程和任务使用外挂帮助玩家完成,达到方便和解放玩家的目的
修改游戏数据类外挂 修改游戏数据类外挂是由外挂获取服务器与客户端通信产生的网络游戏封包进行修改或修改客户端本地的内存数据,并将这些修改后的封包或者内存地址发送给服务器端,得到外挂想要的结果和数据,外挂通过修改封包信息和客户端内存地址,使角色人物的属性和状态发生改变
反外挂的分类:
由于在国外像魔兽世界这类大型网络游戏的盛行,K. Park 等人针对该类游戏的外挂进行研究,并把此类游戏的外挂进行了总结分类,分别为针对服务器攻击的外挂、针对客户端数据攻击的外挂、针对网络流量攻击的外挂以及针对正常玩家攻击的外挂,并把游戏外挂的检测方法分为三类,即玩家客户端检测,游戏网络通信检测和游戏远程服务端检测,如下表:
分类 方法 实例
用户端 开发商的反作弊系统 腾讯的TP,Valve的VAC
用户端 第三方反外挂开发商的反作弊系统 绝地求生采用的BettleEye 系统
用户端 用户举报以及人工巡检系统 几乎所有的游戏都会做这样的系统
网络通信 监控流量,往返的时间值的比较 现在比较普遍的手段
网络通信 封包数据加密 现在比较普遍的手段
服务器 分析玩家的游戏日志是否异常 梦幻西游,地下城
服务器 不定时的图片验证或者数字问答验证 问道
国内外当前的状况
国外
Ronald L.Rivest 等人研究了玩家客户端向服务器发送数据封包命令的情况,监控了不同时间段的不同的流量总量的情况下,在使用外挂时与正常游戏时的流量变化的不同之处,以此来作为识别外挂的手段。David Alomon 等人指出,脱机类外挂及机器人类的外挂在数据流量上会体现出一定的规律性,并会表现出数据包发送具有固定的时间间隔和频率极快的特点。William R.Cheswick 等人根据行为分析的方法,利用机器人操作与玩家操作的不同之处,分析两者之间的差异特征,研究正常玩家的行为日志和机器人的行为日志,通过分析对比找出外挂使用者。Matt Pietrek 等人使用玩家角色的路径分析方法,玩家正常游戏时的移动路径是变化的,随机的,走相同的路有不同的路径,而机器人外挂操作的角色经过相同地点时的路径点大部分是重复的,通过对比玩家角色的路径,会发现使用外挂会反复出现相同的路径坐标,所以可以以此数据来检测玩家是否使用外挂。用户端的反外挂系统,会为玩家带来很多不便,经常会与系统平台和其他相关软件发生冲突。例如,在用户端加上外挂监测机制,但是程序本身对游戏没有任何益处,而且加重玩家电脑的负担,并且即使检测到外挂,也只能检测当前的用户,只有一个违法行为,且不法分子完全可以针对该程序设计逃避检测方法。而对于网络通信的检测方法早已过时,现在所有的游戏都有网络通信的时间验证和流量监控,时间加速类外挂也不存在了,不法分子的外挂制作更加高级和隐蔽,网络通信的检测办法已经对当前的外挂无能为力。为了克服客户端和网络端检测的缺点,游戏开发商们和第三方反外挂机构都将重点检测机制放在了服务器端,尤其通过对玩家的行为日志分析检测,判断该游戏人物是否存在异常。
如今国外存在防御外挂的方法有很多,但是效果比较好且比较流行的有:角色行为分析,角色移动路径分析,数据包验证,弹出事件检测。在玩家游戏时,弹出图片类验证码测试,玩家可以很容易解决,但是如果存在脱机外挂代替玩家自己操作人物,那么外挂就很难识别,游戏系统就可以判断出该角色是否是脱机挂玩家,但是由于如今人脸识别和图像处理技术的提高,图片中的关键字和数字已经很容易检测出来,这种反外挂方法作用也越来越小。
国内
国内的外挂其历史可以追溯到单机游戏时代,那时它的名字是游戏修改器,因为其可以在游戏中追踪锁定游戏角色的各项数据参数,通过修改各项参数来降低游戏难度,使玩家更容易在游戏中得到乐趣。随着国内经济发展以及互联网普及度越来越高,网络游戏也应运而生,游戏外挂功能也变得越来越强大,在原有的基础上增加了很多新的功能,腾讯的网络游戏《地下城与勇士》,外挂种类和功能多种多样,例如:秒怪、瞬移、顺图、无敌、透明、加三维、加移速、自动补血等,利用这些功能可以在游戏中轻松打怪练级爆装备,让外挂玩家轻松升级做任务。为了阻止网络游戏外挂的蔓延和维护自己应得的权益,国内网络游戏开发商制定了很多的反外挂系统和措施来预防和检测网络游戏非法外挂,但效果都不太好,比如地下城与勇士,游戏从发行到现在已经 10 年之久,但是外挂一直存活至今,甚至公然在游戏中喊话卖外挂。随着技术的创新和发展,国内的反外挂系统也有了自己的成果,下文主要对国内的四类反外挂系统做了说明。
第一种方法是验证分析方法。验证分析方法检测的是脱机外挂,脱机类外挂危害最大,破坏游戏平衡,造成客户端与服务器通讯拥堵,引发游戏中的物价的上涨和暴跌,最终导致游戏的金钱系统崩溃,流失大量玩家。验证分析法的检测原理是:在游戏人物休息时,弹出不确定的验证码,让玩家手动输入答案,来区分机器人外挂和玩家。验证分析方法有两种类型的验证分别为:验证码识别技术和图像验证技术。验证码识别技术(Gimpy)是服务器端随机从数据库中抽取一定比例的数字和一定比例的汉字,发送到玩家的客户端,让玩家进行识别验证,判断操作该游戏角色的是机器人托管还是玩家本人[12]。图像验证(Pix)的方法和它只有轻微的差别,图像验证技术的数据库是各种各样的图形,让玩家选择不同的符合要求的图形来验证其身份,这两种方法都是比较常规的方法,利用机器人外挂的判断逻辑漏洞来进行识别和验证其真实身份。由于图像识别技术的发展和提高,这两种方法都被不法分子利用图像识别技术自动识别填写内容,效果越来越差,国内的游戏开发商又发展新的验证办法如:图像或者文字归类验证方法和玩家声音识别验证方法。这两种方法能有效的识别出机器人,但是其占用资源大,并且不够直接,影响玩家游戏体验,降低游戏的可玩性。并且该检测方法具有最大的弊端是检测时间是比较随机和不确定的,极有可能在玩家操作角色的关键时刻弹出验证信息,导致操作失败或者对局失利,及其影响玩家体验,所以在如今的网络游戏中这种验证分析技术使用的越来越少,逐渐被淘汰,退出了历史舞台,但是这种技术在其刚开发的初期,对于外挂的检测,尤其是脱机类机器人外挂提供了很大的助力。
第二种方法是对服务器和客户端的通信数据进行加密的方法 。它的原理是通过对传送数据的加密,让服务器与客户端的通信数据进行交互及校验时,其通信数据不被泄露,如:地下城与勇士游戏,玩家在通关本局时,通关评分是 S,外挂找到其数据,修改为 SSS 评分,然后客户端把修改后的数据发送给服务器端以达到其增加游戏评分的目的,但是如果在游戏设计的时候增加一个加解密过程,先对需要通信的数据进行加密,然后发送给用户端,那么该数据外挂就无能为力。虽然对通信数据添加加解密这样的过程能够有效的阻止外挂对其的修改,但是整体增加了游戏服务器的负担,影响游戏的整体流畅度和效率,而且其加密秘钥也容易泄露,因为其解密在客户端进行,而客户端已经下载到玩家电脑上,所以外挂制作者们费一些功夫就能找到该解密秘钥,所以该方法存在很大的安全隐患。
第三种方法是阻断网络游戏外挂程序的方法。该方法的原理是在游戏客户端启动执行的时候,附加外挂检测手段,查看电脑中是否有修改本地内存的操作或者权限的软件在运行中,若检测到立马终止其操作,如果不能阻止那么立马阻止游戏客户端的启动,防止客户端被调试或修改。但是该方法同样被外挂制作玩家破解,外挂制作者完全可以在客户端截获从服务器端发来的监测数据packet,然后伪造检测数据,外挂已经修改了一个地址,但是改地址会被检测,那么根据被检测的地址伪造数据,返回被修改前的数据,这样无论外挂修改了哪个地址都不会被检测到。
第四种方法是一种防止网络游戏外挂软件的集成办法。该办法比前面三种更为强大和全面,它不仅能保护游戏数据的安全,对数据进行加密更能对外挂进行有效的检测。该方法主要是从三个方面进行防护:
提供数据游戏封包数据加密方法。
提供游戏外挂的检测系统。
具有防御外挂的装置。
但是这种方法是通过从玩家客户端的数据和服务器的数据进行分析对比,来判断是否存在非法行为,外挂制作者利用封包分析工具 WPE 发送相同的数据,选择最好的结果的数据,比如评分最高的数据,并不修改数据本身的内容,使得该外挂检测系统识别不出来。
当前的反外挂技术都存在或多或少的漏洞,游戏一旦发布就会面临着世界上所有黑客的攻击和分析,找出其漏洞来获取非法利益,所以反外挂道路任重而道远。
外挂的研究
1.模拟类
模拟类外挂是代替玩家操作鼠标键盘,模拟玩家操作类的程序,它能帮助玩家用简单的操作实现让游戏角色进行复杂的动作,简化甚至替代玩家操作,帮助玩家不用点击鼠标或者敲击键盘就可以进行游戏操作的自动功能。例如:简单的射击操作、简单的移动操作、捡东西等,这类外挂不需要分析游戏的数据和加密算法,只需要按照一定规律或顺序设计一组按键操作或者按键的触发条件就可以[23]。不过随着时间的推移和技术的发展,这类外挂也形成一种体系,比如非常出名的“按键精灵”,他可以配合其他类的外挂进行功能组合,达到自动拾取,自动放技能的作用,在已经分析出人物数据、掉落物品数据的情况下,设定坐标相同时触发拾取按键功能,就可以达到自动拾取的功能。这种外挂没有修改游戏的数据和物品,只是作为辅助方便的了游戏玩家和节省了很多无聊的操作和时间,一般对游戏危害比较轻。
模拟类外挂实现方法较简单,用几个 API 函数就可以实现模拟键盘和鼠标的操作,通过 API 函数来代替键鼠操作,把键鼠操作指令发送给游戏程序,让玩家的游戏角色进行移动、攻击、捡取物品等行为操作。
2.内存修改类外挂
内存修改类外挂可以分为以下三种:
第一种方法是利用 virtual X driver(虚拟设备驱动程序)直接查找游戏内存分配地址,这种方法需外挂开发人员有良好的编程基础和系统的底层驱动知识,是技术较难的一种方法,门槛较高。
第二种方法就是用 ToolHelp API 函数,该函数是用来枚举进程和模块,获取进程和模块的 ID 与信息。黑客利用 ReadProcess Memory 函数从网络游戏的进程中读取到游戏的内存数据,但是该方法没有修改内存的函数,不能往内存里写数据,所以这种方法需要其他方法的配合,具有一定的弊端。
第三种方法是利用游戏进程的对应函数,这种方法比前两种要方便和简单很多,游戏进程的对应函数很容易就能得到,例如利用:ReadProcessMemory 和 WriteProcess-Memory 两个函数对游戏进程进行读取和写入,这种方法是当下最流行最受欢迎的方法,该方法能修改市面上大多数的游戏内存。
Windows 系统会预留一些 API 函数,这样会大大降低开发人员的开发程序的难度和复杂度,这些函数原本是用来调试程序,但是外挂制作人员利用这些 API 函数修改游戏内存进行非法外挂的制作,其中典型的两个 API 函数分别为 ReadProcessMemory 和WriteProcessMemory,一个是对游戏程序内存进行读取,另一个是对游戏内存程序进行写入操作。但在使用这两个函数之前,想要对网络游戏内存进行读取和修改,首先要查找到游戏中相关属性的内存地址,才能进行修改,所以相对内存修改而言游戏中人物属性的相关内存查询更加困难和繁琐,需要找到合适的算法和公式进行分析。
3.封包类外挂
封包类外挂是难度较高的一种外挂技术,涉及多个技术问题,网络游戏的服务器端和客户端通信是利用 socket,服务器端申请一个socket 监听消息,并绑定到一个对应的 IP 地址和端口上,等待游戏客户端的连接,外挂制作者利用封包截取工具截取通信数据包,经过多次截取封包,分析数据,得到封包数据对应的人物操作或属性,若封包加密则分析其加密算法,网络游戏的前期由于其服务器功能的限制,一般封包都不加密或者采用异或加密很好破解,修改对应的数据,再利用封包截获工具(如windivert)转发给服务器,通过篡改通信数据来实现作弊。
由于互联网通讯技术的发展和计算机硬件功能的更新与加强,封包数据只能用异或加密的限制已经不存在,现在的游戏客户端在和远程服务器通信时一般都利用 RC4 和 RSA 进行加密,封包外挂技术即使截获了数据,也破解不了被加密的数据。所以对网络游戏的危害已经变得越来越小。
3.脱机类外挂
脱机类外挂是一种综合类外挂,是前三类外挂技术的总和,也是难度最大的一种外挂,一般在一个游戏发布 3 到 5 年之后,才会在市面上流传的外挂,是制作周期最长所需技术最为复杂的外挂。每个游戏都有自己特有的通信方法和原理,外挂开发者们需要完全分析出本地端与远处服务端的通信原理,达到不使用客户端进入游戏的目的,这类外挂是为工作室而开发,一台机子可以开几十个号同时挂机练级和刷金币,获取非法利益。
开发流程如下:
破除游戏反调试。
逆向分析出游戏加解密算法。
逆向分析出地图等资源信息
分析出登陆封包,实现脱机登陆,获取角色属性、装备、物品、技能相关信息。
具体功能封包分析。
整合寻路算法,实现基本挂机。
根据工作室需求,完善功能。
一个游戏如果被外挂制作者们开发出脱机外挂,对该游戏破坏是灾难性的,脱机外挂的出现必然会导致游戏中物价的起伏,甚至金钱系统的崩溃,损害正常玩家的利益,造成玩家大量流失,最后导致游戏运营时间缩短提前退出市场,严重损害游戏开发商和玩家的利益,扰乱我国游戏行业的正常发展,所以脱机类外挂一直是游戏开发商和国家重点打击的对象。
网络游戏封包加密技术
异或加密
网游游戏最开始运用的加密算法是异或加密,顾名思义该加密算法就是经过简单的异或的位运算进行加密,跟高中数学所学的映射关系相类似,由于其运算简单,加密速度快,而且在网络游戏初期受服务器和电脑硬件配置的限制,网络游戏加密只能运用此类加密算法,但该加密算法很容易被破解,若游戏的通信机密算法被破解,只能等待游戏的下一次更新进行修改和维护。这种加密算法存在很大的弊端,对数据的保护强度很差,早期的游戏开发商只能增加游戏的维护频率和周期,进行不定时的更换映射规则,预防外挂的破解。
异或加密的数据很容易破解,例如:网络游戏中所使用的地址一般是一个 8 位的 16进制数,通信所发送的数据也是 16 进制,下面一段数据是利用 WPE 工具在玩家操作游戏界面进行登录时被截取的一段数据,很明显该数据为登录时玩家输入的登录账号和密码。
Send: 0000 01 00 00 00 68 75 61 6e 67 6a 75 6e 31 31 38 00
00 02 00 6a 75 6e 6a 75 6e 31 32 33 33 34 00 00
由 WPE 截获的数据看出,用户名经过异或加密是: 68 75 61 6e 67 6a 75 6e 30 30 37;
登录密码经过加密是: 6a 75 6e 6a 75 6e 31 32 33 33 34。用辅助软件和规律分析,很快就
可以得出解密后的明文。然后利用 16 进制换算为 10 进制,并从 ASCII 码表中找到对应
的 ASCII 码值,就可以计算出原文的数据:用户名: huangjun118,密码:junjun12345。
RC4 加密
算法见我的另一篇文章:
link.
RSA 加密
link.
网络游戏外挂检测技术
鼠标键盘模拟检测技术
键盘鼠标模拟外挂是通过软件模拟人工操作鼠标和键盘进行替代玩家操作的外挂,比较流行的外挂如:按键精灵、鼠标连点器、简单游等外挂软件。
网络游戏开发商检测该类外挂总体用两种方法,一种是客户端检测,一种是用户行为分析检测。客户端软件检测主要有检测玩家电脑上运行程序的进程、窗口名、界面名字、机器码和软件特征码等。举个简单的例子,一些外挂软件被黑客制作出来进行出售,如果销量比较高,用该外挂的次数比较多,那么该软件的一些特征码就会被加入黑名单,只要在运行游戏时,打开此类外挂就会提示非法,但是如果把外挂代码放入其他的编程语言进行编辑再打开却没有提示非法外挂,这里也是游戏商的一个痛点之一,如果游戏因为代码编辑工具就提示非法,这就违背了国家制定的版权规定,所以此类方法只能遏制外挂的泛滥而不能完全禁绝外挂。所以目前比较流行的方法也是大多是游戏开发商使用的方法:用户行为分析检测,主要有以下几点:
分析鼠标点击频率和移动频率,如果存在长时间的点击频率相同和类似,或者点击频率过快,都会被加入黑名单。
判断游戏角色的差异值,一般模拟类软件的角色行为和玩家的行为差距很大,这种差距安全人员一眼都可以看出来,但是游戏开发商不可能有那么多的人工对所有玩家进行监测,所以游戏开发商会针对游戏角色的行为设置一个范围值,即临界点,如果过了该临界值就加入黑名单或者直接弹窗非法,强制下线该账号。
监测结果数据,游戏公司对游戏中关键的数据进行严格的监控,利用时间的大间隔对关键数据的结果进行上传,对上传到服务器的数据进行临界值检测,若有异常数据,则判断为非法使用模拟类外挂。由于此类外挂对游戏的公平性有影响,但是危害性比较低,所以游戏开发商一旦检测到此类外挂,只会对该玩家做下线处理并弹窗警告,并不会做封号处理。
游戏数据修改检测技术
在网络游戏反外挂的历史中,曾有一个很流行的反外挂系统 N-Protect,该系统是当时网络游戏普遍采用的反外挂系统,该系统可以在线进行升级,并同时在玩家运行游戏时检测游戏运行环境,是否有外挂运行,客户端是否完整,是否有外挂存在修改客户端内存数据。但是这用外挂检测办法本身就存在缺陷,因为反外挂系统 N-Protect 本身就存在于游戏的客户端的机子上,该电脑是玩家所有,如何能够保证该外挂程序不会被修改和欺骗,客户端可以被修改,那么该反外挂程序一样可以被修改,所以该反外挂系统投入运营了一段时间后,被国内的黑客攻破,最终该系统以失败而告终。想要检测游戏外挂存在以下难点:
无法完全防止游戏客户端被修改,游戏客户端一旦到了玩家和黑客手上,根本无法阻止黑客的修改。即使有法律的制约,在当前的社会情况下也无法有效的监督其个人行为。
对游戏客户端的检查容易被欺骗,当检测系统检查客户端的完整性的时候,外挂制作者完全可以伪造一个安全的进程,把合理的代码放进去,让检测系统检测假的数据,这样无论客户端被怎么样修改检测系统都不会发现。
挂检测系统无法把检测到的结果正确的传递给服务器,外挂制作者找到其检测结果的数据,即使该检测系统已经检测到非法软件,作弊者也可以篡改其检查结果,变为检测合法的数据分支,不管检测系统检测出什么外挂,都无法向服务器发送正确的检测结果。
因为游戏公司无法通过客户端的加壳和检测的方法有效的阻止作弊者修改其客户端,所以开发商又考虑从服务器端检测玩家的使用外挂修改本地数据的行为,具体方法如下:
检测玩家的 IP 地址,是否在同一个 IP 地址下存在很多游戏账号登录的情况,这里检测并不是一定要一个 IP 只有一个游戏账号,而是针对用软件模拟玩家操作,在同一个电脑中登录十几个账号的工作室,如果被检测到 IP 上有很多号,那么就会被服务器加入黑名单,甚至被全部封号。
限制客户端多开的数量,比如地下城与勇士该游戏在刚发行的时候只允许玩家在同一台电脑只能开一个客户端,随着游戏的运营和玩家的减少,开发商现在允许玩家进行双开设置,方便大号带小号。
检测 MAC 机器码,这种检测机制只有很小一部分开发商使用,因为一个电脑有一个固定的 MAC 码,不能被软件改变,所有如果玩家在一台电脑上长期使用外挂或者造成的影响非常恶劣,那么游戏就会把该台机器的 MAC 码加入黑名单,禁止该电脑登录游戏。
游戏内置举报系统,现如今几乎所有的网络游戏都有该功能,尤其是在竞技类游戏中,如果正常玩家被作弊玩家杀死,那么玩家肯定会举报该外挂,所以此类方法非常简单且效果强大。
根据玩家最近玩游戏的数据,延时分析游戏数据是否异常,这种检测机制是当下最流行的检测机制,在玩家使用外挂修改了人物的属性之后,利用变态的属性刷怪打装备,很安全所有难度都可以随便刷,并且也没有被检测到,但是等两天再登录的时候发现账号非法或者账号被封,这种情况就是服务器定时对玩家游戏数据进行分析,而且这种检测机制准确率非常高,只要发现数据异常很可能直接做封号处理。
外挂实现与反外挂举例
射击类外挂
射击类游戏(FPS)如:穿越火线、逆战、守望先锋、绝地求生、以及最近新出的apex 英雄,其特点是以第一人称视角或者第三人称视角进行操作虚拟人物进行射击交战,而游戏屏幕中间会有一个准星,这是枪械武器的射击位置,通过准星瞄准敌人进行射击交火,以达到击杀效果,若射击瞄准的是头部危险部位那么会发生一击致命,即爆头效果,达到快速击杀。但是头部相对于人物的整体是很小的一部分,很难被射击,且人物会一直移动再加上武器的后坐力,所以要打到头部危险部位几率非常小,那么外挂自动瞄准就是根据游戏漏洞进行编写,达到自动瞄准,形成一击必杀、百步穿杨效果。
游戏调试工具:CE和OllyDbg。
外挂制作者通过游戏调试工具,可以获取到游戏的基地址以及某个变量(如血量,子弹数,自己的位置,敌人的位置,朝向),通过数学运算,计算出自己与敌人之间的朝向与当前朝向的差异,一种方法可以直接修改本地朝向为自己直接朝向敌人,即准信瞄准敌人,另一种可以通过模拟鼠标操作,通过计算给一个输入,让自己的朝向锁定敌人。
除了内存挂现在已经可以完全可以通过键鼠模拟去瞄准敌人,如计算鼠标的灵敏度偏移,在渲染时拿到渲染的数据,一般人物会有标识可以找到,然后可以取到渲染的位置(如果在游戏上层加一层改变一下渲染颜色,就能做出透视挂),通过计算鼠标应该有的偏移,使用系统自带的系统接口可以直接在不移动鼠标情况下,操作游戏任务瞄准敌人,这也是锁头挂的原理。
后坐力的实现,有的游戏后坐力是纯客户端实现的,可以通过修改后坐力的系数,或者直接一直设置朝向达到无后座力,另一种就是使用输入反向输入后坐力的偏移,这样也能达到无后坐力。
飞天遁地挂的话主要是服务器没信任客户端,没有对客户端的位置进行校验,客户端通过修改1P的位置,然后告诉服务器,服务器因为没有校验合法性,直接同步给了其他导致。
自动开枪挂的原理跟上诉类似:也是在外面的准信即自己的准信对准敌人的时候,自动触发鼠标点击事件,达到自动开枪的目的。
游戏实现要怎么预防呢?
主要还是基于检测跟校验:
监听武器准星移动频率玩家在操作游戏人物的时候,鼠标控制武器准星的移动,玩家通过移动鼠标让武器准星瞄准敌人位置,进行射击。而自动瞄准外挂会让武器准星自动瞄准,不需要玩家移动鼠标瞄准,自瞄外挂代替了玩家操作鼠标,但是在自瞄外挂的控制下,武器准星移动的频率和准确率远远超过了玩家的操作极限和合理性。本文可以利用自动瞄准外挂这个特点来监视非法使用外挂的玩家,阻止玩家作弊。方法如下:
设定玩家移动武器准星最大频率值预先测定玩家移动鼠标的最大频率值,然后作为反外挂程序的基本标准。
判定外挂规则
判定方法具体为,用计数器B来记录频数,如果频数超过设定的标准,则另一个计数器A加1,如果第二次计数器B没有超过频数标准,则计数器A清零,避免由于人为的低概率事件的发生,如果连续3次超过频数标准,即计数器A的值超过3,则判定出现外挂程序,中止游戏。
监视玩家的命中概率
这种方式比较占内存,但是这种方法发现外挂的效率要比前一种方式高。下面介绍方法如下:
设定一个玩家命中率的最大值反复试验,测定玩家命中的最大概率,适当增加这个概率值,做为反外挂的一个基本参考标准,设该标准值为p。
判定规则
首先建立两个系统计数器n和m,用来监视射击类游戏窗口,当游戏中玩家对战开始时,启动两个计数器,玩家每发射一发子弹,计数器n加1,玩家发射的子弹每造成一次伤害计数器m加1,当本局游戏结束时,就会得到两个确定的值n和m,如果两者的比值大于反外挂系统设定的上限值,则判定该玩家使用外挂,终止游戏。如果两者比值小于该上限值,则把玩家添加进白名单,经过一段时间后,再进行监视,尽量减少服务器压力。
总之自动瞄准类外挂的防御程序的设计思路还有很多其它方法,比如外挂运行窗口检测、玩家的行为分析等方法,但是本文认为上面两种方法监听准星和监视命中率更为简洁和可靠。
杂谈
腾讯的TP反作弊算得上是效率最高的反作弊系统,TP反作弊的机制是通过扫描玩家硬盘,确认是否有疑似外挂的程序存在。但这一行为在很多国家和地区是不被允许的,去年欧盟国家更正完计算机用户隐私条例后,就对在欧盟国家中使用TP等硬盘扫描反作弊系统的游戏发出了警告。
《绝地求生》还采用过特征码的反作弊方式,每天都在更新,甚至一天更新两三次。而每一次更新都会让现有的大部分外挂失效。既然打不过你,还可以以逸待劳累死你。
还有一些公司不走寻常路,跳出了传统中路对线的思维局限,选择直接招安外挂的开发者来替自己针对其它外挂,简直妙哉
暴雪在这种事上就显得亦刚亦柔。一面出高价买下插件开发者为《魔兽世界》开发的各种"好插件"——有些破坏游戏环境的插件与外挂无异,有些则可以有机地融入到游戏玩法中;另一面又和德国的Bossland Gmbh打了八年官司,直到Bossland服软才罢休。
顺带一提,Bossland不仅仅是开发了《魔兽世界》的挂,他们给暴雪全家桶里的所有游戏都写了挂。
最为魔幻的是,外挂问题在我国国外游戏作弊泛滥的环境里,却被本土厂商和代理很好地遏制住。而这无疑要先归功于我国的法律。
国内对外挂案件的处理,在国内主要有三个罪名——非法经营罪(最高15年有期徒刑),侵犯著作权罪(最高7年有期徒刑)和破坏计算机信息系统罪(最高15年有期徒刑)。目前实际国内外挂案件判例中比较严重的外挂犯罪,通常会判5年左右有期徒刑。
有效动用法律手段,既维护了开发商和运营商的利益,也维护了玩家的体验。之前腾讯手撕了《穿越火线》的外挂开发者,判了两年有期徒刑;最近的《新天龙八部》的"冰焰"外挂也备受社会瞩目,因为开发者是一名中科大博士,可惜因为外挂断送了自己的生涯。
————————————————
版权声明:本文为CSDN博主「popcorn丶」的原创文章