从Java层的hook到native的hook展示、hook技巧灵活运用,在整个逆向过程中必不可缺少。
HOOK是一种通过更改程序的数据结构或代码结构从而改变程序运行路线的一种方法。其中包括用户模式的HOOK和内核模式的HOOK。本次主要讲解常用HOOK框架的安装技术及使用,包含各种框架的HOOK使用以及实例操作。从分析程序的APP代码找到关键的HOOK点到自己编写各种工具的HOOK代码。
1静态代理
代理模式分为静态代理和动态代理 ,静态代理是编译阶段就生成代理类来完成对代理对象的一系列操作。动态代理是指在运行时动态生成代理类。即代理类的字节码将在运行时生成并载入当前代理的 ClassLoader。
静态代理就是在程序运行前就已经确定代理类与代理对象的代理模式,它通常用于对原有业务逻辑的扩充。比如某个接口类,并调用其中的某些方法,出于对记录日志、打印方法执行时间等的某种原因,又无法将这些逻辑写入接口类的方法里。因此需要创建一个代理类实现和二方方法相同的方法,通过让代理类持有真实对象的方式,在原代码中调用代理类方法,以达到添加需要业务逻辑的目的。
2如何实现静态代理
1.首先创建代理类,在代理类里面实现接口,再创建声明类,然后实例化得到对象。
(1)声明一个接口类,如下图所示。
(2)定义一个租房子的方法,如下图所示。
2.具体实现需要再定义一个类,这个类实现接口类里面的方法,此时就需要通过代理来完善或者达到需求,修改这个方法或者扩展这个方法,但是又不能变动原有的方法,步骤如下:
(1)创建代理类并且实现接口,如下图所示。
(2)声明一个对象后进行实例得到对象,如下图所示。
(3)在代理类里面定义两个方法分别是代理之前和代理之后,如下图所示。
(4)调用里面的方法,做出相应的修改,比如参数、返回值等,这也就是代理的作用。
在MainActivity里面实例化代理的类,此时为proxy类,如下图所示。
然后运行打印一下log日志信息,效果如下图所示。代理的作用一目了然,清晰可见它的变化。
3小结
主要分享静态代理的概念,以及如何使用静态代理。实战操作静态代理的使用以及代码的编写。