【问题标题】:Zlib inflate unexpected decompression errorsZlib inflate 意外解压错误
【发布时间】:2017-10-23 00:24:42
【问题描述】:

我在 zlib 膨胀算法上苦苦挣扎了几个星期。

我想从名为 Tibia 的流行游戏中解压缩数据包。他们使用 zlib 膨胀算法对其进行了压缩。但似乎有些东西改变了。你能检查一下,也许你会发现我遗漏的东西?

数据包压缩:-不能直接膨胀(它的原始霍夫曼固定编码-可能)

DA 22 A6 CB 10 99 5F AA 50 9C 9A AA 90 A8 90 05 B4 2F B5 44 41 C3 B1 28 D7 CA 50 53 8F CB B3 44 A1 3C 35 33 3D A3 58 C1 C8 44 CF C0 40 21 BF 4A 0F

使用逆向工程解压的数据包:

B4 16 2D 00 59 6F 75 20 73 65 65 20 61 20 6A 61 63 6B 65 74 20 28 41 72 6D 3A 31 29 2E 0A 49 74 20 77 65 69 67 68 73 20 32 34 2E 30 30 20 6F 7A 2E

使用 Cyber​​Chef deflate / php deflate 函数用 zlib deflate 压缩的解压包:

db 22 a6 cb 10 99 5f aa 50 9c 9a aa 90 a8 90 95 98 9c 9d 5a a2 a0 e1 58 94 6b 65 a8 a9 c7 e5 59 a2 50 9e 9a 99 9e 51 ac 60 64 a2 67 60 a0 90 5f a5 07 00

数据在一些地方匹配,但通常情况不同。你知道可能是什么情况吗?

我附上一张来自 RE 的图片充气功能:Screenshot from IdaPro

以下是正确顺序的数据包:

  1. http://wklej.org/hash/6aee9e223f0/txt/ - 正确充气
  2. http://wklej.org/hash/bd371e7f510/txt/ - 正确充气
  3. http://wklej.org/hash/8f15935dc15/txt/ - 正确充气

这是不能充气的数据包……

CA059BC6043619009FC9FFFFE831

【问题讨论】:

    标签: c++ compression zlib inflate


    【解决方案1】:

    您无法膨胀的数据包可能是较长压缩数据流的一部分,其他数据包在它之前和之后。您需要将它们全部解压为一个流,才能成功解压。

    您的第一个示例是 deflate 流的一部分,它引用了它之前的数据。所以它是更大的放气流的一部分。您需要该片段之前的所有压缩数据才能解压缩该片段。您的最后一个示例(CA05...)也引用了前面的数据,因此它也是一个更大的流的一部分,其前面有压缩数据。

    【讨论】:

    • 老实说,我已经从内存中复制了输入十六进制流,通过传递的长度参数验证了它的长度,然后复制了输出缓冲区。奇怪的是我不能在其他任何地方给它充气......它是zlib充气,充气是用-15参数启动的......我是否可能需要用这个逐包解压缩?......你一定知道我已经提取了从工作应用程序中即时膨胀函数参数(也是 zstream 结构内容)
    • 压缩通过参考以前的数据来工作。该数据包指的是必须在前一个数据包中的数据。此外,该数据包有一个固定块,不是最后一个块,因此后面必须有压缩数据。
    • 也许这是最后一个数据包。在这种情况下,必须有其他方法来指示有多少未压缩的字节。 deflate 格式是自终止的,但是这个例子没有最后一个数据包,所以它不会自终止。
    猜你喜欢
    • 2013-11-30
    • 2013-02-27
    • 2015-05-23
    • 2015-04-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多