Xposed Hook System.loadLibrary闪退解决方法

1,110 阅读1分钟

今天直接hook System.loadLibrary(),发现直接hook会让app闪退,点进源码看了一下loadLibrary这个方法的实现,发现里面还嵌套了一个方法,而且这个方法在sdk里面是没有的,大致可以知道如果要hook这个方法的话得找Runtime.loadLibrary0

@CallerSensitive
public static void loadLibrary(String libname) {
    Runtime.getRuntime().loadLibrary0(Reflection.getCallerClass(), libname);
}

百度了一下得知这个方法的结构是这样的

private synchronized void loadLibrary0(ClassLoader loader, Class<?> callerClass, String libname) {
    // 省略若干代码
}

既然知道了方法的参数类型和名字,那直接XposedHelpers hook这个方法就好了,以下是kotlin代码,java代码请自行理解翻译,差不多的

XposedHelpers.findAndHookMethod(
    Runtime::class.java,
    "loadLibrary0",
    Class::class.java,
    String::class.java,
    object : XC_MethodHook() {
        override fun beforeHookedMethod(param: MethodHookParam) {
            logger.d("loadLibrary0:${param.args[1]}")
            // 这里我是想拦截所以这样写
            if (param.args[1] == "libName") {
                param.result = null
            }
        }
    })