本篇博客旨在记录学习过程,不可用于商用等其它途径
场景
某监管app查壳发现使用了 《梆梆企业版》 加固,想尝试使用frida-dexdump脱壳,打开app发现提示下图样式,由于进不去界面,我们直接脱壳无法保证能获取到完整的 Dex 文件,这时需要处理掉它的检测机制。
检测原理
ROOT检测的方式多种多样,主要是分为Java层和Native层两层进行ROOT检测,ROOT检测方式总结一下主要分为几类:
已安装App检测,如是否有magisk 文件检测,如/sbin/suprop检测,如ro.debuggablesystem分区是否可写
检测使用的API也是多种多样,比如Java层的File.exists和File.canRead都能用来检测文件是否存在,Native层的fopen和access也一样。
一些路径下的su文件,一些root的app相关文件 “/data/local/bin/su”, “/data/local/su”, “/data/local/xbin/su”, “/dev/com.koushikdutta.superuser.daemon/”, “/sbin/su”,
检测一些root的app如magisk等 “com.noshufou.android.su”, “com.noshufou.android.su.elite”, “eu.chainfire.supersu”, “com.koushikdutta.superuser”, “com.yellowes.su”, “com.topjohnwu.magisk”,
绕过方式
在非ROOT环境使用BlackDex脱壳
BlackDex能够在非root环境下进行脱壳,下载地址 安装后进入BlackDex,直接双击需要脱壳的app,然后将脱壳得到的DEX文件放到apk里再用jadx反编译即可
使用高版本Magisk(v24+)绕过
自测发现确实可以绕过ROOT检测,但是这样排除列表中的应用则无法使用Magisk和Lsposed模块,如果app还有SSL检测就没法绕过
使用Shamiko插件绕过
Shamiko下载路径 最新版本会依赖于Magisk对应版本,如果对不上会安装失败,提示语大概是please install magisk canary
安装成功后,操作流程看下图:
相比较Magisk原生hide,就是在安装模块后把遵守排除列表关了,此时就可以同时支持Lsposed其它模块了
删除检测源码
这种操作不适合本场景,它适合那些没有加固、反编译能拿全源码的app,通过删除或者修改检测源码并重新编译的方式可以绕过检测。
Frida hook绕过
这种操作不适合本场景,它需要反编译看源码 在针对基于 su 的检测方式里,可以使用jadx反编译apk,全局搜索"su"定位到检测代码,然后直接hook代码修改方法返回值,如:
Frida Objection绕过
Objection 是基于 Frida 框架开发的一个工具,它提供了一组便捷的功能和脚本,以简化在移动应用程序中使用 Frida 进行动态分析和漏洞利用的过程。 安装:pip install objection
由于Objection依赖Frida,在运行Objection前需要先运行Frida 启动命令:objection -g 包名 explore 执行命令时会自动打开app,这时候是被检测ROOT的,点击退出让app在后台运行
然后在Objection命令行输入android root disable,再回到app界面,这时app会再次刷新,而Objection会hook处理它调用到的检测,从而实现绕过
objection绕过双进程保护
如果app存在双进程保护,那么我们启动objection就可能出现卡死、闪退等问题。 比如:
一般双进程保护,先把app关掉直接用spawn模式就能附加上,但是这里我尝试了很多都没法绕过,所以只能尝试修改objection源码来绕过双进程保护。 windows中找到objection的源码文件,然后进入utils\agent.py,找到inject 函数,进行以下代码修改
源代码:
修改后代码:
修改后重新执行命令就能附上了