最近使用Frida 进行Hook 时,遇到一个问题。
某些应用,会有自己的Classloader进行动态加载,而Frida是使用的默认的Classloader
无法hook。使用下面方法可以指定Frida使用的Classloader。
Java.enumerateClassLoaders({
onMatch: function (loader) {
try {
// the apk contains class: org.chromium.net.AndroidNetworkLibrary
if (loader.findClass("org.chromium.net.AndroidNetworkLibrary")) {
console.log('AndroidNetworkLibrary ', loader.toString())
//判断classloader路径是不是你想要的
if (loader.toString().indexOf("google") != -1) {
Java.classFactory.loader = loader;
send("loader: " + loader);
hookWebview()
// [*] loader: dalvik.system.DelegateLastClassLoader[DexPathList[[zip file "/data/user_de/0/com.google.android.gms/app_chimera/m/00000009/CronetDynamite.apk"],nativeLibraryDirectories=[/data/user_de/0/com.google.android.gms/app_chimera/m/00000009/CronetDynamite.apk!/lib/arm64-v8a, /system/lib64, /system/product/lib64]]]
}
}
} catch (error) {
}
}, onComplete: function () {
}
});
注意:
即使使用这个方法,也得等动态加载机制已经开始加载了,才能进行Hook