Я могу определить, когда библиотека загружается, используя System.loadLibrary, но Module.findBaseAddress возвращает значение null, а Module.enumerateExports ничего не возвращает.
Вот мой код:
function processJniOnLoad(libraryName) {
const funcSym = "JNI_OnLoad";
const funcPtr = Module.findExportByName(libraryName, funcSym);
const membase = Module.findBaseAddress(libraryName);
console.log("Base address is " + membase);
console.log("[+] Hooking " + funcSym + "() @ " + funcPtr + "...");
Module.enumerateExports(libraryName, { onMatch: function(e) { console.log("type " + e.type + " name of function = " + e.name + " " + e.address); }, onComplete: function() { } });
}
function waitForLibLoading(libraryName) {
var isLibLoaded = false;
Interceptor.attach(Module.findExportByName(null, "android_dlopen_ext"), {
onEnter: function (args) {
var libraryPath = Memory.readCString(args[0]);
if (libraryPath.includes(libraryName)) {
console.log("[+] Loading library " + libraryPath + "...");
isLibLoaded = true;
}
},
onLeave: function (args) {
if (isLibLoaded) {
processJniOnLoad(libraryName);
isLibLoaded = false;
}
}
});
}
waitForLibLoading("library_name.so");
Пример вывода:
C:\just_a_path>python peton3.py
[+] Loading library /data/app/com.app_name.app-<random string>==/base.apk!/lib/arm64-v8a/library_name.so...
Base address is null
[+] Hooking JNI_OnLoad() @ null...
Глядя на вкладку «Экспорт» в IDA, я вижу, что JNI_OnLoad экспортируется.
findExportByName
в качестве первого параметра требуется имя модуля, а не имя файла. Возможно, для вашей библиотеки имя модуля отличается от имени файла. Я бы проверил список загруженных модулей черезProcess.enumerateModules()
- person Robert   schedule 22.09.2020