常见外挂分类及原理概述
外挂基本概念
要理解外挂,首先需要理解网络游戏的数据流。这里所说的数据流定义为游戏本地客户端与游戏后台服务器之间的数据流通。一个数据的产生需要玩家做出对应的操作,然后经过网络传输同步到服务器后台,服务器后台再处理过后再通过网络反馈给玩家。
在此基础上,可以将广义上的外挂定义为:非法窜改游戏数据流的方式。非法指的是没有法律许可,而窜改的方式包括增,删,查,改。
狭义上的外挂就是针对数据链路上的节点的修改。比如窜改客户端的“内挂”,窜改网络数据的“脱机挂”,窜改游戏后台服务器的“私服”。
内存挂实现原理
内挂的目标即为数据链路上的第一个节点:游戏客户端(包含客户端所使用的操作系统)。内挂的原理一般通过增,查,改的方式来实现,而所使用到的工具主要有调试工具(如Ollydbg),反汇编工具(如IDA),内存查看工具(如CheateEngine)。制作内挂,不仅要对操作系统有理解,而且还要深入到游戏引擎,游戏逻辑。
1. 增
以使命召唤OL为例。游戏的设定为武器可以装配不同的配件,正常情况下,M4A1只能装配2个配件。
使用调试器调试游戏,分析武器的配件逻辑,可以发现:每次装备配件时,都会调用一个游戏函数,定义为AddWeaponAttachment(作者自己的定义,下同),而这个函数的调用参数通过不断的调试分析可以猜测为插槽Index以及配件ID,即:
AddWeaponAttachment(SlotIndex, AttachmentID)
额外调用这个函数,即增加一次游戏逻辑的调用,就可以实现M4A1使用多个配件。
封装一下这个游戏逻辑,增加背包,主武器,副武器的判断,就可以形成一个“卡配件”的外挂。
第二个例子。正常游戏逻辑中,点击一次鼠标会触发一发子弹的射击。而在操作系统层面上,每点击一次鼠标游戏就会发送一次鼠标点击的消息,如果在游戏允许的时间范围内增加鼠标点击消息的发送,那么就可以实现武器的子弹加速,这种效果在霰弹枪上面即为明显,可以实现单发射击的霰弹枪变成连续射击,武器致死率大大提升。
2. 查
查,即读取操作。在游戏中有些信息是不会在界面上直接透露给玩家的,但是玩家一旦掌握这些信息就会获得绝对的优势。
以棋牌类游戏的看牌器为例。
由于游戏逻辑的需要,玩家的底牌会在存放在内存中,而通过内存查看工具不断的变更查看条件,就可以在内存中的找到对应的底牌记录,知道别人的底牌之后,玩法就非常随意了。
以FPS游戏的方框透视为例。
游戏逻辑会记录战局中所有玩家的坐标信息,而通过指定的方法读取到敌人的坐标之后,可以用方框将敌人在屏幕中标记出来,掌握敌人的位置可以率先做出预判,进一步可以做成自瞄辅助工具。
3. 改
改即修改,即修改一切和游戏相关的信息,包括游戏数据,游戏代码,游戏文件,改的方法也就是内挂典型的手段。
以DNF为例子,玩家在攻击的时候会有攻击力的叠加。同样通过调试分析,找到角色攻击函数,定义为Attack(Target, Power),参数表示攻击的对象以及攻击力,外挂可以修改这个Attack函数,使得Target为当前区域内所有怪物,Power为无穷大,那么Attack的效果即为全屏倍攻。
以FPS游戏为例,游戏在渲染图像的时候会使用Windows的DiretX模块(DX游戏)。一般来说,在渲染每一帧的时候游戏逻辑会根据由远到近的顺序将当前屏幕内所展示的图像渲染出来,在最终呈现时会根据物体的遮挡关系真实的反映出当前场景,最终觉得当前所看到的画面。外挂可以修改DirectX的渲染逻辑,强制将遮挡关系修改,那么原本应该被遮挡的物体会在屏幕上显示出来,形成人物透视。
制作内挂需要对游戏逻辑和操作系统有一定的认识,必须有扎实的汇编阅读能力以及丰富的脑洞能力,不断的阅读,不断的猜想,不断的组合才能形成功能强大的外挂。
网络封包挂实现原理
网络封包挂的目标即为数据链路上的第二个节点:网络数据。客户端的每一个处理都会以封包形式通过网络传往网络服务器,因此窜改网络数据和内挂会得到相同的效果。使用到的工具即为封包查看工具(WPE PRO)。网络封包会通过客户端和服务器约定的协议传输。一般来说,游戏协议分为上下行协议,上行协议指的是客户端发往服务器,下行协议指的是服务器发往客户端。
1. 增
以CF为例。通过WPE分析游戏内购买武器的协议,游戏的上行协议是请求游戏商城指定武器,游戏的下行协议是服务器告诉客户端指定武器购买是否成功。
那么伪造一条游戏下行协议,里面包含指定武器购买成功的信息,无中生有,那么个人仓库内会多出对应的武器。
2. 删
删除在网络数据层对应的操作可以定义为拦截。拦截对自己不利的协议。比如在RPG游戏中,会消耗“水”补充体力,那么“消耗”的动作就对应一条消耗的协议,如果拦截这条协议,那么就可以实现不消耗“水”而获得体力的补充。
3. 查
查即查询。再次以RPG游戏为例,在第一次进入某个地图区域时,客户端会向服务器请求这个区域内的所有游戏对象,包括NPC,怪,物品等,这些对象会因为游戏剧本需要不一定能直接被玩家感知。而外挂主动向服务器发送这个请求,直接将所有对象标记出来,帮助玩家做出更优的攻略。
4. 改
改和内挂的改是一致的,直接体现就是修改封包的数据。上述的DNF全屏倍功是通过修改客户端实现,而在封包中也可以直接修改封包数据达到相同的效果。
内挂注重的是游戏逻辑,而网络封包挂注重的是游戏数据。相比而言,游戏的每一次更新都会让逻辑代码发生变化,而游戏协议的变动会很小。因此网络封包挂会比内挂有效性会更长些。
封包挂的另外一个优势就是,如果完全掌握了游戏协议就可以实现脱离客户端---脱机挂,脱机挂完全模拟了游戏客户端的所有操作而不占据系统资源。在RPG游戏中,脱机挂的优势很明显。假设一台PC机运行客户端一个小时可以获取到100游戏币,而同时运行两个客户端消耗系统资源只能获取到180游戏币,而同时运行10个脱机挂,获取的游戏币可以达到1000甚至更多。
私服实现原理
私服针对的就是数据流上的最末节点:游戏后台服务器。私服即非官方的盗版游戏服务器。随便在百度上搜索私服,看到的是内容粗糙,但充满各种“神装”的盗版游戏。但一个私服的出现,意味着游戏客户端,游戏协议,游戏后台服务器处理逻辑,游戏后台数据库完全暴露了。目前没有公开的资料显示如何制作一款游戏的私服,私服的出现往往伴随着游戏代码泄露。
在私服里面,可以体验到前所未有的“上帝”体验。以CS游戏为例子,目前公开的材料中有CS客户端,以及CS后台程序,虽然没有源码,但是可以直接调试分析CS的后台程序,找到逻辑中判断人物生存状态的逻辑,实现无敌模式。
私服分为盗端和模拟端.
盗端就是直接官方泄漏的代码.
而模拟端, 是通过拦截客户端和服务端直接的通信, 然后尝试自己模拟服务端的数据结构返回给客户端
从基础的功能开始慢慢把所有的模拟出来, 最后做成能正常运行的模拟服务端