BCEL classloader

文章介绍了ApacheCommonsBCEL项目,这是一个被包含在JDK中的库,用于处理Java字节码。BCELClassLoader是一个特殊的ClassLoader,它可以加载以$$BCEL$$开头的类名,并对其进行解码和处理。文章通过示例展示了如何使用BCEL将字节码编码并动态加载,同时提到了在Java8u251中该ClassLoader被移除的安全改进。

一、概述

BCEL的全名应该是Apache Commons BCEL,属于Apache Commons项目下的一个子项目。Apache Commons大家应该不陌生,反序列化最著名的利用链就是出自于其另一个子项目——Apache Commons Collections。

就这个库的功能来看,其使用面远不及同胞兄弟们,但是他比Commons Collections特殊的一点是,它被包含在了原生的JDK中,位于com.sun.org.apache.bcel。

二、BCEL ClassLoader如何使用

BCEL这个包中有个有趣的类com.sun.org.apache.bcel.internal.util.ClassLoader,他是一个ClassLoader,但是他重写了Java内置的ClassLoader#loadClass()方法。

  • 在ClassLoader#loadClass()中,接受一个String并且判断类名是否是$$BCEL$$开头,如果是的话,调用createClass方法。

  • 此方法中将会对这个字符串截取$$BCEL$$后面的字符串进行decode,解码后经过一些列处理后返回clazz,也就是javaclass。

  • 当我们的字节码加载完成javaclass后,如果不为空,即调用definClass方法动态加载。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thunderclap_

点赞、关注加收藏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值