我正在尝试对由自定义类加载器加载的java类进行逆向工程。
我试图存储二进制内容,后来试图反编译,但反编译器抱怨它不是典型的java类,我明白该类是动态加载的。
现在在运行时我有类对象。是否可以序列化为遵循与sun java class相同的约定的类文件。
补充:或者,是否有可用的反编译器API可用于java类对象?
答案 0 :(得分:2)
绕过案例的最简单方法(imo)是直接攻击java.lang.ClassLoader
并将其替换为跟踪protected final Class<?> defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain)
的任何加载类外观并使用您自己的版本和钩子替换它。编译自己的java.lang.ClassLoader版本时,只需使用java - -Xbootclasspath/p
或者安装一些仪器可以产生类似的效果。
快乐的黑客攻击!
答案 1 :(得分:0)
Ehhhh。为什么反编译器会抱怨?有些代码根本无法反编译。例如,如果字节代码推送,但是没有弹出,那么就没有Java等价物。
尝试并检查字节代码。快速查看javap可能已经很明显了。