今天直接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
}
}
})