Xposed
框架被很多人用来注入App
做一些Hook
操作,当然有相应的注入也必然存在对应的检测(反调试)操作,之前在吾爱、看雪论坛上看到很多大佬花式突破Xposed
检测的手法,所以秉承“拿来主义”,汇总了一下各大App
常见的Xposed
的检测手法和突破的方式(这里只讲关于在Java
层面检测Xposed
,深入到SO
层作检测之后再讲)。
Xposed检测方案以及突破方式
1. 遍历App
安装列表检测
原理:当App获取到系统权限的时候,可以获取系统的所有运行中的App的列表,通过列表发现是否存在有Xposed相关的App(通常都是Xposed Installer
相关的Apk,例如de.robv.android.xposed.installer
)保持运行状态,一旦存在,就表明用户很有可能存在Hook行为。
解决方案:目前市面上的大多数手机厂都把应用权限暴露给用户,所以用户可以自定义App的权限,禁止相关的App获取应用列表就可以防止App通过这个途径检测Xposed框架,当然,要过这个检测也可以修改Installer包名即可。
2. 通过自造异常检测堆栈信息,读取异常堆栈中是否包含Xposed
字符串来识
原理:在正常的Android系统启动过程中,init进程
会去解析init.rc
文件启动一系列的服务,其中就有app_process
进程,在app_process
执行过程中,会设置自身进程名为Zygote
,启动com.android.internal.os.ZygoteInit.Main
方法。而Xposed修改了app_process
进程,会先启动de.robv.android.xposed.XposedBridge.Main
方法,再由它去启动