时间:2022-12-19 10:13:01
什么是插件
插件是用来破坏游戏程序常规游戏数据和逻辑的所有工具或解密版。 可以修改游戏内存数据的修改器,以及可以修改网络数据包的捕获工具等。 这些插件会影响游戏的内存数据、文件数据、网络数据甚至代码逻辑。
但随着增效市场的发展,增效衍生出了其他恶意变种。 这些插件不影响游戏数据和逻辑,如挂机、模拟器和脚本向导。 脱机是插件作者使用反向游戏协议自行开发的非法客户端,玩家可以节省大量时间开始游戏; 模拟器可以帮助玩家在PC上玩移动游戏,通过FPS等游戏获得更好的操作环境,帮助玩家碾压对手; 脚本向导是记录模拟玩家的行为、响应游戏事件、自动磨练金币经验的功能。 但是,这些新插件有一个共同的特性。 这意味着欺骗游戏服务器,欺骗客户端、设备和操作员。

结合上面的分析,可以给出适合当前移动游戏安全情况的插件定义。 是破坏游戏客户端正常的数据和代码逻辑,伪造游戏客户端操作情况的工具和破解版。
插件分类
移动游戏中已经出现了很多插件样本,根据其特点可以整理出如图所示的分类图。
插件分类
插件分为辅助版和破解版两种。 这两种插件的核心区别在于它们是否需要依赖游戏客户端。 辅助插件必须与游戏客户端协同运行; 破解版是独立运行的非法客户端。
1、补助
辅助插件必须依赖于游戏客户端,并且不能单独启用。 根据其作用范围,可分为两小类:专用插件和通用工具。
1.1专用插件
专用插件类插件是一种仅适用于特定游戏的定制插件。 其存在形式因平台而异,在Android中为SO形式,在IOS中为dylib形式。 例如安卓上盛行的叉子和甜甜圈助手,就是专用插件类插件的典型。 其内部集成了多个安卓手游功能插件,为不同的手游注入不同的SO实现插件功能。 同样的IOS也有888助手登场,在很多人气游戏中投入了各种各样的Dylib,实现了无敌、秒怪功能。 这样的专用插件功能灵活,通常可以随时关闭或打开。
环形修正器
1.2通用工具
顾名思义,通用工具支持所有手游的通用功能。
用于检索和修改游戏内存数据的修改器。 在Android平台上比较主流,有烤饼和葫芦巴等典型代表。 如下图所示。 玩家通常根据游戏面板的准确数据,利用修改器搜索相应的数值,并基于数值变化规律进行多次搜索,排除相应属性在内存中的位置,直接修正为夸张效果值。 后期像模糊检索一样,也有只要数据变大或变小就能进行检索的各种变种的加密检索。 带简单加密(异或加密等)功能进行搜索。 这样的修改器插件,常见的插件功能是改变人物属性,实现秒怪、无敌等。
面包烘焙修改器
变速器,加快游戏节奏,节约玩家时间; 降低游戏节奏,降低操作难度。 影响游戏框架的更新频率,实现通关加速、技能减速等插件功能。 有叉形变速器、面包烤变速器等典型代表。 下午所示。 一般的外挂功能都是在游戏的对局中,利用变速器的加速功能,主角和怪物AI的攻击节奏变快,可以迅速结束战斗。
拨叉变速器
按钮向导,模拟用户按按钮。 在简单的版本中,直接记录固定键序列,并对该键序列进行循环模拟。 之后,发展到可以识别图像按下了特定键。 这类插件典型的有触摸向导、按键向导等,常见于画笔部分等重复操作较多的手游。 例如,在某飞机游戏中,可以使用按键向导随机移动飞机打印复印件,存储金币经验。
按键向导
在模拟器中,允许玩家在PC上执行手游。 这样的工具在PC端运行,主要是海参游戏、天天、TGP等。 由于PC具有良好的鼠标和键盘操作性,因此这些插件在FPS和格斗家的游戏中非常适用于imba。 在FPS中可以迅速滑动视野,对准目标射击,在格斗家的巡回赛中可以与众不同地脱离位置释放连技等。
TGP模拟器
抓住数据包的工具。 可以拦截游戏上下的数据包,篡改、重发、丢弃。 例如XXX。 在没有进行协议加密的游戏中,这种插件工具的危害很大。 例如,某格斗游戏中出现角色属性信息包明文发布的现象,被玩家发现后,玩家可以直接将相应属性修改为较大的值,实现秒怪功能。 该工具主要利用游戏协议的漏洞,一方面是协议内容是否加密; 另一方面,是协议设计中是否存在逻辑上的脆弱性,也就是说如果再发送、废弃数据包,是否会出现插入功能。
WPE网络数据包编辑器
2、解密版
破解类插件本质上是非法的客户端。 常见的有关机和可以进行小修改的解读版两种。
挂起是插件作者根据对游戏协议的分析,自行开发的游戏客户端。 通常,这种客户端可以使用很多直接打印复印件等功能,收益很大。 工作室对这类插件的需求很大。
损伤破译版,这里使用损伤来定义,是因为这样的破译版是在正版客户端的修正修正修正的基础上实现的。 其功能与辅助类插件相比缺乏灵活性,一般来说,一般解密版不能固定开启一种插件功能,在游戏中关闭。
插件实现原理综述
根据插件的种类不同,实现原理也有很大的不同。 这里根据上述每个插件的分类,介绍其大致的实现原理。
1、补助
辅助插件是基于游戏客户端动态更改游戏数据类型的插件。
1.1专用插件
专用插件类插件是定制的插件,每个插件只针对一个游戏。 这种插件的实现正如其名,是插件形式。 利用注入技术将功能模块注入游戏进程空间,执行功能模块入口函数。 注入手段因移动设备而异。 安卓平台上的Zygote注入、直接ptrace注入技术; 在IOS中利用Cydia框架注入dylib。
插件功能模块注入游戏流程后,执行HOOK操作实现插件功能。 外挂作者需要事先反向分析游戏代码逻辑,找出一些游戏功能函数的地址。 例如,怪物的采血处理函数。 然后,在插件功能模块中通过HOOK操作挂接相应的函数,重写参数或调用逻辑(多次回调或单步调用)。
在基本程序集中,HOOK操作可以理解为向特定代码地址添加跳转指令以跳转到插件作者的自定义函数。 目前已打包了支持HOOK操作的优秀三方库,插件作者只需调用相应的接口函数,就可以对substrate等指定函数进行HOOK操作。
因此,专用辅助可以灵活修改游戏代码逻辑,通过多次回调怪物采血函数实现秒怪,通过屏蔽玩家采血函数实现无敌等。
1.2通用工具
这种插件与平台和游戏引擎相关,与具体游戏无关,实现了跨游戏的插件功能。
饰面。 其功能的本质是实现对指定进程的内存数据的读写。 其实现技术主要体现在如何读写游戏的内存数据。 可以分为两种实现方式,一种是与专用插件类似实现,通过将一个通用功能模块注入游戏进程,根据本地套接字的接收操作(检索修改)直接遍历内存等方式实现; 另一个实现基于平台加载机制,包括可在Android平台上通过/proc/[pid]/maps读写的游戏内存镜像,实现得很好。
影响变速器、游戏时间的测定。 通常,游戏需要以帧为单位再生画面,在再生画面过程中计算每1帧的动画再生所需的时间(也可以理解为两个画面切换的间隔时间),游戏为了计算每帧的更新,需要调用c库函数取得系统时间目前,外网的主流游戏加速器针对每个引擎更改Libc.so相关函数,如gettimeofday、clock_getime等。 修正方式是上述的HOOK安装,关于这样的lic的导出函数,具体而言,也有导入表HOOK等方式。
按向导调用系统API,发送特定的操作序列来模拟用户的按钮。 这样的插件功能的实现,由于经由对应的系统API发送操作事件,模拟全局密钥,所以与系统的关联性较高。 在Android中,可以用Instrumentation接口的sendPointerSync函数来实现; 也可以在ROOT权限驱动级别调用Runtime.getRuntime ( ).exec )来执行sendevent等命令。
在模拟器中,允许玩家在PC上执行手游。 PC上的模拟器,目前主要流行Android模拟器,其具体产品有TGP、西玛游戏、每日等模拟器。 其核心实现还是基于VirtualBox仿真安卓系统,可以直接仿真x86架构的安卓系统。
捕获工具,本质是网络数据包编辑器。 一种实现方式基于硬件,例如将网卡置于混乱模式,可以监听数据包; 另一个是利用HOOK对send和recv系函数进行监听,获得网络数据包。
2、解密版
破解版是一个预先静态修改的独立游戏客户端。
前述的一种离线挂机,在端游中盛行一时。 插件作者可以在前期反向分析游戏网络协议后,自行创建独立的三方客户端。 这种外挂技术难度较大,主要体现在逆向分析游戏协议上。
另一个是修改游戏客户端后实现的游戏破解版。 可以根据更改的客户端数据进行分类。 逻辑代码和数据资源。
逻辑代码: Android平台上的逻辑代码更改因游戏引擎而异。 在典型的cocos游戏中,逻辑代码存储在so中,可以通过IDA等工具读取和修改ARM、THUMB汇编指令的Unity游戏的C#脚本代码为/assets/bin/data/managed/assed 在IOS平台上,所有代码都位于app的bin文件中,与Android的so类似。 你只需要了解THUMB。 同样,还有Lua等代码。 根据游戏的语言不同,改变方法也不同。 直接修改装配命令会减小可修改的空间。 典型的实现是修改跳转、分配参数。 例如,死亡判断、通关判断、采血函数参数修改等。 IL、Lua等的修改比较简单。
数据资源:此处的资源包括除代码外的所有游戏客户端资源,包括图像资源、配置资源和音乐资源。 有些解读版是纯粹的美化解读版,没有打替换背景美女照片等广告等好处。 但是经常通过修改更多的资源文件来实现游戏逻辑的修改,这样的实现需要大量的反向积累,哪些资源可能引起插件功能。 一旦找到,如何纠正也是技术难点。 有些游戏安全性不够,资源文件保管明确,非常方便坏人修改,但是很多资源都是加密的。 这里提出了两种常用的替代资源解读版的实现方法。 没有大脑的替代和分析调试。
无大脑置换,无论三七二十一,都将尝试删除资源文件、将其替换为空,或者重命名并复盖同类资源文件。 通过这种方法实现的插件和修改器插件数量并不相同,一方面是游戏安全性不够,另一方面是这样的插件实现起来很简单。 例如,在某飞机游戏中,删除子弹资源就可以实现敌机的无子弹效果; 另外,在某个酷玩游戏中,可以通过将某个XXX_1配置文件复盖为与其他前缀相同的配置文件( XXX_2、XXX_3) )来降低级别难度等。
分析调试,这种实现效果与置换法相同,但前期通过静态分析或动态调试分析来确认资源的作用和加密方式。
请尝试这种方法,因为在教程中,逻辑相关数据始终存储在客户端资源中。
展望
本页旨在普及移动游戏插件知识,让业界人士意识到移动游戏的安全问题,并以此为起点深思行业技术的发展。
来源:游戏安全实验室( GSLAB.QQ.COM ) https://gslab.qq.com/