缺少一些位在(PHP)DEFLATE数据头

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

我想了解PHP gzdeflate / gzinflate作品。如果我知道这是一个三个有点简单的比特流。因此,有可能只拿到了第一位,看看被压缩。因此,通过采取第一位,我们可以在理论上(?)中提取字节后的字节?

事实上,我已经失去了文件的某些位(围绕第一字节40-50与一些失位,并非所有的位,只是其中的一部分)。我只是想知道如果我能以重建第一字节能充分gzdeflate()的文件做一个聪明的“暴力破解”。我知道这是PHP代码,所以提取的字节数应该只有ASCII。我尝试猜解所有位,但它是太长了。所以,如果我能位之后暴力破解位,这将是可取的。

(如果在Python重新实施,是可读的,这将帮助我很多)。我读过http://www.zlib.net/feldspar.html它更多关于如何对数据进行压缩,我想解压缩。

谢谢

编辑:让我们看一个例子。这是我的数据(十六进制):

39e0 6fb2 41eb ....

这个数据是从关键扣除。此键在其十六进制格式使用,所以我只有16对每个字符的可能性。

ALGO是这个:

(ciphered - key) % 256 = deflate_data

关键是十六进制形式。所以,第一个字节的关键只能是:的0x30 - > 0x39和0x61 - > 0x66我唯一的选择(为清楚起见小尾数,第一位是最后一块,两个下位编码类型):

Key -> deflate
0 -> 10010000  --> No, if .00 code, all other bits must be 00
1 -> 00010000  --> No, if .00 code, all other bits must be 00
2 -> 11100000  --> No, .11 is reserved
3 -> 01100000  --> No, .11 is reserved
4 -> 10100000  --> Maybe?
5 -> 00100000  --> Maybe?
6 -> 11000000  --> Maybe?
7 -> 01000000  --> Maybe?
8 -> 10000000  --> Uncompressed? Must check LEN and NLEN
9 -> 00000000  --> Uncompressed? Must check LEN and NLEN
a -> 00011011  --> No, .00 should hav all others bits to 0
b -> 11101011  --> No, .11 is reserved
c -> 01101011  --> No, .11 is reserved
d -> 10101011  --> Maybe?
e -> 00101011  --> Maybe?
f -> 11001011  --> Maybe?

所以我的钥匙的第一个字节可能是:4,5,6,7或d,E,F。他们中的一些使用固定的字典。因此,它是theorically可以尝试下个字节?其它字节是动态的字典。那么,有可能创造旁边字节的霍夫曼树?错键可能会产生无法哈夫曼树。当我走了几种可能性,我可以尝试猜解其余按键。

图8和9可以很容易地进行测试。

关键是构建这样的:

MD5(pass[::-1])+MD5(pass[:len(pass)])

所以,theorically,密钥可以是32至50-60个字符,这取决于密钥的长度。

php deflate
1个回答
0
投票

因此,有可能只得到了第一位,看看被压缩

第3号位头只是限定,如果它是最后的编码块或不与块的编码类型。

我只是想知道如果我能以重建第一字节能充分gzdeflate()的文件做一个聪明的“暴力破解”

不太可能。通常大多数块将归入编码类型10 - compressed with dynamic Huffman codes。因此,根据RFC1951 - 3.2.3. Details of block format你会读第一块Huffman编码树卡住。如果你不能解码这棵树,你甚至不会知道你的第一个块结束,因为你可能已经失去了你的最终块的标志物。

你可以试试

如果你的文件的完整性并不那么重要,即如果它是文本,XML,CSV或东西在那里你会从部分文件恢复中受益 - 那么你可以通过这个算法中取得成功:

  1. 选择下一个蛮力被迫块长度
  2. 从输入流的开始除去block_length字节
  3. 通过得到的物流进gzinflate()
  4. 如果成功 - 你有未压缩数据(除了第一个块),否则 - 重复所有步骤

然而,由于一些块有可能是先前块反向引用(包括对您的损坏,并因为移除的第一个块) - 你可能是出于运气太

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