android hook介绍

image.png

目录

第一章:android hook介绍
第二章:hook之替换View.OnClickListener
第三章:HooK之hook Notification

hook技术

Hook 又叫“钩子”,它可以在事件传送的过程中截获并监控事件的传输,将自身的代码与系统方法进行融入。

这样当这些方法被调用时,也就可以执行我们自己的代码,这也是面向切面编程的思想(AOP)。

常见Hook框架

  • Xposed
    通过替换 /system/bin/app_process 程序控制 Zygote 进程,使得 app_process 在启动过程中会加载 XposedBridge.jar 这个 Jar 包,从而完成对 Zygote 进程及其创建的 Dalvik 虚拟机的劫持。
    Xposed 在开机的时候完成对所有的 Hook Function 的劫持,在原 Function 执行的前后加上自定义代码。

  • Cydia Substrate
    Cydia Substrate 框架为苹果用户提供了越狱相关的服务框架,当然也推出了 Android 版 。
    Cydia Substrate 是一个代码修改平台,它可以修改任何进程的代码。不管是用 Java 还是 C/C++(native代码)编写的,而 Xposed 只支持 Hook app_process 中的 Java 函数。

  • Legend
    Legend 是 Android 免 Root 环境下的一个 Apk Hook 框架,该框架代码设计简洁,通用性高,适合逆向工程时一些 Hook 场景。
    大部分的功能都放到了 Java 层,这样的兼容性就非常好。

Hook需要的技术

  • 反射
  • java 的动态代理

Hook实施

尽量静态变量和单例,因为一旦创建对象,它们不容易变化,非常容易定位。
实现流程:

  1. 寻找 Hook 点,原则是尽量静态变量或者单例对象,尽量 Hook public 的对象和静态方法。
  2. 选择合适的代理方式,如果是接口可以用动态代理。
  3. 偷梁换柱——用代理对象替换原始对象。

你可能感兴趣的:(android hook介绍)