Android的Xposed注入检测与Root检测

Xposed检测

一、方法堆栈检测

    public static boolean a__HasXposed(Throwable arg6__Throwable) {
        boolean v0__result = false;
        StackTraceElement[] v2 = arg6__Throwable.getStackTrace();
        int v3 = v2.length;
        int v1;
        for(v1 = 0; v1 < v3; ++v1) {
            String v4 = v2[v1].getClassName();
            if(v4 != null && (v4.contains("de.robv.android.xposed.XposedBridge"))) {
                return true;
            }
        }

        return v0__result;
    }

检测堆栈中是否有匹配XPOSED的包名de.robv.android.xposed.XposedBridge

二、反射检测Xposed对象

  1. 通过反射获得一个类de.robv.android.xposed.XposedHelpers的一个对象。
  2. 通过反射获取de.robv.android.xposed.XposedHelpers类的一个对象obXposedHelper
  3. 检测obXposedHelper成员fieldCache, methodCache, constructorCache是否有支付宝包的关键字。
  • obXposedHelper

参考文章: 阿里系产品Xposed Hook检测机制原理分析

so注入检测

一、maps检测

主要读取/proc/${mypid}/maps文件,从文件中读取模块信息,遍历有没有可疑模块。

Root检测

一、检测文件是否存在

获取default.prop文件中ro.secure的值1,且/system/bin/su, /system/xbin/su两个文件存在。

参考文章: 阿里系产品Xposed Hook检测机制原理分析

ps: 后续有新方法持续更新