6

我有一个包含 Java 序列化对象(它们是值对象)的二进制文件,但我无权访问为创建这些对象而序列化的类。如果没有类文件,JVM 不允许我使用 objectInputStreamInstance.readObject() 读取对象,并正确地抛出 java.lang.ClassNotFoundException。

是否有一个库可以帮助提取 XML 或其他标准化格式的数据?例如,如果下面的 Person 类被序列化并存储在一个文件中,我想从中提取数据:

类定义

class Person implements Serializable {
  int age;
  String name;
  public Person(int age, int name) {
    this.age = age;
    this.name = name;
  }
}

所需的提取格式(无需访问类文件)

<Person>
  <age>10</age>
  <name>Name</name>
</Person>

我还检查了以下内容,但没有得到我想要的内容:

  1. Xstream ( http://x-stream.github.io/ ) 需要访问 Java 对象才能从该对象创建 XML。但是,我无法为缺少类文件创建对象。
  2. 序列分析似乎很老了https://weblogs.java.net/blog/emcmanus/archive/2007/06/disassemble_s.html

谢谢您的帮助。

问候,古尔塞夫

4

1 回答 1

5

检查jdeserialize。它有一个命令行模式,但也有一个记录良好的 API。关于自动重新序列化为 XML?我不这么认为。有太多的方法可以做到这一点。您可能需要通过 2 个单独的步骤来完成此操作。jdeserialize 有助于对类进行逆向工程(生成源 java 代码),尤其是当许多 XML 序列化工具需要这样做时。

现在,如果原始类没有使用默认的序列化机制(通过覆盖readObject或类似方法)或确实使用了数据混淆/加密技术(例如将对象包装在javax.crypto.SealedObject和/或中java.security.SignedObject),那么您成功的机会将越来越少。

于 2013-08-12T02:51:52.997 回答