android - frida hook 原生非导出函数
问题描述
我正在反转这个 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) {
...
}
});
推荐阅读
- java - 为 Spring Boot 应用程序离线生成 War 文件
- sql - 我们如何将空参数传递给 SQL 函数?
- svg - SVG 动画延迟不起作用 - 立即重复
- javascript - 在 REACT 中将 setState 设置为另一个状态值
- javascript - 将数组分成相等的两半
- php - Laravel 不返回 withInput() 表单值
- javascript - AdonisJS 迁移未在测试数据库上运行
- github-actions - 如何使用 GitHub Actions 维护 Bazel 缓存?
- javascript - PHP CKFinder 应用程序:开始过滤文本更改
- debian - apt update --allow-releaseinfo-change 在不同的 Debian 版本上