我需要解析不受信任的 Java 序列化对象。数据以字节数组的形式提供给我(在某个时候由 ObjectOutputStream 写入)。
我不想简单地调用 ObjectInputStream.readObject() 和/或加载实际对象。我正在寻找一种安全解析字节并获取字段名称和值的方法。
--
在查看了用于反序列化对象的ObjectInputStream 过程之后,这是我迄今为止的尝试的一个小总结。
我试图根据预期的流常量递归地提取字段类型/名称(作为 unicode 字符串)。我最终得到一个字段名称列表,其值应按顺序出现在字节数组中。我对这种方法感到不安,因为它可能有问题。特别是适应似乎是单独的序列化协议,然后是 HashMap、ArrayList 等。但如果我能找到一种方法来读取表示字段值的字节,它可能会起作用:
我可以尝试根据大小/偏移量读取和存储原语,但是当我遇到我的第一个对象时,它变得有点复杂——没有明确的方法来区分哪些字节与哪些值相关联(没有实际加载以 ObjectInputStream 可能的方式的对象?)。
--
任何人都可以建议一个我显然已经过去的潜在解决方案,或者一个可以帮助解析序列化数据而不加载对象的可信库吗?
感谢您的阅读,以及所有的意见/建议!!!如果有不清楚的地方,我深表歉意,如果您能容忍我,我很乐意澄清。