ClassPool 类池 一个ClassPool对象是包含CtClass对象的容器。一旦一个CtClass对象被创建后,就会被记录到一个ClassPool中。...可以调用CtClass的detach()方法,然后会将该对象从ClassPool中移除: ClassPool classPool = ClassPool.getDefault(); CtClass cc...可是,你可以调用ClassPool.get()方法会重新读取class文件构造一个表示相同的类的ctClass对象。 另一方案是,偶尔使用一个新的classPool代替旧的classPool。...ClassPool cp = new ClassPool(true) 级联ClassPool 如果程序运行在一个web应用中,是有必要创建ClassPool的多实例的。...多个ClassPool对象可以像java.lang.ClassLoader一样级联: // 级联ClassPool ClassPool parent = ClassPool.getDefault();
class cc2 { public static void main(String[] args) throws Exception { //通过字节码构建恶意类 ClassPool...classPool=ClassPool.getDefault(); String AbstractTranslet="com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet..."; classPool.appendClassPath(AbstractTranslet); CtClass payload=classPool.makeClass("...classPool=ClassPool.getDefault(); String AbstractTranslet="com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet..."; classPool.appendClassPath(AbstractTranslet); CtClass payload=classPool.makeClass("
classPool=ClassPool.getDefault(); String AbstractTranslet="com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet..."; classPool.appendClassPath(AbstractTranslet); CtClass payload=classPool.makeClass("..."; classPool.appendClassPath(AbstractTranslet); CtClass payload=classPool.makeClass...classPool=ClassPool.getDefault(); String AbstractTranslet="com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet..."; classPool.appendClassPath(AbstractTranslet); CtClass payload=classPool.makeClass("
1.创建了一个非默认的classpool,加入当前线程的上下文类加载器作为额外的类搜索路径 val classPool = ClassPool(false) classPool.appendClassPath...(LoaderClassPath(contextClassLoader)) ClassPool ClassPool是CtClass对象的容器,每一个CtClass对象都必须从ClassPool中获取。...需要注意的是ClassPool会在内存中维护所有被它创建过的CtClass,当CtClass数量过多时,会占用大量的内存,API中给出的解决方案是周期性的调用compress方法 或 重新创建ClassPool...需要关注的方法: 1.getDefault : 返回默认的ClassPool,单例模式!一般通过该方法创建我们的ClassPool。...\");"); ctClass.toClass(); 2.创建一个完整的类: ClassPool classPool = ClassPool.getDefault(); CtClass ctClass
initialized += 1; } } protected abstract void doJavassist() throws Exception; } import javassist.ClassPool...classPool = ClassPool.getDefault(); classPool.importPackage("java.util.Random"); CtClass randomStringUtilsClass...= classPool.get("org.apache.commons.lang3.RandomStringUtils"); CtClass[] paramsClasses = new CtClass...[]{ classPool.get(int.class.getName()), classPool.get(int.class.getName()), classPool.get(int.class.getName...()), classPool.get(boolean.class.getName()), classPool.get(boolean.class.getName()), classPool.get
String TemplatesImpl = "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl"; ClassPool...classPool = ClassPool.getDefault();//返回默认的类池 classPool.appendClassPath(AbstractTranslet);/.../添加AbstractTranslet的搜索路径 CtClass payload = classPool.makeClass("CommonsCollections33333333"...classPool = ClassPool.getDefault();//返回默认的类池 classPool.appendClassPath(AbstractTranslet);/.../添加AbstractTranslet的搜索路径 CtClass payload = classPool.makeClass("CommonsCollections33333333"
一个CtClass(compile-time class编译时的类)是一个处理class文件的句柄,以下是一个简单的程序: ClassPool pool = ClassPool.getDefault()...ClassPool对象由静态方法getDefault方法查找默认的系统检索path返回。 从实现上来看,ClassPool是一个CtClass的哈希表,使用class name作为key。...从ClassPool中获取到的CtClass对象是可以被修改的。...; } public static void main(String[] args){ // 获取ClassPool ClassPool pool =...ClassPool.getDefault(); CtClass cc = null; try { // 通过ClassPool获取CtClass
下面大概讲一下POC中会用到的类和方法: 5.2 ClassPool ClassPool是CtClass对象的容器,它按需读取类文件来构造CtClass对象,并且保存CtClass对象以便以后使用,其中键名是类名称...常用方法 解释 static ClassPool getDefault() 返回默认的ClassPool,一般通过该方法创建我们的ClassPool ClassPath insertClassPath(...容器 ClassPool pool = ClassPool.getDefault(); // 新建一个CtClass ,类名为Cat CtClass...classPool = ClassPool.getDefault();//返回默认的类池 classPool.appendClassPath(AbstractTranslet);/...classPool = ClassPool.getDefault();//返回默认的类池 classPool.appendClassPath(AbstractTranslet);//添加AbstractTranslet
一个CtClass(compile-time class编译时的类)是一个处理class文件的句柄,以下是一个简单的程序: ClassPool pool = ClassPool.getDefault()...ClassPool对象由静态方法getDefault方法查找默认的系统检索path返回。 从实现上来看,ClassPool是一个CtClass的哈希表,使用class name作为key。...从ClassPool中获取到的CtClass对象是可以被修改的。...; } public static void main(String[] args){ // 获取ClassPool ClassPool pool =...如果你不确定类的完全限定名,你可以使用ClassPool的makeClass方法: // makeClass ClassPool pool3 = ClassPool.getDefault(); InputStream
FileInputStream("test.out")); inputStream.readObject(); } } CC2分析 import javassist.ClassPool...classPool=ClassPool.getDefault(); String AbstractTranslet="com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet..."; classPool.appendClassPath(AbstractTranslet); CtClass payload=classPool.makeClass("...classPool=ClassPool.getDefault(); String AbstractTranslet="com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet..."; classPool.appendClassPath(AbstractTranslet); CtClass payload=classPool.makeClass("
27日上午9:52:43 */ public class demo01 { public static void main(String[] args) throws Exception { ClassPool...pool = ClassPool.getDefault(); CtClass cc = pool.makeClass("com.bigdataBC.bean.Emp"); // 创建属性...pool = ClassPool.getDefault(); CtClass cc = pool.get("com.bigdataBC.demo.Emp"); byte[] bytes...pool = ClassPool.getDefault(); CtClass cc = pool.get("com.bigdataBC.demo.Emp"); // CtMethod m...pool = ClassPool.getDefault(); CtClass cc = pool.get("com.bjsxt.test.Emp"); CtConstructor[] cs
常用API 3.1 ClassPool对象 // 获取ClassPool对象, 使用系统默认类路径 ClassPool pool = new ClassPool(true); // 效果与 new ClassPool...(true) 一致 ClassPool pool1 = ClassPool.getDefault(); 3.2 类对象 3.2.1 获取类对象 // 通过类名获取 CtClass, 未找到会抛出异常.../xxx/Demo.class"))); 3.3 classpath 通过 ClassPool.getDefault()获取的ClassPool使用JVM的classpath....可以从ClassPool中删除不必要的CtClass对象....或者每次创建新的ClassPool对象. // 从ClassPool中删除CtClass对象 ctClass.detach(); // 也可以每次创建一个新的ClassPool, 而不是ClassPool.getDefault
---- Javassist作用 运行时监控插桩埋点 AOP动态代理实现(性能上比Cglib生成的要慢) 获取访问类结构信息:如获取参数名称信息 ---- 常用API 类 说明 ClassPool Javassist...的类池,使用ClassPool 类可以跟踪和控制所操作的类, 与 JVM ClassLoader相似 CtClass CtClass提供了类的操作,如在类中动态添加新字段、方法和构造函数、以及改变类、父类和接口的方法...classPool = new ClassPool(); // 追加系统ClassLoader classPool.appendSystemPath();...// 获取要操作的类 CtClass ctClass = classPool.get("com.artisan.agent.UserService"); // 获取方法...classPool = new ClassPool(); // 追加系统ClassLoader classPool.appendSystemPath();
2、测试javassist生成一个新的类 源代码如下: package com.peng.test; import javassist.ClassPool; import javassist.CtClass...pool = ClassPool.getDefault(); CtClass cc = pool.makeClass("com.peng.bean.Emp"); //创建属性...; } } tips: (1)由上面的代码也可以看出使用javassist操作字节码的方式:首先获取一个类池“ClassPool”,通过类池,我们创建编译过程中的新类“CtClass”,...pool = ClassPool.getDefault(); CtClass cc = pool.makeClass("com.peng.test.Emp"); byte[]...pool = ClassPool.getDefault(); CtClass cc = pool.makeClass("com.peng.test.Emp"); //方法一:
classPool = ClassPool.getDefault(); String code = " String cmd = request.getParameter...classPool = ClassPool.getDefault(); try { CtClass ctClass = classPool.get...> clazz : allLoadedClasses){ if (clazz.getName().equals(CLASS_NAME)){ ClassPool...classPool = ClassPool.getDefault(); ClassClassPath classClassPath = new ClassClassPath...classPool = ClassPool.getDefault(); ClassClassPath classClassPath = new ClassClassPath
Class loader 类加载 如果必须修改的类是预先知道的,最简单的修改类的方式可能是以下这些: 1.通过调用ClassPool.get()获取一个CtClass对象。...例如,javassist.Loader可用于使用javassist修改的指定的类: ClassPool pool = ClassPool.getDefault(); // 使用ClassPool创建Loader...注意:应用的类像Point是不能访问加载器的类如MyTranslator、ClassPool的,因为它们是被不同的加载器加载的。...只有当: 类不是由ClassPool.get()找到的,或者 类使用了delegateLoadingOf()去指定由父加载器加载。 这个搜索顺序允许Javassist加载修改过的类。...例如,添加一个新的属性字段给java.lang.String: // 添加字段给系统类:java.lang.String ClassPool pool = ClassPool.getDefault();
HelloWorld的Class实例 */ public static Class createHelloWorld()throws Exception{ //使用默认的ClassPool...ClassPool pool = ClassPool.getDefault(); //创建一个空类 CtClass ctClass = pool.makeClass...(1) 在createHelloWorld()方法中创建一个ClassPool,ClassPool本质上就是个CtClass对象容器。...(2) 调用ClassPool的makeClass()方法,传入完整的包名+类名生成一个空的类信息。
编写代码并且需要导入 javassist.jar包 核心代码如下: public static void patchClass(String jarPath) throws Exception { ClassPool...classPool = ClassPool.getDefault(); classPool.insertClassPath(jarPath); CtClass ctClass...= classPool.get("com.xk72.charles.kKPk"); //修改return true CtMethod ctMethod = ctClass.getDeclaredMethod
String AbstractTranslet="com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet"; ClassPool...classPool=ClassPool.getDefault(); classPool.appendClassPath(AbstractTranslet); CtClass...payload=classPool.makeClass("cc4Demo"); payload.setSuperclass(classPool.get(AbstractTranslet
领取专属 10元无门槛券
手把手带您无忧上云