使用frida获取jni动态注册函数的地址

本文介绍了如何使用frida来获取Android应用中JNI动态注册函数的地址。通过hook dvmCallJNIMethod而不是RegisterNatives,因为所有native函数都通过dvmCallJNIMethod调用。详细步骤包括解析Method结构体获取函数信息,以及编写frida js脚本来实现hook,并成功获取特定native函数doCommandNative的地址。
摘要由CSDN通过智能技术生成

众所周知,frida是一款跨平台的(适用于Windows,Android,IOS等等)的Hook框架,由于其使用的是ptrace注入方法,所以相比于Xposed框架,优点是Hook代码写完或修改后,不需要重启手机。由于使用的是js,python脚本语言,所以支持代码热更新(更新Hook代码时不需要重启应用)。

而我这次使用frida目的是获取Android应用里jni动态注册函数的地址,大家都知道,jni注册native函数有两种:一种是静态方式(通过函数名称来匹配);而另一种就是动态注册(通过env->RegisterNatives函数),所以可以通过hook RegisterNatives函数来获取所有动态注册的native函数地址,但是由于我不知道如何用frida来找到RegisterNatives的地址,所以没有选择hook这个函数(如果有同学知道,可以告诉我。。)

我选择的是hook dvmCallJNIMethod,因为native层函数都是通过dvmCallJNIMethod函数来调用的(参考android源码),所以hook这个函数也可以达到我们的目的。

dvmCallJNIMethod的定义如下:

void dvmCallJNIMethod(const u4* args, JValue* pResult, const Method* method, 
Frida是一款强大的应用程序动态分析工具,可以用于拦截和修改应用程序的行为。以下是一些步骤,可以使用Frida获取应用程序获取用户隐私信息的行为。 1. 在PC上安装Frida工具和Python环境,可以使用pip来安装Frida库。 2. 在手机上安装Frida-Server,并启动它。 3. 使用Frida-Client连接到Frida-Server: ``` frida -U -f com.example.app --no-pause ``` 其中,com.example.app是要检测的App的包名。 4. 使用Frida-Script编写Hook脚本,拦截和修改应用程序的行为。以下是一个可以检测应用程序获取用户隐私信息的示例脚本: ```javascript Java.perform(function() { var Context = Java.use('android.content.Context'); Context.getSystemService.implementation = function(serviceName) { // 拦截系统服务的获取,检查是否获取了隐私相关的服务 if (serviceName === 'phone' || serviceName === 'telephony' || serviceName === 'sms' || serviceName === 'location') { // 记录获取隐私服务的行为 console.log('应用程序获取隐私服务:', serviceName); } // 继续正常获取系统服务 return this.getSystemService(serviceName); }; }); ``` 在这个示例脚本中,我们使用了Java.perform()来获取Context类,并重写了它的getSystemService()方法。在重写方法中,我们检查是否获取了名为'phone'、'telephony'、'sms'、'location'等隐私相关的系统服务,如果获取了,则记录下来。 当应用程序获取系统服务时,这个Hook脚本就会被触发,如果服务名称是隐私相关的,则会输出一条日志,记录下应用程序获取隐私服务的行为。 需要注意的是,这个过程需要一定的技术和经验,如果您不确定如何做或者没有相关的技术背景,建议寻求安全专家的帮助。同时,为了保护用户隐私,不要将这些技术用于非法活动。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值