【问题标题】:How to save an array of byte as a class file in java and decompile it later?如何在java中将字节数组保存为类文件并稍后反编译?
【发布时间】:2013-01-29 09:40:38
【问题描述】:

我正在做一个兵棋推演,我需要分析一个 java 应用程序。因此,应用程序加载了一个损坏的类文件,将其转换为字节数组,对其进行处理,然后使用该数组正确加载类。我需要分析这个类,所以我想将它保存为一个单独的类文件,以便以后使用 jd-gui 对其进行反编译。我使用以下代码保存数组:

FileOutputStream output = new FileOutputStream(new File("class.class"));
output.write(arrayOfByte);

但是该类之后不会被反编译。我还需要做什么才能使其被反编译器读取?

更新:

我所说的损坏的意思是类文件实际上是不完整的,应用程序完成了类并使其成为内部有效的类文件,然后加载它。程序员这样做是为了防止类被反编译和读取。这个问题并不真正需要,但我认为如果我澄清一下会更好。

【问题讨论】:

  • 如果它是一个损坏的类文件,你希望它如何被反编译?你的问题不是很清楚...
  • 您能否提供更多信息,例如: * 为什么类没有被反编译。来自 jd-gui 的任何错误消息? * 你如何修改class文件让上面代码之前的代码从加载开始(加载损坏的类)

标签: java class bytearray reverse-engineering decompiling


【解决方案1】:

确保将类 java 字节码正确写入 Example 的路径

说包含类名的类完全限定名是 com.test.Sample 你应该在文件夹 com\test\Sample.class 下写类字节码。

进一步确保在写入字节码后正确关闭 FileOutputStream。

// use fully qualified class name
FileOutputStream output = new FileOutputStream(new File("c:\\com\\test\\Sample.class"));
output.write(arrayOfByte);
output.close();

【讨论】:

  • 您能分享一下具体是什么问题/解决方案吗?
  • @MarkusKreusch 显然,重要的是文件名。我把文件名改成正确的类名,反编译成功。
猜你喜欢
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多