原创

: BUUCTF_zip 1 压缩包的研究_CRC32爆破

BUUCTF_zip 1 压缩包的研究_CRC32爆破

在这里插入图片描述
拿到一堆的加密的压缩包,也不是伪加密,也不能爆破。我反正是爆破了所有8位的字母加数字密码。(要是弄一个中文进去,神仙也爆破不了)
但是每一个的大小倒是很小。
在这里插入图片描述

这个就很难办了。

原来有一个叫CRC32校验码的东西。

在这里插入图片描述
就是属性最后的那个东西。

之前有过拿相同校验码的文件,去破压缩包里的文件的题目,用到就是这个东西。
CRC32校验码就是用来检验文件内的数据是否正确的。

个人理解应该是做了一个不可逆的编码

就像是有一个故事说的是:投标公司为了防止内鬼泄露价格消息,就做了一个“基于区块链的二次检验程序”。虽然不知道具体是怎么操作的。但是第一次提交要求把投递的计划书做一个不可逆加密。类似一个文件摘录吧。

信息不能从校验码复原,因为加密过程有损失,或者本来就没把完整的信息丢进去,但是可以从校验码发现信息是否有修改,因为校验码是以信息为明文加密的。

但是如果信息本身足够小,那么这个校验码就足够用来检验爆破的枚举的信息是否是原来的信息。真的是成也萧何,败也萧何。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env python 
# -*- coding:utf-8 -*-
# python3
import zipfile
import string
import binascii


def CrackCrc(crc):
for i in dic:
for j in dic:
for k in dic:
for h in dic:
s = i + j + k + h
if crc == (binascii.crc32(s.encode())):
f.write(s)
return


def CrackZip():
for i in range(0, 68):
file = "C:/Users/brighten/Desktop/b2ca8799-13d7-45df-a707-94373bf2800c/"+'out' + str(i) + '.zip'
crc = zipfile.ZipFile(file, 'r').getinfo('data.txt').CRC
CrackCrc(crc)
print('\r' + "loading:{:%}".format(float((i + 1) / 68)), end='')


dic = string.ascii_letters + string.digits + '+/='
f = open('out.txt', 'w')
print("\nCRC32begin")
CrackZip()
print("CRC32finished")
f.close()


在这里插入图片描述
就是做一个四重循环枚举所有的信息去和CRC32校验码对答案。

下面用来取出CRC32的数值。

1
2
crc = zipfile.ZipFile(file, 'r').getinfo('data.txt').CRC

用来把枚举的字符串encode为 CRC32编码

1
2
binascii.crc32(s.encode())

最后得到的BASE64编码的数据。

z5BzAAANAAAAAAAAAKo+egCAIwBJAAAAVAAAAAKGNKv+a2MdSR0zAwABAAAAQ01UCRUUy91BT5UkSNPoj5hFEVFBRvefHSBCfG0ruGnKnygsMyj8SBaZHxsYHY84LEZ24cXtZ01y3k1K1YJ0vpK9HwqUzb6u9z8igEr3dCCQLQAdAAAAHQAAAAJi0efVT2MdSR0wCAAgAAAAZmxhZy50eHQAsDRpZmZpeCB0aGUgZmlsZSBhbmQgZ2V0IHRoZSBmbGFnxD17AEAHAA==

做BASE64解码,里面有可以识别的字符和一些意义不明的字符,就像是winhex的ASCII区一样,很想放到winhex里面。

这个文件里面能放txt文件,估计就是zip还是rar,反正也就那么两个常见。
结果是RAR文件。

需要在前面加RAR的头52 61 72 21 1A 07 00

还有的人说最后那么7个字节是RAR文件尾。
好像和别的RAR文件不大一样。rar似乎是没有固定的文件尾。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述