游戏安全实验室 首页 技术入门 查看内容

 阅读目录

辅助外挂开发流程

发布于:2016-4-27 15:27   |    51261次阅读 作者: 管理员    |   原作者: TP   |   来自: 原创

游戏辅助外挂是修改游戏进程的数据和代码的作弊程序,辅助外挂对游戏负面影响极大,对抗辅助外挂也是势在必行。而对抗辅助外挂首先需要对外挂的开发流程有一个详细透彻地了解,本小节将系统地介绍手游辅助外挂开发流程,揭开外挂的神秘面纱。

一、辅助外挂介绍

随着手机游戏产业链的壮大,手游吸引着越来越多地用户和厂商加入。与此同时,也吸引了一部分外挂开发者从PC端游戏产业转移到手游产业,形成了庞大的外挂地下黑色产业链。目前手机端上的辅助外挂种类丰富多样,包括定制化外挂、内存修改器、变速器、按键精灵等,其中定制化外挂是针对特定地游戏,包含了丰富且强大的作弊功能,在辅助外挂中占据了重要的地位,也是游戏安全对抗的重点所在。

因此本章节着重针对定制化辅助外挂的开发流程进行介绍。定制化外挂的开发流程较为复杂,涉及到的技术较多,其中很多技术在对抗辅助外挂时也应用广泛,了解和掌握这些技术在对抗辅助外挂时也会极具奇效。

二、辅助外挂基础开发流程

2.1 总体流程

如下图2-1所示,为定制化辅助外挂的总体开发流程。定制化辅助外挂的主最终目的是为了对游戏进程的数据和代码进行修改,从而实现特定的作弊功能。下面小节将简单介绍各流程,具体技术细节可以参考后面章节。

图2-1 定制化辅助外挂开发流程

2.2 逆向分析游戏逻辑

在开始进行游戏的辅助外挂开发前,需要对游戏进程进行逆向分析,了解游戏的具体逻辑,才能针对特定的游戏逻辑来制作辅助外挂。例如针对一个射击类型的游戏,辅助外挂功能可以包括无限暴走、秒杀、无敌、敌机不攻击等。要实现战机无敌功能需要分析游戏的伤害逻辑,要实现秒杀和敌机不攻击功能需要分析游戏的攻击逻辑。

在Android平台上,最常见的就是cocos2d游戏与unity3d游戏,cocos游戏的逆向分析可以借助IDA Pro工具,使用IDA既可以对游戏主逻辑模块进行静态分析,也可以对游戏进程进行动态调试,具体分析方法可参见前面《IDA静态分析》与《Android平台IDA动态调试》章节。unity游戏的逆向分析方法与cocos游戏稍有不同,unity游戏的主逻辑代码使用C#语言编写,代码一般存放在Assembly-CSharp.dll”文件中,通过ILSpy等工具可以将dll文件反编译成C#代码。在IOS平台上,同样可以使用IDA工具对游戏程序的主逻辑模块进行静态分析,但IDA暂不支持IOS平台上的动态调试,读者可使用GDB或lldb工具对IOS平台上的游戏进程进行动态调试。

2.3 枚举游戏进程模块

游戏进程在运行过程中会加载很多内部和外部的模块,其中就包含游戏的主逻辑模块,辅助外挂主要目标就是修改主逻辑模块的代码和数据。要修改主逻辑模块的代码和数据,首先就必须先获取主逻辑模块在内存中加载的基地址。

通过枚举游戏进程的所有模块,根据模块名称可以定位到指定的模块加载基地址。在Android平台上,不注入游戏进程就可以对游戏进程的模块进行枚举,读取/proc/$pid/maps”文件可以获取游戏进程的当前加载的所有模块名称、基址、权限等信息,其中pid为游戏进程的ID。在IOS平台上,必须先注入游戏进程才能枚举进程模块,通过遍历游戏进程的虚拟内存,定位dyld模块以及“_dyld_all_image_infos”符号数据,从符号的内容地址中获取模块信息。

