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