手游辅助外挂开发流程及逆向分析游戏逻辑

手游辅助外挂开发流程及逆向分析游戏逻辑

1.辅助插件介绍

随着手机游戏产业链的不断壮大,手机游戏正吸引越来越多的用户和厂商加入。 同时,也吸引了一些外挂开发商从PC游戏行业转向手游行业,形成了一条庞大的地下外挂黑色产业链。 目前手机上的辅助插件种类繁多,包括定制插件、内存修改器、传输、按键向导等。其中,定制插件针对特定游戏,包含丰富强大的作弊功能。 它们占据了辅助插件的最大份额。 发挥着重要作用游戏开发素材,也是游戏安全对抗的焦点。

因此,本章重点介绍定制辅助插件的开发流程。 定制插件的开发过程比较复杂游戏 外挂开发程序 那些程序开发,涉及的技术较多。 其中许多技术也广泛用于打击辅助插件。 了解和掌握这些技术对于打击辅助插件也将极其有效。

2.辅助插件基本开发流程

2.1 总体流程

定制辅助插件的整体开发流程如下图2-1所示。 定制辅助插件的最终目的是修改游戏流程的数据和代码,以实现特定的作弊功能。 以下各节将简要介绍每个过程。 具体技术细节请参考后续章节。

游戏 外挂开发程序 那些_游戏 外挂开发程序 那些_游戏 外挂开发程序 那些

图2-1 定制辅助插件开发流程

2.2 游戏逻辑逆向分析

在开始为游戏开发辅助外挂之前,需要对游戏流程进行逆向分析,了解游戏的具体逻辑,这样才能根据具体的游戏逻辑来制作辅助外挂。 例如,对于一款射击游戏,辅助插件功能可以包括无限横冲直撞、秒杀、无敌、敌机不攻击等。要实现战斗机的无敌功能,需要分析游戏的伤害逻辑。 要实现敌机的秒杀和非攻击功能,需要分析游戏的攻击逻辑。

在Android平台上,最常见的是cocos2d游戏和unity3d游戏。 cocos游戏的逆向分析可以使用IDAPro工具。 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进程后,HOOKzygote创建子进程并加载主Activity函数来感知游戏进程的创建。 在游戏进程中 在创建时将模块注入到游戏进程中。 除了动态注入游戏进程外,还可以通过静态感染ELF的方式注入游戏。 在IOS平台上,可以通过mobilesubstrate库方便地将dylib注入到游戏进程中。

2.5挂机键功能

注入游戏进程后,可以修改游戏进程主逻辑模块中的代码。 为了实现开关控制,辅助插件一般都是HOOK游戏按键功能。 他们可以在游戏调用关键函数实现插件功能时获得执行权限。

钩子也叫钩子。 Hook技术不仅仅用于辅助插件和恶意软件的开发。 Hook技术在许多安全软件中经常使用。 函数Hook技术的本质是劫持函数调用。 在Android平台上,可以在Java层hook API函数,也可以在Native层hook进程的So库函数。 在游戏外挂对抗领域,由于游戏的主要逻辑核心代码都在So文件中,因此辅助外挂往往会采用Native层Hook技术。 Native层有多种Hook方法,包括导入表Hook、基于异常的Hook、InlineHook等。

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

Android平台上也出现了很多第三方Hook框架工具。 其中有Xpose框架和CydiaSubstrate框架。 Xpose框架是一个无需修改APK程序就可以影响程序运行的框架。 它通过替换“/system/bin/app_process”程序来控制zygote进程,使app_process在启动过程中加载XposedBridge.jar,从而劫持Zygote进程。 以及它创建的 Dalvik 虚拟机。 CydiaSubstrate框架广泛应用于Android和IOS平台。 曾经大名鼎鼎的Chacha插件就是利用Substrate框架来hook游戏进程的功能的。

2.6 游戏内存数据修改

Hook技术本质上是对代码的修改。 在游戏进程内存中,代码也是数据,所以Hook也是一种修改游戏内存数据的方法。 除了修改代码之外游戏 外挂开发程序 那些,辅助插件还经常修改游戏内存数据。 最典型的是修饰符。 市场上流行的修改器有葫芦人修改器和烧饼修改器。 这两个修饰符都是通过搜索“/proc/$pid/mem”来实现的。 “/proc/$pid/mem”是对应进程的内存映射。 通过搜索该文件,可以搜索并修改游戏进程内存,而无需注入游戏进程。 数据。

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

文章来源:http://mp.weixin.qq.com/s?src=11×tamp=1701511634&ver=4932&signature=OhAke9bdJo4Pa14UvkFYtpAl*tS7f*TGnYI8LmponeqZ0xpF-pPBQVai7u6QHpTB7UMULY-fBy8nmPas7C0w34utqWGtYY45g9H7rgguNi4FFarrtdxnvXmGM4SJtwFS&new=1