Hook

作者: 森屿暖茶 | 来源:发表于2021-04-30 11:10 被阅读0次

Hook

Hook 又叫“钩子”,它可以在事件传送的过程中截获并监控事件的传输,将自身的代码与系统方法进行融入。这样当这些方法被调用时,也就可以执行我们自己的代码,这也是面向切面编程的思想(AOP)。他是开闭原则的体现。因为我们常常会有需求想不改变原有接口的时候实现我们的需求,它使用到反射和代理完成功能需求。

Hook 选择的关键点

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

Hook 过程需要注意

     寻找 Hook 点,原则是尽量静态变量或者单例对象,尽量 Hook public 的对象和方法。

     选择合适的代理方式,如果是接口可以用动态代理。

     偷梁换柱——用代理对象替换原始对象。

     Android 的 API 版本比较多,方法和类可能不一样,所以要做好 API 的兼容工作。

例:我们hook一下view的点击事件

从图上3张图,我们就找到了hook点。

①我们进入setOnClickListener方法找到getListenerInfo()方法,发现getListenerInfo()方法返回的是一个单例对象。这里就当做我们hook备用点。

②看一下ListenerInfo对象。它持有OnClickListener对象,正好我们需要代理的接口就是OnClickListener中的onClick方法。

于是乎我们就有思路了,开干。

①通过反射拿到单例方法getListenerInfo(),执行该方法后我们得到一个ListenerInfo对象。

②我们需要用代理替换ListenerInfo中的OnClickListener对象,因为我们需要在代理里面实现我们的需求。

成果

总结

hook需要总结的点很多,特别注意的就是版本适配,因为androidAPI 版本太多,每个版本可能实现都有区别,当你hook一些方法的时候,尽可能的要把版本适配做好。

相关文章

  • 堆利用的手法:

    malloc_hook realloc_hook+free_hook free_hook unsorted_bin...

  • hook原理小结

    常用的hook方式主要有导入表hook、导出表hook和inline hook三种。 一,导入表hook 首先需要...

  • 常用油猴Hook插件

    hook cookie hook 过debugger

  • react hook 状态与操作封装

    统一hook 数组hook

  • 遍历hook Dex中的类

    创建DexFile 遍历拿出所有类名 找到类对象,进行hook hook构造函数 hook方法 打印hook方法中的日志

  • frida native hook

    本篇介绍 frida 也支持hook native,本篇看下如何hook native hook native函数...

  • HOOK

    HOOK 一、HOOK概述 HOOK(钩子) 其实就是改变程序执行流程的一种技术的统称! 二、iOS中HOOK技术...

  • Windows Hook

    Hook 关于Hook 1.1什么是Hook 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可...

  • Android 进阶解密阅读笔记17

    Hook 技术 先来说我看完这章节对 Hook 的理解。Hook 关键在于找到合适的 Hook 点(也就是需要代理...

  • off the hook表示“摆脱钩子”?

    Off the hook啥意思? Off the hook“摆脱困境”,hook表示“钩子”,off the ho...

网友评论

      本文标题:Hook

      本文链接:https://www.haomeiwen.com/subject/jbnzlltx.html