Java逆向基礎之導出內存中的類一
阿新 • • 發佈:2018-04-23
java反編譯為什麽需要這個,因為在之前的博文中提到,為了增加逆向的難度,部分軟件會對部分關鍵方法和類進行隱藏,所以我們需要把這個類從內存中拿出來。
本文介紹使用javaagent的方法,下一篇介紹dumpclass,兩種方法各有利弊。
本文需要用到第三方jar為:javassist-3.20.0-GA.jar,不過我們需要的是它的源碼javassist-3.20.0-GA-sources.jar
新建名為DumpClassAgent的項目,項目結構如下
將下載到的源碼復制到src目錄下
DumpClassAgent.java文件內容
package com.vvvtimes.demo.agent; import java.lang.instrument.Instrumentation; public class DumpClassAgent { public static void premain(String agentOps, Instrumentation inst) { try { inst.addTransformer(new DumpClassTransformer()); } catch (Exception e) { e.printStackTrace(); } } }
DumpClassTransformer.java文件內容
package com.vvvtimes.demo.agent; import java.io.ByteArrayInputStream; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; import java.security.ProtectionDomain; import javassist.ClassPool; import javassist.CtClass; public class DumpClassTransformer implements ClassFileTransformer { private static ClassPool pool; static { pool = ClassPool.getDefault(); } @Override public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { System.out.println(className); try { if ("com/vvvtimes/bean/Employee".equals(className)) { CtClass ctClass = pool.makeClass(new ByteArrayInputStream(classfileBuffer), false); ctClass.writeFile("E:\\"); } } catch (Exception e) { e.printStackTrace(); } return null; } }
MANIFEST.MF文件內容
Manifest-Version: 1.0 Premain-Class: com.vvvtimes.demo.agent.DumpClassAgent Can-Redefine-Classes: true
打包文件成DumpClassAgent.jar
將動態生成類的博文中的代碼導出可運行jar,命名為DynamicGenerateClass.jar
放到同一目錄執行命令
java -javaagent:DumpClassAgent.jar -jar DynamicGenerateClass.jar
E盤會生成對應的class
用jd-gui反編譯可以得到源碼。
Java逆向基礎之導出內存中的類一