Как распечатать переменную из подключенной нативной функции в Android с помощью Frida

У меня есть приложение для Android, которое загружает файл mylib.so. В этой библиотеке есть функция с именем decryptChar, которую я хочу перехватить и напечатать рассчитанную там строковую переменную. Для этой цели я использую frida. Я предпринял несколько попыток, но, учитывая мою неопытность в этом, все провалилось. Я хотел бы напечатать переменную Key непосредственно перед выходом из функции, чтобы получить ее окончательное значение.

Код, который я использовал, следующий

Interceptor.attach(Module.findExportByName("mylib.so", "decryptChar"), {
    onEnter: function (args) {
        console.log(this.Key.value);
    }
});

Каков правильный способ сделать это?


person kampias    schedule 22.05.2019    source источник
comment
Кто-нибудь знает, как на это ответить?   -  person kampias    schedule 24.06.2019


Ответы (2)


Вы не можете распечатать локальную переменную. Вы должны подключить сайт использования переменной. Если переменная используется в вызове другой функции в decryptChar, вы должны подключить функцию. Если вы хотите увидеть, какая функция вызывается для переменной в качестве аргумента в decryptChar, хорошо использовать дизассемблер, такой как ida pro, потому что функция, которую вы хотите перехватить, определена в библиотеке .so.

Например, функция write() вызывается с переменной в качестве аргумента из decryptChar(), вы перехватываете вызов функции write(). Затем вы можете распечатать переменную.

person jinbeom hong    schedule 29.09.2019

Вы смешали пару вещей

Аргумент onLeave — это возвращаемое значение, this используется для передачи данных из onEnter.

Если вы хотите напечатать первый аргумент для статического метода, давайте предположим, что это указатель на строку

Interceptor.attach(Module.findExportByName("mylib.so", "decryptChar"), {
    onEnter: function (args) {
        console.log(args[0].readCString());
    }
});

Прочитайте документы @ https://www.frida.re/docs/javascript-api/#instruction

person whoopdedoo    schedule 23.05.2019
comment
да действительно onLeave используется неправильно. Хотя я хочу напечатать переменную, а не аргумент, и использование .value, как указано в документах, не сработало. - person kampias; 23.05.2019