学习Hook之前请先多了解framework层的相关知识,反射技术,代理模式。这里不会详解!
一、Hook技术
Hook与其说是钩子,说它是劫持器更贴切,它的作用就是“欺上瞒下”。主要分两类:Hook Java,也即应用程序进程Hook,通过反射和代理实现;Hook Native,为全局Hook,通过第三方框架完成,如Xposed。通过图更能形象表述。
二、Hook技术举例
插件化技术之一启动没有注册的Activity,那么就要使用Hook技术了。Activity的启动流程这里不细讲,局部大概流程图如下
这个过程中AMS会验证Activity信息,通过之后才能允许应用程序启动该Activity。所以我们想要启动一个没在Manifest.xml中注册的activity就只能对AMS“偷梁换柱”了,将一个“完好的”activity(在Manifest.xml中注册的)给AMS做验证,验证通过之后我们再把目标Activity换回来,启动它。framework层源码我们无法直接调用,故只能Hook。“劫持”ActivityManager相应的方法把“完好的”Activity换上,然后又在应用程序的ActivityThread中Hook把目标Activity换回去启动。为方便记忆面试之用这里只讲理论流程。