我正在反转这个 android 应用程序以用于学习目的,并且该应用程序在本机层上实现了所有有趣的功能,因此我在 arm android studio 映像上运行该应用程序并反转了共享库。所以该应用程序正在使用 ghidra 进行调用我设法将共享对象反编译成c,我发现了很多相互调用的函数,我还发现了尊重jni命名约定的函数
我可以成功地挂接上述任何导出,但是当我尝试挂接以下函数时,我得到一个导出未找到我如何挂接这些本机函数?
我正在反转这个 android 应用程序以用于学习目的,并且该应用程序在本机层上实现了所有有趣的功能,因此我在 arm android studio 映像上运行该应用程序并反转了共享库。所以该应用程序正在使用 ghidra 进行调用我设法将共享对象反编译成c,我发现了很多相互调用的函数,我还发现了尊重jni命名约定的函数
我可以成功地挂接上述任何导出,但是当我尝试挂接以下函数时,我得到一个导出未找到我如何挂接这些本机函数?
我假设你正在使用 frida 的方法Module.findExportByName
。这种方式仅适用于导出的函数。但是,您发布的 Ghidra 屏幕截图中可见的方法似乎是一个甚至没有名称的内部函数。
显示的名称 likeFUN_002d5044
由 Ghidra 生成,因为该函数没有名称。它基本上意味着“地址 0x002d5044 处的未命名函数”。
请注意,Ghidra 中显示的地址可能还包括一个固定的基地址(名为Image Base
)。如果 Image base 不为 0,则必须从显示的地址中减去此值以获取可用于挂钩的地址。
您应该能够通过使用它的地址和实现它的模块的基地址直接挂钩一个未命名的函数。
您只需moduleName
在以下代码中插入正确的:
const moduleName = "insert module name here";
Interceptor.attach(Module.findBaseAddress(moduleName).add(0x002d5044), {
onEnter: function(args) {
...
}
});