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

36 篇文章 0 订阅
12 篇文章 0 订阅

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


在安卓应用程序的逆向工程和安全审计过程中,经常需要对应用程序中的特定类的实例进行操作。然而,有时候我们无法直接获取到目标实例的引用,这时候就需要使用一些技巧来动态地选择实例。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 方法时,我们需要注意确保选择的实例符合预期,并且避免对不相关的实例进行操作,以避免造成不必要的影响。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值