(frida小记) 01 构造函数及重载函数的hook

frida的安装和配置暂略

构造函数的hook

function hooktest(){
    var mUser=Java.use("com.alex.javahooktarget.MyUser");
    mUser.$init.overload().implementation=function(){
        console.log("进入MyUser构造函数");
        this.$init();
    }
}

在这种条件下注入会发现,一开始点击按钮发现,console并没有出现预期的输出,原因是:
在这个MainActivaty开始的时候已经new了一个MyUser对象,就是说已经调用过构造方法了,这个第一次调用的构造方法并没有Hook上,而SubUser对象继承了MyUser对象,当new一个SubUser对象的时候,会调用父类MyUser的构造方法,这时就可以看到Hook的输出了。

hook重载方法

//Hook重载函数
function hooktest2(){
    var subUser=Java.use("com.alex.javahooktarget.SubUser");
    subUser.greeting.overload().implementation=function(){
        var retval=this.greeting();
        console.log("ret: ",retval);
        return "Hooked "+retval;
    }
}

function main(){
    Java.perform(function(){
        hooktest();
        hooktest2();
    })
}

setImmediate(main);

要记得main函数里的调用……还有setImmediate……

hook无参构造

//hook无参数的构造函数
function hooktest3(){
    //获取要hook的那个类的实例
    var userObj=Java.use("com.alex.javahooktarget.MyUser");
    userObj.$init.overload().implementation=function(){
        console.log("Hook 到 MyUser无参构造函数");
        this.$init();//注意这里使用的是当前这个实例化的对象this
    }
}

hook有参构造

//hook有参数的构造方法
function hooktest4(){
    var userObj=Java.use("com.alex.javahooktarget.MyUser");
    userObj.$init.overload('java.lang.String','java.lang.String','int').implementation=function(str1,str2,int){
        console.log("Hook 到 MyUser有参构造函数");
        console.log(str1,str2,int);
        this.$init(str1,str2,int);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值