Не удалось найти базовый адрес или экспортированную функцию динамически загружаемой библиотеки

Я могу определить, когда библиотека загружается, используя 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 экспортируется.


person Andrei    schedule 21.09.2020    source источник
comment
Согласно документации Frida findExportByName в качестве первого параметра требуется имя модуля, а не имя файла. Возможно, для вашей библиотеки имя модуля отличается от имени файла. Я бы проверил список загруженных модулей через Process.enumerateModules()   -  person Robert    schedule 22.09.2020
comment
Вы уверены, что Python3 в Windows может обрабатывать общие объекты в стиле Unix, содержащие плагины для Java?   -  person Lorinczy Zsigmond    schedule 29.09.2020


Ответы (1)


Это потому, что JNI_OnLoad был вызван, когда вы нашли JNI_OnLoad, который был экспортирован с помощью IDA. Вы можете попробовать этот метод, чтобы JNI_OnLoad HOOK проанализировать поведение JNI_OnLoad.
1. Написать выполнение dlopen имя_библиотеки. Так что получите дескриптор библиотеки
2. Используйте dlsym получите адрес символа JNI_OnLoad
3. Используйте хук inlinehook символ адрес .
4.делай что хочешь.

person jdir.s    schedule 29.09.2020