2.4 注入游戏进程

虽然在Android平台上枚举游戏进程模块不需要注入游戏进程,但是辅助外挂要修改游戏进程的代码和数据就必须注入游戏进程。注入游戏进程的方法丰富多样,但Android设备上动态注入游戏进程需要先获得root权限,在IOS设备上注入游戏进程则需要先进行越狱。

在Android平台上可以通过ptrace直接注入共享链接库到游戏进程中,并且执行共享链接库中的函数。但目前手游市场上很多游戏都针对ptrace注入进行了保护,辅助外挂无法简单地直接ptrace注入到游戏进程中,此时辅助外挂另辟蹊径,通过ptrace注入zygote进程来间接注入游戏进程。在Android系统中,大部分应用程序进程都是由zygote进程创建,游戏进程也不例外,辅助外挂注入zygote进程后,HOOK zygote创建子进程和加载主Activity的函数来感知游戏进程的创建,在游戏进程创建时注入模块到游戏进程中。除了动态注入游戏进程外,还可以通过静态感染ELF的方式来注入游戏。在IOS平台上通过mobilesubstrate库可以很方便地将dylib注入到游戏进程中。

2.5 Hook关键函数

在注入到游戏进程后,可以对游戏进程主逻辑模块中的代码进行修改。而辅助外挂为了实现开关控制,一般会对游戏的关键函数进行HOOK,可以在游戏调用关键函数时获取执行权限,用于实现外挂功能。

Hook又被称为钩子,Hook技术不仅仅应用于辅助外挂和恶意软件的开发,在很多安全软件上都频繁使用到Hook技术。函数Hook技术的本质就是劫持函数的调用。在Android平台上,可以在Java层对API函数进行Hook,也可以在Native层对进程的So库函数进行Hook。在游戏外挂对抗领域,由于游戏的主逻辑核心代码都在So文件中,所以辅助外挂常采用的就是Native层的Hook技术。Native层的Hook方式多种多样,包括导入表Hook、基于异常的Hook、Inline Hook等。

导入表Hook是通过替换对应So文件的.Got表中指定函数地址实现对函数的Hook,基于异常的Hook方式是修改指定地址处代码为异常指令,通过异常处理函数捕获异常,获取执行权限和当前执行的上下文环境。Inline Hook在Windows、Linux平台都有广泛地应用,Android平台上的Inline Hook实现原理与其他平台相似,都是通过修改函数指令跳转到Hook函数。

Android平台上也出现了很多第三方的Hook框架工具。其中代表的就是Xposed框架和Cydia Substrate框架。Xposed框架是一款可以在不修改APK程序的情况下影响程序运行的框架,通过替换/system/bin/app_process 程序控制 zygote 进程,使 app_process 在启动过程中加载XposedBridge.jar,从而劫持Zygote进程及其创建的Dalvik虚拟机。Cydia Substrate框架在Android和IOS平台上都有广泛地应用,曾名噪一时的叉叉外挂就采用了Substrate框架来对游戏进程的函数进行Hook。

2.6 游戏内存数据修改

Hook技术本质上是对代码的修改,在游戏进程内存中,代码也是数据,故Hook也是一种对游戏内存数据修改的方法。除了对代码的修改外,辅助外挂也经常对游戏内存数据进行修改,其中比较典型的就是修改器,市面上流行的修改器有葫芦侠修改器和烧饼修改器,这两种修改器都是通过搜索/proc/$pid/mem来实现的,/proc/$pid/mem是对应进程的内存映射,通过搜索该文件就可以在不注入游戏进程的情况下搜索和修改游戏进程内存数据。


*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩0 赞6

收藏

上一篇:【开发篇】——引言

下一篇:ptrace注入游戏介绍

最新评论
引用 月神 2016-5-22 14:50
111111111111111111111
引用 月神 2016-5-22 14:50
111111111111111111111

查看全部评论(2)

B Color Image Link Quote Code Smilies

发表评论