Android之Hook入门讲解

目录1.Hook是做什么的?(解决什么问题?)2.HOOK技术如何改变API执行结果的?3.使用Hook技术需要有实现Java反射和阅读源码的能力3.1Java反射3.2SDK源码4.Hook实现的通用思路5.Hook拦截点击事件加入统计点击次数5.1确认需要hook操作对象OnClickListener实现的实例5.2获取要hook干涉执行逻辑的拥有者(ListenerInfo对象);5.3创建(hook对象)OnClickListener类实例代理类,在代理.
摘要由CSDN通过智能技术生成

目录

 

1.Hook是做什么的?(解决什么问题?)

2.HOOK技术如何改变API执行结果的?

3.使用Hook技术需要有实现Java反射和阅读源码的能力

3.1Java反射

3.2SDK源码

4.Hook实现的通用思路

5.Hook拦截点击事件加入统计点击次数

5.1确认需要hook操作对象OnClickListener实现的实例

5.2获取要hook干涉执行逻辑的拥有者(ListenerInfo对象);

5.3创建(hook对象)OnClickListener类实例代理类,在代理类内加入自己代码;

6.其他


1.Hook是做什么的?(解决什么问题?)

API HOOK百度百科解释如下:

API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等。 API HOOK 技术并不是计算机病毒专有技术,但是计算机病毒经常使用这个技术来达到隐藏自己的目的。

Hook可以帮助我们在Android中在SDK源代码逻辑执行过程中,通过代码手动拦截执行该逻辑,加入自己的代码逻辑;

例如常见的一些业务统计功能或者方法执行的性能监测功能我们都可以通过Hook技术进行拦截加入自己代码逻辑;

以前都是通过友盟,百度创建ID和描述,需要开发将事件记录一个一个加入到需要统计的点上,很容易出现漏记的情况,修改需要重新发包;在APP开发过程中通常需要统计用户点击了那些按钮,页面的打开关闭,页面停留时长都可以通过Hook技术大大减小开发工作量和出错率;

2.HOOK技术如何改变API执行结果的?

最初有些人对某些api函数的功能不太满意,就产生了如何修改这些api,使之更好的服务于程序的想法,这样api hook就自然而然的出现了。

HOOK技术的难点,并不在于hook技术,而在于对SDK源码的学习和理解,找到使用HOOK的入口函数,进行拦截然后加入自己的代码;

3.使用Hook技术需要有实现Java反射和阅读源码的能力

3.1Java反射

Java反射常用类Class,Method,Field等;

SDK源码类有很多用@hide被隐藏的方法,成员,类无法直接访问,需要通过反射访问方法,成员,类等;

TextView
/**
     * @return the size (in scaled pixels) of thee default text size in this TextView.
     * @hide
     */
    @ViewDebug.ExportedProperty(category = "text")
    public float getScaledTextSize() {
        return mTextPaint.getTextSize() / mTextPaint.density;
    }

3.2SDK源码

需要阅读SDK源码找到入口函数,这样才能通过Hook技术进行拦截,添加自己的代码逻辑;当追踪源码时经常看见SDK源码大面积飘红;

所以,推荐从安卓官网下载整套源码,然后使用 SourceInsight 查看源码。
如果不需要跳来跳去的话,直接用 安卓源码网站 一步到位

4.Hook实现的通用思路

无论多么复杂的逻辑,当我们需要干涉执行,最终都是需要将自己的代码逻辑替换干涉执行的逻辑

a.确认需要hook操作

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值