美文网首页
插件化—Hook-代理

插件化—Hook-代理

作者: 烬日沉香 | 来源:发表于2018-12-08 00:57 被阅读110次

1.什么是Hook?

hook英文翻译为钩子。
简单来说,hook技术就是劫持应用程序本要执行的对象或者方法,将其替换成你想要执行的。
如何实现hook技术,主要是通过反射和代理。
关于反射,大家都很熟悉,今天主要讲一下代理。

2.代理模式

代理这个词相信大家很熟悉,联想一下代购。A想要买SKII的神仙水,委托B去免税店买,B买到后寄给A,A就买到了神仙水。
代理模式的定义:给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。


image.png

从编码角度,代理模式分为静态和动态两种方式。静态代理是在代码运行前就已经存在了代理类的class文件,而动态代理则是在代码运行期间,通过反射来动态生成代理类的对象,以及让它去代理谁。

2.1静态代理

interface Shop {
    fun  buySKII()
}
class A :Shop {
    override fun buySKII() {
        System.out.println("A 买到SKII")
    }
}

class B :Shop {
    var a:Shop
     constructor(a:Shop){
        this.a=a
    }
    override fun buySKII() {
        System.out.println("B 去免税店购买")
        a.buySKII()
    }
}
 private fun  mainStatic(){
        //创建A
        val a= A()
        //创建代理类
        val b= B(a)
        //购买
        b.buySKII()
    }

2.2动态代理

A.kt 和Shop.kt类可以保持不变,重写代理人B为动态代理方式

class DyB :InvocationHandler {
   private var any:Any
    constructor(any:Any){
        this.any=any
    }
    @Throws(Throwable::class)
    override fun invoke(proxy: Any?, method: Method?, args: Array<Any>?): Any? {
        if (method?.name.equals("buySKII")){
            System.out.println("B 去免税店购买")
        }
        val result=method?.invoke(any, *(args?: arrayOfNulls(0)))
        return result
    }
}
 fun  mainDynamic(){
        //创建A购买者
        val a=A()
        //创建B代理类,持有a的对象
        val dyB=Dy(a)
        //类加载器
        val  loader=a.javaClass.classLoader
        //动态加载代理类  shop的buy方法会调用byB的invoke方法,
        val  shop=Proxy.newProxyInstance(loader, arrayOf(Shop::class.java),dyB) as Shop
        shop.buySKII()

    }

小结

1.hook可以劫持对象,写一个代理对象,通过hook的方式来劫持,我们就可以在代理对象中做一些自己设计的内容。
(如同上文代购的例子,B去免税店可以买很多东西,神仙水只是一部分而已。)

相关文章

  • 插件化—Hook-代理

    1.什么是Hook? hook英文翻译为钩子。简单来说,hook技术就是劫持应用程序本要执行的对象或者方法,将其替...

  • 代理模式

    Android插件化原理解析——Hook机制之动态代理 Android插件化原理解析——概要 Retrofit2 ...

  • EOS插件初始化机制讲解

    EOS插件初始化机制讲解 EOS插件初始化采用的技术 EOS插件初始化采用技术有C++多态技术、函数模板及代理设计...

  • Android插件化

    插件化涉及的东西很多,下面从基础知识、插件化技术和主流的插件化框架来介绍 基础知识 类加载器原理 反射原理 代理模...

  • 插件知多少-DIP插件流程

    在PBCA中包含SMT及DIP插件两个程序,SMT在上一篇文章中<帮PCB工厂唱Hook-浅谈SMT表面安装>已详...

  • Android登录拦截:动态代理+Hook的实现

    一、动态代理 + Hook 的实现 在之前的文章我们讲过插件化的实现有点类似,插件化一般是替换系统的 mInstr...

  • Shadow 腾讯插件化——深度解剖框架设计

    简介 Shadow是最近腾讯开源的一款插件化框架。原理是使用宿主代理的方式实现组件的生命周期。目前的插件化框架,大...

  • 插件化笔记 - 动态代理

    插件化离不开代理与反射,反射我们已经很熟悉了,我们可以在各种各样的三方库中找到类似的使用,但是代理却感觉是一个抽象...

  • 插件化学习记录

    1.插件化知识相关 插件化简介(此处省略若干字,,,) 这篇文章主要是自己学习的记录,不实用~~~ 反射、动态代理...

  • Shadow-插件化框架分析

    框架简单介绍 Shadow 是最近腾讯开源的一款插件化框架。原理是使用宿主代理的方式实现组件的生命周期。目前的插件...

网友评论

      本文标题:插件化—Hook-代理

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