手游外挂入侵(二)can u catch me
简介
GameGuardian,这是目前看到功能最全的手游外挂,而且通过一些手段隐藏了自身的特征,无论行为检测或者特征检测,它都有措施进行绕过。外挂功能上涵盖了加速、修改内存、搜索内存等等功能,对抗保护上有利用测试框架重新安装修改包名、使用系统签名绕过签名检测、注入父进程进行ptrace绕过等。
自身保护
先看看它的自身保护,它集成的自身保护的特点主要是绕过一些特征和行为的检测,阻止一些检测手段使外挂失效。
1、 修改包名
打开AndroidManifest便看到了如此嚣张的包名,没想到现在攻击者都这么猖狂了,那么马上直接对进程名检测,让你嘚瑟。
找了一圈,并没有发现任何同一名称的进程,这就奇怪了,无奈只有看看反编译看看它究竟做了哪些手脚。最后在代码里发现有随机产生字符串的代码,在联想到安装打开后会重新安装一次,发现原来他每次都会重签名然后安装一次,找到的随机进程名就是GG修改器,防止使用特征检测。
2、 重签名
重签名也挺慎重的,因为分析发现了它使用了谷歌提供的测试签名,和一些系统应用的签名相同,也保证了该特征无法被利用。
3、 注入动态库名称简单
注入的动态库名称从0~9,根据系统框架进行选择,这样的动态库名称无法从黑名单进行过滤,因为无法保证是否会有误判产生。
4、 父进程ptrace无效
这是在实际测试中发现的,我们知道对抗一些调试手段、注入手段,可以通过产生线程ptrace需要保护的线程,但是在之前的测试中该手段无法防止GG的注入,进一步分析发现它会去找寻攻击进程的ptrace父进程,然后注入动态库解除ptrace。后来发现某讯的保护就是利用这一特征,跳过直接的子父进程,使用比如父父进程进行ptrace,这样就绕过了它的解除手段。
以上是分析过程中发现的自身保护特性,利用这些保护进行规避检测,做到它的catch me if you can.
外挂功能
功能上面比较全面,比如修改器、加速器都有,考虑到修改器使用的比较常规的修改手段这里就不介绍了,主要介绍加速器的实现。
加速器也是进行hook修改参数比例来达到篡改游戏时间,使用的是基于.got.plt的hook,我们知道.got.plt段采用的是延迟绑定技术,静态的查看到的该段函数对应的地址都是空的,只有在加载后,会根据相应函数地址进行填充,因此也称为导入函数,它这里就是依据此,遍历修改了libc.so中有关于时间的函数的导入地址,比如gettimeofday,从内存中抓出使用加速器前后的导入函数段的内存对比:
左侧对应是原始未被HOOK的so在内存中的展示,右边是HOOK后在内存中的展示,可以看到一些地址明显被替换,这些被替换的地址对应就是.got.plt段的一些值。关于基于.got.plt的hook的实现,可以参考我的另一篇文章。