如何使用Frida从Android的钩子本机函数中打印变量

时间:2019-05-22 12:35:31

标签: reverse-engineering frida

我有一个可加载mylib.so的android应用。这个库有一个叫做decryptChar的函数,我想挂钩并打印在那里计算出的字符串变量。我为此使用frida。我做了一些尝试,但是由于我没有经验,所以一切都失败了。我想在离开函数之前打印变量Key,以便获得最终值。

我使用的代码如下

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

执行此操作的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

您混合了几件事

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上阅读文档

答案 1 :(得分:0)

您不能打印局部变量。您应该钩住变量的使用站点。如果在decryptChar另一个函数调用中使用了该变量,则应挂钩该函数。如果要查看decryptChar中作为变量调用变量的函数是什么,最好使用ida pro这样的反汇编程序,因为要挂接的函数是在.so库中定义的。

例如,使用write()的变量作为参数调用了decryptChar()函数,您钩住了write()函数调用。然后,您可以打印变量。