特定压缩数据如何匹配压缩格式?

问题描述 投票:0回答:1

我正在尝试在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 之外)可以帮助我对所使用的压缩格式进行逆向工程?

python compression reverse-engineering zlib
1个回答
0
投票

original_compress
中的zlib流后面有八个无关字节。 zlib 压缩器不会产生这些。

© www.soinside.com 2019 - 2024. All rights reserved.