-
-
[原创]iOS 游戏辅助之游戏加速浅析
-
发表于:
2017-9-19 19:23
41925
-
相对于Android APP
,针对iOS APP
的分析和破解要少得多,这也导致上线AppStore
的绝大部分应用都是裸奔的。这篇文章将对iOS
平台的一款游戏加速辅助进行分析,分享给大家。
这款游戏加速器是以动态库方式注入到APP
中加载运行的,其介绍说只能在越狱手机运行,因为动态库的注入依赖于框架:MobileSubstrate
。但是在非越狱手机也可以实现注入的,一个方便的框架可以参考 MonkeyDev。
动态库本质是一个Mach-O
格式的文件,和Windows
的DLL
文件、Linux
的so
文件作用类似。其不能直接运行,而是通过系统链接加载器dyld
完成加载和初始化。dyld
是开源的,可在 Source Browser 查看。简单介绍下动态库dylib
的加载过程:
本节主要使用 Hopper Disassembler 来进行分析。Hopper
分析完成后如下图所示:
其中加速器的构造器函数为:__GLOBAL__sub_I_MFAccelerator.mm
。反编译结果如下:
其区分了游戏的类型:U3D
和cocos2d
。伪代码如下:
可以看见,对于 cocos2d
,其是通过内联HOOK gettimeofday
函数完成的。而对U3D
游戏相关时间函数的内联HOOK
是在fake_unity3d_finish_launching
中完成的,其的反编译代码很长,这儿只给出了关键的部分:
通过动态调试发现:U3D
游戏的内联HOOK
是通过内存搜索特征串得到的。大致流程如下:
2、在此内存空间搜索两个特征串,如下:
3、只有在这两个特征串都存在的情况下,才会内联HOOK
。至于这两个特征串的含义,笔者暂时不知。
4、然后在距这两个特征串特定的位置进行内联HOOK
,如下:
对于不同的U3D
程序,特征串在的位置并不固定。
cocos2d
的游戏加速实现主要在__ZL13$gettimeofdayP7timevalPv
中,主要反编译逻辑如下:
体现加速的代码主要在if (r2 != 0x0) {...}
中,对应的汇编代码如下:
所以加速器伪代码大致为:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)