android - frida hook 本地非导出函数

标签 android reverse-engineering frida ghidra

出于学习目的,我正在逆向这个 android 应用程序,该应用程序在 native 层上实现了所有有趣的功能,所以我在 arm android studio 图像上运行了该应用程序并逆向了共享库。所以该应用程序正在调用,使用 ghidra 我设法将共享对象反编译为 c,我发现很多函数可以相互调用,我还发现了遵守 jni 命名约定的函数

我可以成功挂接上述任何导出,但是当我尝试挂接以下函数时,我得到一个未找到的导出如何挂接这些 native 函数?

最佳答案

我假设您正在使用 frida 的方法 Module.findExportByName。这种方式仅适用于导出的函数。然而,在您发布的 Ghidra 屏幕截图中可见的方法似乎是一个甚至没有名称的内部函数。

显示的名称如 FUN_002d5044 是由 Ghidra 生成的,因为该函数没有名称。它基本上意味着“地址 0x002d5044 处的未命名函数”。

请注意,Ghidra 中显示的地址可能还包含一个固定基地址(名为 Image Base - 要查看它,请转到 Window -> Memory map -> Set Image Base Ghidra Image Base "house" icon )。如果图像基数不是 0,则必须从显示的地址中减去该值以获得可用于 Hook 的地址。

你应该能够通过使用它的地址和实现它的模块的基地址直接 Hook 一个未命名的函数。

您只需在以下代码中插入正确的moduleName:

const ghidraImageBase = 0x00040000; // example value get the real value in Ghidra from Window -> Memory map -> Set Image Base
const moduleName = "insert module name here";
const moduleBaseAddress = Module.findBaseAddress(moduleName);
const functionRealAddress = moduleBaseAddress.add(0x002d5044 - ghidraImageBase);
Interceptor.attach(functionRealAddress), {
                   onEnter: function(args) {
                       ...
                   }
});

关于android - frida hook 本地非导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68332781/

相关文章:

java - 如何使用Socket从 Node 服务器获取数据?

android - 如何使自定义 ListView 像附加图像一样

javascript - 如何调用Frida Gadget(JavaScript API iOS)中的方法?

c++ - 如何 Hook 导出功能不可用的Native进程?

encoding - 解密MMORPG协议(protocol)编码

python - Frida python 将输出重定向到文件

android - Frida 打印类中的所有变量

Android Studio 更新导致错误

JAVA获取嵌套在JSONObject中的Byte[]

reverse-engineering - 您可以对指向 Application Insights 的 Saved Query 链接进行逆向工程吗?