外挂的定义
一般意义上的外挂即是通过非正常手段破坏游戏的正常数据以达到某些非法目的工具。除了常见的诸如修改角色伤害,金币数量等的外挂,包括模拟器和脚本严格来说都属于外挂。
外挂的分类
以上两类外挂的核心区别是是否需要依赖游戏客户端,辅助版需要,而破解版多不需要。
辅助版外挂
1、专用插件
这类外挂属于定制型,只针对特定游戏。在Android下为so文件形式,在ios下为dylib文件形式。
2、通用工具
a、内存修改器
用来搜索、修改游戏的内存数据。
b、变速器
可加快/减慢游戏节奏,节省玩家时间或降低操作难度。通常是影响游戏帧的更新频率。
c、按键精灵
通过模拟用户操控功能键,比如固定一段按键序列来实现重复刷道具的功能。
d、模拟器
可以让手游玩家在PC上运行游戏,得到更好的操作手感,变相降低玩家的游戏难度。
e、抓包工具
用于拦截游戏的上下行数据包,可篡改、重发、丢弃。这类工具主要可以利用游戏协议方面的漏洞,对游戏协议内的字端修改或重发(丢弃)数据包来实现某些诸如秒杀,无敌功能类型的外挂。
破解版外挂
本质上是一个非法客户端,一般有两类:脱机挂和魔改客户端
脱机挂是外挂作者基于对游戏协议的分析自行开发的一个游戏客户端,而魔改客户端则是通过修改原游戏客户端来实现的。
外挂的实现原理
辅助版外挂的实现原理
1、专用插件
多是利用插件形式:利用注入技术将功能模块注入进游戏进程空间中,并执行功能模块的入口函数。常见的如Android平台上的Zygote注入,直接ptrace注入技术;IOS上的Cydia框架注入dylib模块。当外挂功能模块注入游戏进程后,会执行Hook操作实现外挂功能。简单来说就像增加跳转指令使得原游戏执行逻辑被破坏,通过跳转指令执行外挂作者编写的新逻辑代码中。
2、通用工具
a、内存修改器
对指定进程的内存数据进行读写,有两类实现方式:一是注入通用功能模块到游戏进程;二是根据平台加载机制实现,如Android平台下通过/proc/[pid]/maps可读写游戏的内存镜像。
b、变速器
针对不同引擎修改不同Libc.so相关函数。
c、按键精灵
d、模拟器
e、抓包工具
一是基于硬件,如让网卡处于混乱模式,即可拦截数据包;二是通过Hook,针对send和recv类函数进行拦截,获得网络数据包。
破解版外挂的实现原理
破解版外挂是预先静态修改后的独立游戏客户端。
除基于对游戏协议的理解自己编写客户端外,修改客户端实现外挂则根据数据的不同可分为逻辑代码和数据资源。逻辑代码的修改根据游戏引擎和游戏语言,其修改的方式不同。如汇编语言的修改一般是实现跳转,参数赋值等。而针对数据资源则可以通过删除,覆盖或替换原游戏数据资源来实现外挂功能。
手游外挂技术汇总
手游辅助外挂需要了解的技术
- ARM汇编
- C/C++语言
- Android,ios开发
- 了解常用的游戏引擎
- 静态分析(IDA分析)
- 动态分析(Android,ios调试)
- 静态修改
- 动态修改