You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Frida创建抽象Java类实例并仅对该实例重写方法?

仅重写抽象类单个实例方法的Frida实现方案

你之前的写法会影响所有AbstractClass实例,因为Java.use('AbstractClass')获取的是类的原型对象,修改它的方法实现会作用于所有该类的实例,包括后续创建的新实例。以下是两种只针对单个实例重写方法的正确实现方式:

方法一:创建动态子类(模拟匿名内部类)

这种方式和Java的匿名内部类逻辑一致,通过Frida的Java.registerClass创建AbstractClass的子类,仅在子类中重写目标方法,后续实例化这个子类即可得到独立的、方法被重写的实例,原类的其他实例不受影响。

// 注册AbstractClass的动态子类
const CustomAbstractSubclass = Java.registerClass({
    name: 'com.yourpackage.CustomAbstractSubclass', // 自定义类名,注意包名避免冲突
    superClass: Java.use('AbstractClass'),
    methods: {
        OverrideCallback: {
            returnType: 'void',
            argumentTypes: [],
            implementation: function () {
                console.log('仅当前实例触发:intercepted');
                // 如需调用父类原方法,取消下面注释:
                // this.$super.OverrideCallback();
            }
        }
    }
});

// 创建子类实例,该实例的方法是重写后的
const targetedInstance = CustomAbstractSubclass.$new();
targetedInstance.OverrideCallback(); // 输出:仅当前实例触发:intercepted

// 原类的实例不受影响
const normalInstance = Java.use('AbstractClass').$new();
normalInstance.OverrideCallback(); // 执行原方法,无自定义输出

方法二:针对已有实例的方法拦截

如果已经有一个现成的AbstractClass实例(比如从内存中获取的对象),可以通过Interceptor.attach直接拦截该实例的方法地址,实现仅修改单个实例的方法逻辑。

const acClass = Java.use('AbstractClass');
// 创建目标实例
const targetedInstance = acClass.$new();

// 获取该实例的OverrideCallback方法的内存地址
const methodHandle = targetedInstance.OverrideCallback.handle;

// 仅拦截该实例的方法调用
Interceptor.attach(methodHandle, {
    onEnter(args) {
        console.log('仅当前实例触发:intercepted');
    },
    onLeave(retval) {
        // 可根据需求修改返回值,这里方法是void类型所以无需处理
    }
});

targetedInstance.OverrideCallback(); // 输出:仅当前实例触发:intercepted

// 新创建的原类实例不受影响
const normalInstance = acClass.$new();
normalInstance.OverrideCallback(); // 执行原方法,无自定义输出

适用场景说明

  • 方法一适合主动创建实例并自定义方法的场景,逻辑清晰,和Java匿名内部类的写法对齐。
  • 方法二适合已有实例的修改场景,无需创建子类,直接针对目标实例做拦截。

内容的提问来源于stack exchange,提问作者5andr0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:17:31