手游直装破解手段分析

手游直装破解手段分析

导语

        近期朋友公司的多款手游出现直装破解挂的困扰,朋友公司对接的是某鹅的反外挂系统,理论来说大厂不应该出现这类问题,于是我找了下市场流行的一些直装挂分析了一下,发现大多数的直装挂是利用某管理器的过签名手段来实现的反签名检测和完整性校验,部分有点技术的作者利用hook技术来进行反检测,对此问题我和朋友公司的几个技术人员进行了相关讨论和研究,发现其实此类技术难度并不高,加上很多已有的一键化方案,直装类的外挂才会如此猖獗。

直装破解技术的缺点

        直装类外挂核心在于IO重定向,系统API覆写,虚拟化技术。通过对直装挂的测试,发现所有直装挂都会hook或直接改掉QQ的调用代码,让游戏以为手机上没有安装QQ然后调起网页版登录。

        通过文件对比,我们发现部分直装挂修改了AndroidManifest.xml中的Activity启动项,并且往apk文件中添加了外挂自己的dex文件,并在lib中添加了自己的so。因为修改了Apk文件,理论来说检测出非正版应该是很容易的,不过为什么没有检测出来呢?我们在APK中发现,原包被放在了里面,在外挂添加的dex文件中,也发现了sandhook的相关代码,因此分析,直装外挂通过IO重定向和API覆写,来实现让检测代码调用到原apk文件,也就绕过了应用对签名和完整性校验的检测。

因为这些特点,我们也发现了相关的缺点:

hook只会应用于当前进程classLoader中存在Hook相关的类外挂加载自己的so,会映射到/proc/self/maps文件中外挂会创建悬浮窗到游戏窗口之上外挂会创建多个线程来访问游戏数据等...... 我的想法和解决方案

        针对第一个问题,也是最方便有效的解决办法,我们可以通过安卓app_process命令创建一个java进程来获取apk文件的校验值,并通过Binder于主进程通信,与主进程/服务器获取到的数据进行对比,便可知晓apk是否被修改。此方案朋友公司已运用,经过上千款机型测试,并未出现不兼容情况,甚至达到了意想不到的效果,在模拟器的测试中发现,此方案还能完美检测模拟器和虚拟机。

        一个手段肯定是不行的,由于此类外挂必须使用Hook技术,我们可以对目前主流的Hook框架进行特征检测,实现手段也是非常简单,通过遍历maps,扫描anon:dalvik-DEX特征段内存中的字节,判断是否有相关的特征即可知道是否对应用本身使用了Hook。

         在调试中,我们发现外挂加载了自己的so,但是我们并没有找到/proc/self/maps中相关的so库,反编译后我们发现,外挂利用了Riru的so隐藏方案,针对此问题,我们也有了解决方案,通过扫描匿名内存段的字节,查找ELF特征。不过此方案并不完美,因为部分机型厂商也会使用类似方案来加载自己的so文件,建议根据外挂的一些特征来配合使用。

        此外,我们可以遍历/proc/self/task/获取线程信息,综合来检测外挂。

结语

        这些方案也能运用于软件安全保护上,对于个人软件开发者而言,不如自己开发一套防破解方案,非常省钱且有效!也希望鹅厂能尽快修复ACE系统的相关检测方案。


比丘资源网 » 手游直装破解手段分析

发表回复

提供最优质的资源集合

立即查看 了解详情