最近,有粉丝问我hooker如何获取对象内部属性数据。
无论是a、b、c命令扫描出来的对象,还是你hook脚本hook方法对应的所属对象都有办法获取内部属性数据。
关键条件:ObjectId!!!大家一定要搞到你要窥视这个对象的ObjectId。
abc命令扫描的对象,都会自动生成ObjectId。以a命令扫描Activity为例
hook脚本默认不会给你ObjectId,这时候你要手动把对象放入ObjectStore当中。
上面是hook某个对象的构造方法,我们把new之后的对象放到ObjectStore中。
如果这个方法有参数,并且是对象我们也可以将参数放到ObjectStore中。
各种情况看你怎么用,天下无招胜有招。我不能说只有这两种方式,有N多种。看你是否能领悟到hooker设计的强大之处,活学活用吧!
上面两个方法,随便你用什么方法。只要获取到ObjectId就ok。
通过ObjectId,获取对象内部属性有两种方式。
c命令,以最快捷的方式打印对象
如果你确定一个对象是View的子类,可以用v命令扫描。v命令将会带出绑定的时间,如点击、滑动、长按、初始化等等
这里我不展示了,大家感兴趣自己是实践!
不吹牛逼,不刷屏,脚踏实地做事情!
https://github.com/CreditTone/hooker
Java.perform(function() {
var HookedClass
=
Java.use(
'com.xxx.bbb.xxx.GoodsDetailResult$Data'
);
var setProductDetailMethod
=
HookedClass.setProductDetail.overload(
'com.xxx.bbb.bean.ProductDetail'
);
setProductDetailMethod.implementation
=
function(v0) {
var executor
=
this.hashCode();
var beatText
=
'public void com.xxx.bbb.xxx.GoodsDetailResult.setProductDetail(com.xxx.bbb.bean.ProductDetail)'
;
var beat
=
newMethodBeat(beatText, executor);
setProductDetailMethod.call(this, v0);
/
/
hook对象的普通方法将参数对象放到ObjectStore中
storeObjectAndLog(v0);
/
/
这里还是可以将方法本身的对象this放到ObjectStore,不一定得hook在上面的构造方法,活学活用!!!明白?
storeObjectAndLog(this);
printBeat(beat);
};
});
Java.perform(function() {
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-4-27 18:00
被爬虫不看学历编辑
,原因: