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