【逆向】深入了解 Frida 中的 Java.choose 方法:动态选择实例


枕着光的她往前走
路上难免风吹雨打
叫上一声老伴啊 便有人应答
她就晓得 到了家
                     🎵 任素汐《枕着光的她》


在安卓应用程序的逆向工程和安全审计过程中,经常需要对应用程序中的特定类的实例进行操作。然而,有时候我们无法直接获取到目标实例的引用,这时候就需要使用一些技巧来动态地选择实例。Frida 提供了 Java.choose 方法来帮助我们实现这一目的。在本文中,我们将介绍 Java.choose 方法的使用,并通过一个具体案例来演示其功能。

什么是 Java.choose 方法?

Java.choose 方法是 Frida 中用于动态选择特定类实例的函数。通过 Java.choose 方法,我们可以在运行时遍历所有符合条件的类实例,并对其进行操作。这对于那些无法直接获取到实例引用的场景非常有用。

使用 Java.choose 方法的案例

假设我们有一个安卓应用程序,其中包含一个 MainActivity 类,我们想要通过 Frida 修改该类中的一个成员变量。然而,由于某种原因,我们无法直接获取到 MainActivity 实例的引用。这时候,就可以使用 Java.choose 方法来动态选择实例并进行操作。

下面是一个具体的案例:

// 原生代码
public final void setNum(int i) {this.num = i;}
public static final void m25onCreate$lambda0(MainActivity this$0, TextView key, View view) {Intrinsics.checkNotNullParameter(this$0, "this$0");Intrinsics.checkNotNullParameter(key, "$key");MainActivity mainActivity = this$0;this$0.jntm(mainActivity);key.setText(String.valueOf(this$0.num));if (this$0.check() == 999) {Toast.makeText(mainActivity, "快去论坛领CB吧!", 1).show();key.setText(this$0.decrypt("hnci}|jwfclkczkppkcpmwckng\u007f", 2));}}
public final int check() {int i = this.num + 1;this.num = i;return i;}

主动调用代码如下:

