吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3336|回复: 76

[原创逆向图文] 静态DL与动态DL

  [复制链接]
1122cf 发表于 2020-12-16 16:35 | 显示全部楼层 |阅读模式

代{过}{滤}理模式分为静态代{过}{滤}理和动态代{过}{滤}理 ,静态代{过}{滤}理是编译阶段就生成代{过}{滤}理类来完成对代{过}{滤}理对象的一系列操作。动态代{过}{滤}理是指在运行时动态生成代{过}{滤}理类。即代{过}{滤}理类的字节码将在运行时生成并载入当前代{过}{滤}理的 ClassLoader。

静态代{过}{滤}理就是在程序运行前就已经确定代{过}{滤}理类与代{过}{滤}理对象的代{过}{滤}理模式,它通常用于对原有业务逻辑的扩充。比如某个接口类,并调用其中的某些方法,出于对记录日志、打印方法执行时间等的某种原因,又无法将这些逻辑写入接口类的方法里。因此需要创建一个代{过}{滤}理类实现和二方方法相同的方法,通过让代{过}{滤}理类持有真实对象的方式,在原代码中调用代{过}{滤}理类方法,以达到添加需要业务逻辑的目的。

一:如何实现静态代{过}{滤}理

1.首先创建代{过}{滤}理类,在代{过}{滤}理类里面实现接口,再创建声明类,然后实例化得到对象。

(1)声明一个接口类,如下图所示。

图片1.png

(2)定义一个租房子的方法,如下图所示。
图片2.png

2.具体实现需要再定义一个类,这个类实现接口类里面的方法,此时就需要通过代{过}{滤}理来完善或者达到需求,修改这个方法或者扩展这个方法,但是又不能变动原有的方法,步骤如下:

(1)创建代{过}{滤}理类并且实现接口,如下图所示。
图片3.png

(2)声明一个对象后进行实例得到对象,如下图所示。

图片4.png

(3)在代{过}{滤}理类里面定义两个方法分别是代{过}{滤}理之前和代{过}{滤}理之后,如下图所示。

图片5.png

(4)调用里面的方法,做出相应的修改,比如参数、返回值等,这也就是代{过}{滤}理的作用。
在MainActivity里面实例化代{过}{滤}理的类,此时为proxy类,如下图所示。

图片6.png

然后运行打印一下log日志信息,效果如图1.7所示。代{过}{滤}理的作用一目了然,清晰可见它的变化。

图片7.png




动态代{过}{滤}理的目的就是为了解决静态代{过}{滤}理的缺点,通过使用动态代{过}{滤}理,在运行时动态生成一个持有RealObject,并实现代{过}{滤}理接口的Proxy,同时注入相同的扩展逻辑。即使你要代{过}{滤}理的RealObject是不同的对象,代{过}{滤}理不同的方法,都可以通过动态代{过}{滤}理来扩展功能。

动态代{过}{滤}理与静态代{过}{滤}理相比较,最大的好处是接口中声明的所有方法都被转移到调用处理器一个集中的方法中进行处理(InvocationHandlerinvoke)。在接口方法数量比较多的时候,可以进行灵活处理,而不需要像静态代{过}{滤}理那样每一个方法进行中转。而且动态代{过}{滤}理的应用使类职责更加单一复用性更强。

二:动态代{过}{滤}理的核心

动态代{过}{滤}理的核心就是代{过}{滤}理对象的生成,其核心代码需要三个参数。

- ClassLoader:用于加载代{过}{滤}理类的Loader类,通常这个Loader和被代{过}{滤}理的类是同一个Loader类。

- Interfaces:是要被代{过}{滤}理的接口。

- InvocationHandler:是用于执行除了被代{过}{滤}理接口中方法之外用户自定义的操作,也是用户需要代{过}{滤}理的最终目的。用户调用目标方法都被代{过}{滤}理到 InvocationHandler类中定义的唯一方法invoke中。

三:如何实现动态代{过}{滤}理

1.首先定义一个接口,如下图所示。

图片8.png

2.实现这个接口类,如下图所示。

图片9.png



3.代{过}{滤}理需要实现类,代{过}{滤}理实现的接口为InvocationHandler(为系统提供类),查看该系统提供的接口,发现只有一个方法,并且该方法有三个参数。实现Invoke方法中,传入相应的参数,定义要代{过}{滤}理的对象并且初始化,设置完成后便调用,如下图所示。
图片10.png

4.准备代{过}{滤}理器,在MainActivity类里面实例化目标对象,然后调用方法用来设置代{过}{滤}理的类。把代{过}{滤}理传给系统的handler,生成新的代{过}{滤}理对象,调用target得到类和接口、代{过}{滤}理类、新的代{过}{滤}理对象调用方法(指定接口),进而调用方法,如下图所示。

图片11.png

5.运行查看效果。


小结

学习动态代{过}{滤}理的概念以及如何使用动态代{过}{滤}理,实战操作动态代{过}{滤}理的使用以及代码的编写。

静态代{过}{滤}理的概念,以及如何使用静态代{过}{滤}理。实战操作静态代{过}{滤}理的使用以及代码的编写。

评分

参与人数 16HB +14 THX +6 收起 理由
lies + 1
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
DDK4282 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
459121520 + 1
消逝的过去 + 2
冷亦飞 + 1
利奥利奥 + 2 + 1
成丰羽 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
temp + 1 + 1
菜鸟上路 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
playboy + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
ghostxu + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
越宝 + 1
king51999 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
firstcmm + 1 [快捷评语]--你将受到所有人的崇拜!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ghostxu 发表于 2022-1-29 00:01 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
拿着雪糕 发表于 2022-1-29 14:13 | 显示全部楼层

学习大佬经验
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
不苦小和尚 发表于 2022-2-24 15:16 | 显示全部楼层


[快捷回复]-软件反汇编逆向分析,软件安全必不可少!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ZvTX 发表于 2022-2-24 15:16 | 显示全部楼层

谢谢  前来学习 一下
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
SzuPpJd5860 发表于 2022-2-24 15:59 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
nUFzSs 发表于 2022-2-24 16:21 | 显示全部楼层

火前留名!我相信一定会火!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
wqG09452 发表于 2022-2-24 16:55 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
CLybc73 发表于 2022-2-24 17:30 | 显示全部楼层

这个不错谢谢,看一下
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
NHFXy56 发表于 2022-2-24 17:41 | 显示全部楼层

楼主好强啊!学习了!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表