ahm*_*ani 3 android reverse-engineering frida ghidra
我正在反转这个 Android 应用程序以用于学习目的,并且该应用程序在本机层上实现了所有有趣的功能,因此我在 Arm Android Studio 映像上运行该应用程序并反转了共享库。因此该应用程序正在使用 ghidra 进行调用我设法将共享对象反编译成c,我发现了很多相互调用的函数,而且我还发现了尊重jni命名约定的函数
我可以成功挂钩任何上述导出,但是当我尝试挂钩以下函数时,我得到一个未找到的导出,如何挂钩这些本机函数?
Rob*_*ert 12
我假设你正在使用弗里达的方法Module.findExportByName。这种方式仅适用于导出的函数。然而,您发布的 Ghidra 屏幕截图中可见的方法似乎是一个甚至没有名称的内部函数。
显示的名称FUN_002d5044是由 Ghidra 生成的,因为该函数没有名称。它的基本意思是“地址 0x002d5044 处的未命名函数”。
请注意,Ghidra 中显示的地址可能还包括固定基址(命名为Image Base- 要查看它,请转到 Window -> Memory map -> Set Image Base
)。如果图像基数不为 0,则必须从显示的地址中减去该值以获得可用于挂钩的地址。
您应该能够通过使用未命名函数的地址和实现它的模块的基地址直接挂钩它。
您只需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) {
...
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7195 次 |
| 最近记录: |