你尚未登录
未加入『代码审计』知识星球的用户只能查看少量内容,且不能下载附件。 加入『代码审计』知识星球即可查看所有内容。
@:):P牛 请教您一个问题,您在 Java安全漫谈 - 13.Java中动态加载字节码的 那些方法 中举了一个利用TemplatesImpl加载字节码的例子,里边的调用链为TemplatesImpl#newTransformer() -> TemplatesImpl#getTransletInstance() -> TemplatesImpl#defineTransletClasses() -> TransletClassLoader#defineClass(),我在调试的时候发现getTransletIndex也是 public 类型,尝试了一下用这个链 getTransletIndex -> TemplatesImpl#defineTransletClasses() -> TransletClassLoader#defineClass(),但是并没有触发HelloTemplatesImpl的构造函数,两条链最终到达TransletClassLoader#defineClass() 的时候变量b的值是一样的,这个是什么原因啊。 byte[] code = Base64.getDecoder().decode("字节码"); TemplatesImpl obj = new TemplatesImpl(); setFieldValue(obj, "_bytecodes", new byte[][]{code}); setFieldValue(obj, "_name", "HelloTemplatesImpl"); setFieldValue(obj, "_tfactory", new TransformerFactoryImpl());