我正在尝试在Python中解压缩并重新压缩特定的压缩数据,以重现原始的压缩输出。但是,我无法实现与 zlib 的匹配,并且我不确定原始压缩数据使用了什么压缩方法或参数。
这是我正在使用的代码:
import zlib
original_compress = '78010dc2390a80400c05d052b4d4ce4a3c8024933fdb719259c046c1c2f32bbc696ba098cd92b23242ed66625db568498d106d5e22e0202e4b622f082c24eba0577deeb3eee34bfe20fa7df036131b0000f53a00000000'
print('original_compress:', original_compress)
# Decompress the data
decompress = zlib.decompress(bytes.fromhex(original_compress))
print('decompress:', decompress.hex())
# Recompress the data
again_compress = zlib.compress(decompress)
print('again_compress:', again_compress.hex())
# Compare the results
if original_compress == again_compress.hex():
print('Matched')
else:
print('NotMatched')
问题: 解压与 zlib 配合得很好,所以我假设它是 zlib 兼容的格式。
但是,重新压缩不会产生与原始数据逐字节匹配的结果。 观察结果:
原始压缩数据以 78 01 开头,这表明它使用 zlib 标头(可能是未压缩的 DEFLATE)。
解压后的数据是有效的,我可以确认解压的完整性。
问题:
如何重现准确的原始压缩输出?是否有需要与 zlib 一起使用的特定参数或标志?
原始数据可以使用自定义或非标准压缩实现吗?如果是的话我该如何识别?
是否有任何工具或库(除了 zlib 之外)可以帮助我对所使用的压缩格式进行逆向工程?
original_compress
中的zlib流后面有八个无关字节。 zlib 压缩器不会产生这些。