JAVA动态代理类调试及生成问题解决

本文详细讲述了在探究CVE-2019-10173漏洞时,如何通过HSDB工具理解动态代理类在compareTo()函数中的调用过程,包括使用System.setProperty()和HSDB工具的配合,以及如何观察到InvocationHandler的Invoke方法执行情况。

前几天碰到了这样的一个问题,就是在挖掘JAVA反序列化CVE-2019-10173的时候,compareTo()函数在碰到动态代理类的时候,会执行到Invoke方法,但是这个过程由于动态代理类不会生成,所以没有办法看到调用过程,所以就有了此文,记录一下这个过程。

看到许多文章都是说在动态代理测试中加入System.getProperties().put(“sun.misc.ProxyGenerator.saveGeneratedFiles”, “true”);这样的语句,但是在动态代理调试到compareTo()函数的时候就是JDK内部类了,没有办法修改代码,所以也就没办法生成class文件。

后面找到一个内置在JAVA JDK中的小工具:HSDB工具,这个工具主要用来查看主要用来查询在程序执行过程中对象的运行情况,还有很多其他的功能,这里就不说了
打开命令:java -cp sa-jdi.jar sun.jvm.hotspot.HSDB
首先不运行程序的情况下执行jps命令,再开启调试执行jps命令,找到我们的进程的id
在这里插入图片描述打开这个工具,输入id
在这里插入图片描述保存文件,但是会发现这个文件是0kb,而且jd-gui无法打开,直接放到intellij idea里面反编译进行打开
在这里插入图片描述可以看到里面实现了compareTo()方法,这个里面调用了父类的invoke方法,也就是会执行实现了InvocationHandler接口的类的Invoke方法
也就是会执行到EventHandler这个类里面的方法,这样就实现了理解动态代理类的调用CompareTo()函数的过程的理解

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值