app逆向抓包技巧:ROOT检测绕过
本篇博客旨在记录学习过程,不可用于商用等其它途径
场景
某监管app查壳发现使用了 《梆梆企业版》 加固,想尝试使用frida-dexdump
脱壳,打开app发现提示下图样式,由于进不去界面,我们直接脱壳无法保证能获取到完整的 Dex 文件,这时需要处理掉它的检测机制。
检测原理
ROOT
检测的方式多种多样,主要是分为Java
层和Native
层两层进行ROOT
检测,ROOT
检测方式总结一下主要分为几类:
- 已安装App检测,如是否有
magisk
- 文件检测,如
/sbin/su
prop
检测,如ro.debuggable
system
分区是否可写
检测使用的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
函数,进行以下代码修改
源代码:
修改后代码:
修改后重新执行命令就能附上了
本文来自博客园,作者:七夜魔手,转载请注明原文链接:https://www.cnblogs.com/ranbox/p/18461031