本篇博客旨在记录学习过程,不可用于商用等其它途径
场景
某监管app查壳发现使用了 《梆梆企业版》 加固,想尝试使用frida-dexdump脱壳,打开app发现提示下图样式,由于进不去界面,我们直接脱壳无法保证能获取到完整的 Dex 文件,这时需要处理掉它的检测机制。

检测原理
ROOT检测的方式多种多样,主要是分为Java层和Native层两层进行ROOT检测,ROOT检测方式总结一下主要分为几类:
- 已安装App检测,如是否有
magisk - 文件检测,如
/sbin/su prop检测,如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 函数,进行以下代码修改
源代码:

修改后代码:

修改后重新执行命令就能附上了



















