Open lqzhgood opened 2 years ago
完全没有接触过序列化....想要使用Java
代码解码的话,试试这个?假如能够解码的话,表情包表情(msgtype -2007)就可以正常显示名称了
序列化其实都接触过,只不过平时基本都是用 JSON
格式,而这个是 Java
格式的序列化
这里序列化是通过 Serialization
接口,该序列化方式是 java
独有的,与 Json
对比不仅可以序列化 Boolean
Number
String
Object
Arrary
等,还能序列化 Class
。
序列化的过程基本是这样的,其实跟 proto
的解密类似了
实例
-> Class
(获取类型) -> 二进制
其中 Class
相当于 proto
文件
SerializationDumper
这个工具能帮你推测出 Class
的结构,但并不能直接获取 实例
所以只能通过推测出的结构重写 Class
,然后通过 Java 代码结合 Class
反序列化出 实例
这是我这几天的研究结果,由于我不会 Java
,只能看你有空研究研究了。
我会从二进制的角度看能不能还原,但如果二进制有通解,这基本等同于重写 Java
的 Serialization
接口,太难了。
我估计我只能从我的几百个样本中求出特解吧
上面的样本就是通过你说的 SerializationDumper
这个库解码出来的,看样子结构很简单,貌似就是一个大数组(BLOCKDATA)之类的,所以 Class
结构应该不会很复杂,相比从二进制角度来解应该难度低很多。
我在研究 -2011 分享消息的解码 https://github.com/ZhangJun2017/QQChatHistoryExporter/blob/f97eb64581229a30514d55aa0a8423b138b09437/src/RawMessage.java#L69
先通过
decryptProtobuf
解码以后,二进制数据是ac ed 00 05
开头,搜索后得知是Java
Serializable 序列化后的格式(这里我纯二进制硬解搞了我2天…… 后来才知道是 Java 的序列化格式 )可以通过 https://github.com/NickstaDB/SerializationDumper 进行解码。
通过
SerializationDumper
解码后可以看到数据结构很简单,应该就是一个 { key: BigString } 的结构,我不知道如何写这个 Java 代码来还原 Java 的序列化。