(frida小记) 02 内部类hook

内部类hook

内部类的分类

  • 成员内部类,作为一个类成员,可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。
  • 局部内部类,作用域在一个方法或者一个作用域里面的类,就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。
  • 匿名内部类,没有构造器的类,大部分匿名内部类用于接口回调。匿名内部类在编译的时候由系统自动起名为Outter$1.class。一般来说,匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。匿名内部类也是不能有访问修饰符和static修饰符的。
  • 静态内部类,类似成员内部类,只是声明为static,是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法。

内部类示例

//内部类
class UserAsserts{
    public String getRMB() {
        return RMB;
    }

    public void setRMB(String RMB) {
        this.RMB = RMB;
    }

    public String getDollar() {
        return Dollar;
    }

    public void setDollar(String dollar) {
        Dollar = dollar;
    }

    String RMB;
    String Dollar;
}

这是内部类作为类成员的一种情况

hook示例

此时内部类必须依存于外部类,也就是必须先实例化这个外部类才能使用这个“类成员”内部类
外部类想要调用成员内部类的类成员方法时,必须先获取这个内部类的实例

//hook内部类
function hooktest5(){
    var assertsObj=Java.use("com.alex.javahooktarget.MyUser$UserAsserts");
    assertsObj.setRMB.implementation=function(str){
        console.log("Hook 到 setRMB,传参:",str);
        this.setRMB("hooked!!!");
    }

    assertsObj.setDollar.implementation=function(str){
        console.log("Hook 到 setDollar,传参:",str);
        this.setDollar("23333333333");
    }
}

//hook static内部类
function hooktest6(){
    var staticClsObj=Java.use("com.alex.javahooktarget.MyUser$static_inner_cls");
    staticClsObj.setEducation.implementation=function(str){
        console.log("Hook 到 setEducation,传参:",str);
        this.setEducation("hooked!!!");
    }
}

//hook 局部内部类,这个Hook提示找不到类……
function hooktest7(){
    var sub2ClsObj=Java.use("com.alex.javahooktarget.MyUser$Sub2");
    sub2ClsObj.setGreeting.implementation=function(str){
        console.log("Hook 到 setGreeting,传参:",str);
        this.setGreeting("hooked!!!");
    }
}

//hook 匿名类
function hooktest6_1(){
    Java.perform(function(){
        var nimingClsObj=Java.use("com.alex.javahooktarget.MyUser$1");
        nimingClsObj.sayYeah.implementation=function(){
            console.log("Hook 到 sayYeah");
            this.sayYeah();
        }
    })
}

要注意内部类的表示方法,是Class$inner$inner
原理上是可以有无限嵌套的内部类的。。
匿名类一般是$1或者$2345……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值