Java.perform(function () {Java.choose("com.zj.wuaipojie2023_3.MainActivity", {onMatch: function (instance) {console.log("Found instance: " + instance);// 对 MainActivity 实例进行操作,例如设置成员变量的值instance.setNum(990);},onComplete: function () {console.log("Scan over");}});
});

在这个案例中,我们首先调用了 Java.choose 方法,并传入了目标类的名称作为参数。然后,我们通过 onMatch 回调函数对每个匹配的实例进行处理。在回调函数中,我们可以执行任意操作,例如修改实例的成员变量值。最后,通过 onComplete 回调函数,我们可以在遍历结束后执行一些清理操作。

结语

Java.choose 方法是 Frida 中非常有用的函数,可以帮助我们动态选择特定类实例并进行操作。通过 Java.choose 方法,我们可以在运行时对应用程序的特定实例进行操作,而不需要直接获取到实例的引用。然而,在使用 Java.choose 方法时,我们需要注意确保选择的实例符合预期,并且避免对不相关的实例进行操作,以避免造成不必要的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在linux中查询运行日志的方法

在Linux中查询之前的运行日志,可以通过多种方式,具体取决于你想要查询的日志类型(如系统日志、应用程序日志等)以及你的系统配置。以下是一些常用的方法: 1. 使用journalctl命令(Systemd系统) …

软件测试知识面试题:白盒测试、黑盒测试、测试用例

文章目录 白盒测试1、白盒测试分两类2、白盒测试的四个原则3、白盒测试常用的7类测试 黑盒测试1、黑盒测试的优缺点2、黑盒测试的方法3、黑盒测试的原则 测试用例1、测试用例包含2、设计测试用例所需的文档资料3、采用白盒测试技术设计用例的目的4、采用黑盒测试技术设计用例的…

InnoDB数据页结构---页目录 PageDirectory

InnoDB为了不同的目的而设计了许多种不同类型的页,比如存放表空间头部信息的页,存放Insert Buffer信息的页,存放INODE信息的页,存放undo日志信息的页等等等等。本文聚焦的是那些存放我们表中记录的那种类型的页,官方称…

ChatGPT提问技巧:可解释的软提示

ChatGPT提问技巧:可解释的软提示 可解释的软提示是一种既能控制模型生成的文本,又能为模型提供一定灵活性的技术。 具体做法是为模型提供一组受控输入和一些有关所需输出的附加信息。这种技术可以使生成的文本更具可解释性和可控性。 提示示例及其公式…

【计算机网络】————集线器

集线器(HUB)是一种计算机网络设备,用于连接多个计算机或其他网络设备并将它们组成一个局域网。通常是一个小型的硬件设备,包括多个网口,并使用电缆将这些网口连接到其他的网络设备上。 特点 物理层设备: …

python模拟百度网盘(1)

实现服务器与客户端的简单通信 服务器代码 import socket def tcp_server():ssocket.socket(socket.AF_INET,socket.SOCK_STREAM)#tcp的socket, 开启一个缓冲区addr("192.168.0.106",2000)s.bind(addr)s.listen(128)#同时可以往缓冲区中放入的连接数new_client, c…

edm邮件是什么意思:与普通邮件有何不同?

edm邮件是什么意思?如何优化邮件内容以提高转化率? edm邮件因其独特的营销价值而备受关注。那么,edm邮件究竟是什么意思呢?它与普通邮件又有哪些不同呢?下面,AokSend就来为大家介绍一下。 edm邮件的概念与…

【SpringCloud微服务实战07】Sentinel 服务保护

Sentinel 是阿里巴巴开源的一款微服务流量控制组件。主要作用: 流量控制:避免因瞬间高并发流量而导致服务故障流。超时处理、线程隔离、降级熔断:避免因服务故障引起的雪崩问题。一、Sentinel 安装 1、安装Sentinel控制台,下载jar包并启动:Releases alibaba/Sentinel G…

VUE2改变数组对象的方法($set)

需求:vue中数组或者对象的长度无法监听时,需要实时刷新数据 思路:通过$set方法实现数据监听 //改变数组 1.全局方法(不常用) Vue.set(vm.items, indexOfItem, newValue) //Vue.set(数组名字, 改变的索引位置, 需要更改的值) // Vue.set(arr,…

基于大数据的商业模式创新研究

目录 一、导论 2 (一)研究背景 2 (二)研究意义 2 (三)研究内容 3 (四)研究思路与研究方法 4 (五)国内外研究现状 6 二、大数据的界定与应用概况 7 &#xff…

python cffi模块笔记

20240312 本次尝试使用cffi想要实现将嵌入式一段代码图形化,python编译器运行的时候还很正常,打包后发现总报错,内容如下: fatal error C1083: 无法打开包括文件: “Python.h”: No such file or directory Traceback (most re…

ubuntu源码安装nginx

安装依赖项 首先,确保安装了编译Nginx所需的依赖项。打开终端并运行以下命令: sudo apt-get update sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev下载Nginx源码 因Ubuntu的openssl版本太新,…

RPC基础知识回顾

RPC基础知识回顾 1、先认识一下大家熟悉的HTTP 大家都了解HTTP吧。相信项目中也用过一些。 比如: JDK自带的老旧的HttpURLConnection,封装写的很累,java8之前基于HTTP1.0。在java9开始支持Http2.0Spring的其中RestTemplate都是基于HTTP/1.1的请求。最新的还有Sp…

Transformer家族

在《Transformer原理》中我们介绍了,现在很多大模型都是基于Transformer,其中最出名就是GPT和BERT模型,在GPT和BERT模型被提出来之后,NLP领域也出现了基于Transformer结构的模型,按照模型结构基本可以分为三类&#xf…

MyBatis3源码深度解析(十)MyBatis常用工具类(三)MetaObjectMetaClass

文章目录 3.4 MetaObject3.5 MetaClass 3.4 MetaObject MetaObject是MyBatis提供的反射工具类,可以方便地获取和设置对象的属性值。 该工具类在MyBatis源码中出现的概率非常高。 假设有两个实体类:用户信息User和订单信息Order,一个用户可…

HCIA-Datacom题库(自己整理分类的)_50_路由判断【11道题】

1.以下两条配置命令可以实现路由器RTA去往同一目的地10.1.1.0的路由主备备份。√ [RTA]ip route-static 10.1.1.0 24 12.1.1.1 Permanent [RTA]ip route-static 10.1.1.0 24 13.1.1.1 2.动态路由协议能自动适应网络拓扑的变化。√ 3.如图,只需要在AR1上配置静态…

嵌入式中要能看懂这50个电路分享

大家好,今天主要给大家分享一下,嵌入式工程师常见的硬件电路。 单片机 电源 声音模块 收音机 485 蓝牙 光耦 can 光敏电阻 单片机 矩阵 单片机电路 时钟 ADC 接口电路 红外发射 显示模块 红外接收 蜂鸣器驱动 流水灯 usb供电 烧录电路 数码管 EEPROM LCD…

为何读了这么多书,依然不知道怎么过好一生?

我们从小到大都在不断学习,读书,工作,生活,却仍然困惑如何过好这一生?那是因为知识和智慧之间有很大的差别。 第一、实践是知识转化为智慧的关键 首先,学习不仅仅是汲取知识的过程,更重要的是…

Docker 搭建 Nacos 集群教程

随着微服务架构的流行,服务注册和发现成为了构建分布式系统的关键组成部分。Nacos 是阿里巴巴开源的服务发现、配置管理和服务管理平台,它提供了注册中心和配置中心的功能,能够轻松地管理微服务的注册与发现,以及动态配置的管理。…

lnmp环境部署-im

安装nginx 配置nginx源 vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key module_hotfixestrue安装nginx yum …