转载

玩Hook技术?这三个选择题能答对算我服你!

玩Hook技术?这三个选择题能答对算我服你!

终端研发部

关注并回复“1024”,加入技术交流群,致力于技术开发!

玩Hook技术?这三个选择题能答对算我服你!

建议先阅读《 知识总结 插件化学习 Hook系统方法分析 》,再往下看,作为下文 GC 部分的理论基础。

什么叫Hook?

Android 操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。Hook是「钩子」的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件。

通过Hook, 使它能够将自身的代码「融入」被勾住(Hook)的程序的进程中,成为目标进程的一个部分。API Hook 技术是一种用于改变 API 执行结果的技术,能够将系统的 API 函数执行重定向。在 Android 系统中使用了沙箱机制,普通用户程序的进程空间都是独立的,程序的运行互不干扰。

最近在学习Hook技术,如果你对Hook之前有所了解,不妨做一下Hook的3个相关题目!不怎么了解也没关系,这里也给你普及一下!

关于Hook的初步理解

关于Hook技术,一般是通过反射来创建动态代理,替换系统的API,实现自己的逻辑。

玩Hook技术?这三个选择题能答对算我服你!

比如通过Hook,来启动插件化的apk,其核心思想,是通过反射,将系统对象替换成我们创建的代理类对象,获得这个IActivityManager对象,也是通过反射。

具体实现步骤如下:

  • 通过反射,拿到IActivityManager对象;

  • 自定义一个代理类的调度类,它要实现InvocationHandler的invoke方法;

  • 以IActivityManager为参数,创建调度类实例;

  • 以IActivityManager和调度类实例为参数,生成一个代理类的实例;

  • 用代理类的实例,替换第一步拿到的IActivityManager对象。

最近研究Hook技术的实现规划

  • Hook的原则

  • 如何去找Hook点

  • Java 动态代理机制分析

  • App的启动流程

  • 常用的 Hook 框架

  • 使用 Java 反射实现 API Hook

  • 动态代理技术Hook掉系统的AMS服务

总结

关于Hook技术实现起来刚开始还是比较难的,需要一定的技术功底,尤其对源码比较熟悉。如果想继续深造Android学习Hook技术,可以和我一块学习!

原文  http://mp.weixin.qq.com/s/OI5YZt7oELQZbdZP1BD5jA
正文到此结束
Loading...