学习笔记-组件和事件hook核心原理和案例

组件和事件的hook核心原理和案例

0x01 构造方法的hook的例子(java.lang.String这个随便哪个类都行)

#构造方法的hook
Java.use("java.lang.String").$init.implementation=....
#构造方法的主动调用
Java.use("java.lang.String").$new("YenKoc")

0x02 显示类的方法和变量 上一节课使用的是wallbreaker这个插件,直接命令行就能输出,还可以找出对象以及类的信息,还可以搜索对象实例,根据objection的源码来看,其实也就是frida的一个枚举类的hook,然后封装起来的。frida本质操作对象还是对类为基本对象进行操作的。

0x03 组件hook 这里也是按objection的源码去理解,在看视频的途中,我也发现了其实写frida hook其实也就是调用系统的api,最终还是写开发的代码,只不过平常我们写java开发是直接调用现成的一些系统jar,frida的话,是通过hook的方式操作。

objection中如何通过android intent lanuch_activity xxx.mainActivity启动活动(界面) 还给出了个打印intent信息的脚本

Java.perform(function(){
var Activity=Java.use("android.app.Activity");
Activity.startActivity.overload("android.content.Intent").implementation=function(p)
{
console.log("Hooking android.app.Activity.startActivity(p1) successfully,p1="+p1);
console.log(decodeURIComponent(p1.toUri(256)));
this.startActivity(p1);
}
Activity.startActivity.overload("android.content.Intent","android.os.Bundle").implementation=function(p1,p2)
{
console.log("Hooking android.app.Activity.startActivity(p1,p2) successfully,p1="+p1,",p2="+p2);
console.log(decodeURIComponent(p1.toUri(256)));
this.startActivity(p1);
}
Activity.startService.overload("android.content.Intent").implementation=function(p1){
console.log("Hooking android.app.Activity.startService(p1) successful.p1="+p1);
console.log(decodeURIComponent(p1.toUri(256)));
this.startService(p1);
}
})

接下来是讲解如何去hook,按钮点击时间的onClick方法的hook,这样可以打印出对应的类名,肉丝说一般的开发都不可能是使用直接实现ViewOnClick这个接口,创建匿名类的手法,这样很乱,我直接踩雷,好像平时也都是这样去写,可能是控件还不够多2333. 这里挂一下hook 打印出onClick方法的类的类名 ``` function watch(obj,mtdName) { var listener_name=getObjClassName(obj); var target=Java.use(listener_name); if(!target||!mtdName in target) { return; } target[mtdName].overloads.forEach(function(overload){ overload.implementation=function(){ console.log(“[WatchEvent]”+mtdName+“:”+getObjClassName(this)); return this[mtdName].apply(this.argument); }

})

} function OnClickListener() { Java.perform(function(){ #以spawn的模式自启动的hook Java.use(“android.view.View”).setOnClickListener.implementation=function(listener){ if(listener!=null) { watch(listener,“onClick); } return this.setOnClickListener(listener); }; #attach模式去附加进程的hook,就是更慢的hook,需要看hook的时机,hook一些已有的东西 Java.choose(”android.view.ViewListenerInfo”,{ onMatch:function(instance){ instance=instance.mOnClickListener.value; if(instance) { console.log(“instance name is”+getObjClassName(instance)); watch(instance,“onClick); } }, onComplete:function(){

}
})
})

} watch这个函数,相等于是将实现点击接口类的所有onClick方法重载都hook了,只要调用这个方法就会打印出该类的名字

点击关注,共同学习!
[安全狗的自我修养](https://mp.weixin.qq.com/s/E6Kp0fd7_I3VY5dOGtlD4w)


[github haidragon](https://github.com/haidragon)


https://github.com/haidragon

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C-haidragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值