如何使用 Frida 在 Android 中从挂钩的本机函数中打印变量
Posted
技术标签:
【中文标题】如何使用 Frida 在 Android 中从挂钩的本机函数中打印变量【英文标题】:How to print variable from hooked native function in Android using Frida 【发布时间】:2019-10-08 22:47:38 【问题描述】:我有一个加载mylib.so
的android 应用程序。这个库有一个名为decryptChar
的函数,我想钩住并打印一个在那里计算的字符串变量。我为此使用frida。我做了一些尝试,但鉴于我在这方面缺乏经验,一切都失败了。我想在离开函数之前打印变量Key
,以便获得它的最终值。
我使用的代码如下
Interceptor.attach(Module.findExportByName("mylib.so", "decryptChar"),
onEnter: function (args)
console.log(this.Key.value);
);
这样做的正确方法是什么?
【问题讨论】:
有人知道如何回答这个问题吗? 【参考方案1】:你混合了一些东西
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
【讨论】:
是的,确实onLeave
使用不正确。虽然我想打印一个变量而不是一个参数,并且使用文档中提到的.value
不起作用【参考方案2】:
您不能打印局部变量。您应该挂钩变量的使用站点。如果在decryptChar
的另一个函数调用中使用了该变量,则应该挂钩该函数。如果您想查看decryptChar
中的变量作为参数调用了什么函数,最好使用ida pro之类的反汇编程序,因为您要挂钩的函数在.so
库中定义。
例如,使用来自decryptChar()
的变量作为参数调用write()
函数,则挂钩write()
函数调用。然后,您可以打印该变量。
【讨论】:
以上是关于如何使用 Frida 在 Android 中从挂钩的本机函数中打印变量的主要内容,如果未能解决你的问题,请参考以下文章