【案例分析】IOS雷霆战机无极外挂

admin 2022年8月28日07:55:36评论175 views字数 2487阅读8分17秒阅读模式

功能描述


IOS平台雷霆战机游戏出现一款名为无极的外挂,该外挂在非越狱环境中可使用,外挂有无限暴走、无限冲、模拟按键等功能,下面将详细分析外挂相关功能实现方式。

 

实现原理


一、无极外挂破解版的安装及32位破解版制作


1)非越狱环境外挂的安装


IOS雷霆战机无极外挂可在非越狱的机器中安装,外挂直接提供链接的方式进行下载安装,对应提供的网络链接为:http://52b.co/70/ ,外挂的安装与公司的RDM在IOS平台的安装过程完全相同,IOS平台非越狱环境中如果要安装IPA文件,则需要苹果认证的企业签名,通过下载外挂的安装包便可找到外挂的签名相关文件,对应签名文件截图如下:


【案例分析】IOS雷霆战机无极外挂


外挂新添加了上图两个文件,其中embedded.mobileprovision内容可查看到外挂作者相关的企业签名信息,关键信息截图如下:


【案例分析】IOS雷霆战机无极外挂


红框部分为企业签名ID和名字,通过苹果官方认证的企业签名便可成功在非越狱机器中安装定制化外挂的IPA安装包。

 

2)外挂文件布局及32位破解版制作


将外挂IPA和正常的IPA文件对比重要变化文件截图如下:


【案例分析】IOS雷霆战机无极外挂


其中新添加的两个文件为在非越狱玩家机器中成功安装的企业签名相关文件。其他两个文件中Clover为游戏主程序的可执行文件(即Mach-O格式的可执行文件)、Hello.lua为外挂功能模块,其中Clover文件在正版中大小约为20M,外挂破解版中Clover约为9M,外挂对主程序的文件进行了破解版和截断处理。IOS平台雷霆战机正常的IPA安装包中Clover文件包含32位和64位文件,外挂安装包中Clover文件为32位的可执行文件,推测外挂针对游戏主程序进行了如下处理:


1)首先采用工具对官方的Clover文件进行解密破解(APPStore中下载的游戏为加密的文件)。


2)外挂从解密的包含32位和64位的主程序中提取出32位的程序,之后将32位的内容保存为Clover文件并替换IPA包中正版的Clover文件。


通过以上两步骤便实现在64位平台运行32位程序(Iphone 5S以上的机器CPU为64位)。外挂从解密之后包含32位和64位的Clover文件提取32位程序主程序信息,需要借助工具或者自己写解析工具进行提取,通过MachOView文件查看破解版之后正版Clover文件,对应文件头信息如下图所示:


【案例分析】IOS雷霆战机无极外挂


外挂通过上图红框部分内容便可得到32位可执行程序开始偏移和大小,通过大小和开始位置便可快速获取到32位可执行程序。

 

二、无极外挂注入的实现


第二部分中提及Hello.lua文件为外挂功能模块,通过对比主程序的内容可发现外挂修改了主程序相关内容实现模块注入。对比正常和异常的雷霆战机主程序模块,对应不同内容截图如下:


【案例分析】IOS雷霆战机无极外挂

【案例分析】IOS雷霆战机无极外挂


通过上面截图可知外挂修改了主程序的文件头和Command相关信息,对应修改信息如下:

1)外挂将文件头的ncmds和sizeofcmds字段,外挂增加了一个Load_Command项便于注入,同时修改了Load_Command所有数据项的大小。

2)外挂添加一项CMD为LC_LOAD_DYLIB的Load_Command项,对应添加的一项内容如下图所示:


【案例分析】IOS雷霆战机无极外挂


其中加载的Hello.lua为外挂功能的DYLIB模块,@exeutable_path为系统的环境变量,表明当前加载安装包根目录下的hello.lua模块。苹果在非越狱环境中不允许玩家手动加载自实现的DYLIB文件,苹果默认Mach-O文件的LC_LOAD_DYLIB项加载主程序所需系统的动态库,外挂通过篡改雷霆战机主程序的Mach-O文件头和添加一项新的Command信息实现了以系统Dylib方式注入功能模块。

 

三、外挂暴走功能实现


由于外挂在被后台策略全服打击之后便停止功能实现,外挂实际功能分析只有半天时间,只针对外挂无限暴走功能实现方式进行分析。在非越狱机器中能够正常运行外挂功能,且非越狱机器中不能使用类似VM_Protect函数篡改代码段的属性,于是推测外挂功能不可能通过修改代码的方式实现功能,初步猜测外挂暴走功能通过修改游戏数据或者Call函数的方式实现。

外挂对功能模块加了较强的混淆,针对外挂模块进行分析难度较大,外挂加混淆之后的简单代码扩大了几十倍,例如下图便是外挂加混淆的某函数代码流程图:


【案例分析】IOS雷霆战机无极外挂


由于外挂加了较强的混淆,于是通过游戏暴走相关触发逻辑不断Hook方式确认关键处理逻辑,游戏正常逻辑中可通过是否S道具或者武器升级等方式触发暴走,当玩家触发暴走时,游戏逻辑通过GS_Game::CycleUI函数不断每帧更新暴走剩余时间,对应关键逻辑如下图所示:


【案例分析】IOS雷霆战机无极外挂


GS_Game::CycleUI函数中通过调用GS_Game::isEnergy函数判断当前玩家是否处于暴走状态,通过调用GS_Game::getEnergySpeed函数获取到每帧消耗多少暴走时间,如果玩家暴走剩余时间为小于等于0时,便通过GS_Game::setEnergy将暴走状态设置False。GS_Game::CycleUI中调用GS_Game::getEnergySpeed返回的暴走消耗时间都为负值,正常逻辑中玩家由事件触发暴走,此时调用GS_Game::addEnergy函数设置暴走状态及时间,之后在GS_Game::CycleUI函数中调用GS_Game::addEnergy不断更新剩余暴走时间。在测试外挂触发暴走状态时,第一次运行至GS_Game::CycleUI中,此时调用GS_Game::getEnergySpeed传入的时间为10000(为10秒钟),于是通过对GS_Game::setEnergySpeed函数下断发现每次外挂触发暴走时会触发该函数,外挂暴走的实现方式为:通过调用GS_Game::setEnergySpeed设置暴走时长,通过调用GS_Game::setEnergy将玩家飞机当前状态设置为Ture,实现先每次暴走10秒的功能




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

【案例分析】IOS雷霆战机无极外挂

原文始发于微信公众号(游戏安全实验室):【案例分析】IOS雷霆战机无极外挂

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年8月28日07:55:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【案例分析】IOS雷霆战机无极外挂http://cn-sec.com/archives/1066227.html

发表评论

匿名网友 填写信息