Hook简介
微软的MSDN中,对Hook的解释为:A hook is a point in the system message-handling mechanism where an application can install a subroutine to monitor the message traffic in the system and process certain types of messages before they reach the target window procedure.
微软只是简单的将Hook解释为一种过滤(或叫挂钩)消息的技术。
我们这里讲解的Hook,简单解释为:挂钩,挂钩一切事物。包含微软的解释。
挂钩的事物通常指的是函数。
Hook 目的:
过滤一些关键函数调用,在函数执行前,先执行自己的挂钩函数。达到监控函数调用,改变函数功能的目的。
移动端的hook技术应用
可能前面讲的不是很透彻,通过后面的实例应该会更清晰。
1. what is Hook 技术(移动端)
Hook技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单的来说,就是把系统的程序拉出来变成我们自己执行代码片段。
要实现钩子函数,有两个步骤:
利用系统内部提供的接口,通过实现该接口,然后注入进系统(特定场景下使用)
动态代理(使用所有场景)。
2.Hook技术实现的步骤
Hook 技术实现的步骤分两步:
找到hook点(Java层),该hook点必须满足以下的条件:需要hook的方法,所属的对象必须是静态的,因为我们要通过反射来获取对象,我们获取的是系统的对象,不能够new一个对象,必须用系统创建的那个对象,所以只有静态的才能保证和系统的对象一致。
将hook方法放到系统之外执行(放入我们自己的逻辑)
3.在移动开发中的应用:
3.1 使用 hook 技术实现免注册式跳转
上面的图,有一个MainActivity,四个按钮,前三个是打开不同的Activity,最后一个是退出登录,这三个Activity其中界面2是不需要登陆的,界面3和界面4都是需要登录才能看到。
既然要在打开Activity之前就判断是否登录,要使用hook技术,接下看分析一下源码,hook就是startActivity的方法。
找Hook点