CRC32爆破小结

前言

最近在bugku遇到了一道隐写题,binwalk之后发现里面有很多个压缩包。。。。。。然后就无从下手,于是查看别人大佬的wp才发现是CRC32爆破,由于本人第一次遇到这种题目,就记录一下吧。。

正文

CRC想必大家都知道,它的全称是循环冗余校验(Cyclic Redundancy Check, CRC),用来校验文件是否出错但并不能用于自动纠错。。emmmm,计组上课好像讲过,老师让我们回去自己学,记得当时只是初略了解了一下,就是在后面加上一小段冗余位去检测,详细规则谷歌一下吧。。。。

CgsjPO.md.png

这里我以破解四位CRC的压缩包为例。。。。写一个理解之后的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#coding:utf-8

import binascii
import string

dic=string.printable #各种打印字符

crc = '''你的输入 ''' # 记得要以0x开头
def CrackCrc(crc):
for i in dic :
for j in dic:
for p in dic:
for q in dic:
s=i+j+p+q
if crc == (binascii.crc32(s) & 0xffffffff):
print s

特别注意

1
if (binascii.crc32(str(i)) & 0xffffffff) == crc:

在 Python 2.x 的版本中,binascii.crc32 所计算出來的 CRC 值域为[-2^31, 2^31-1] 之间的有符号整数,为了要与一般CRC 结果作比对,需要将其转为无符号整数,所以加上& 0xffffffff来进行转换。如果是 Python 3.x 的版本,其计算结果为 [0, 2^32-1] 间的无符号整数,因此不需额外加上& 0xffffffff 。

下面就bugku那道多个压缩包为例,上脚本

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
36
37
38
39
40
#coding:utf-8

import binascii
import string
import zipfile
# def tansnum(s):
# return int(s, 16) 转十六进制


dic=string.printable

def CrackCrc(crc):
for i in dic :
for j in dic:
for p in dic:
for q in dic:
s=i+j+p+q
if crc == (binascii.crc32(s) & 0xffffffff):
print s
#return


def getcrc32():
l=[]
for b in range(68):
file = 'out' + str(b) + '.zip'
f = zipfile.ZipFile(file,'r')
GetCrc = f.getinfo('data.txt')
crc = GetCrc.CRC
l.append(hex(crc))
return l



if __name__ == "__main__":
#c = open('out.txt', 'w')
l = getcrc32()
for i in l:
CrackCrc(i)
#c.close()

如果上面的python操作zip文件还不太懂的话看看这个:(http://www.cnblogs.com/sun-haiyu/p/7082063.html,简单的来说就是用ZipFile读取文件,用getinfo函数获取信息。。。
特别注意,上面的脚本跑这一题十分慢,我跑了差不多40分钟都没跑完。。。效率极低,所以啊有空我还是学习一下多线程该怎么跑。。。

另外还有一款很好用的6位的CRC32爆破

附上神器:(http://github.com/theonlypwner/crc32
具体使用方法:

1
python crc32.py reverse 你的crc32密文

这里的密文记得加上0x变成16进制。。。即可非常迅速的爆破出对应的数据,举个例子

CgszxH.md.png
这里就有点哈西冲突的体现了^_^

这个CRC32爆破一旦超过六位,我觉得毫无疑义,毕竟密码超过7位你爆破需要花很长的时间,对于这个也一样。。。。
这就从另外一个角度诠释了什么叫无法破解的密码(#^.^#),虽然这一个东西也会出现类似哈希冲突的现象。。。。。。

参考文章
http://www.360zhijia.com/360anquanke/217342.html
http://skysec.top/2017/06/19/CRC爆破总结/


听说,打赏我的人最后都成了大佬。



文章目录
  1. 1. 前言
  2. 2. 正文
    1. 2.0.1. CRC想必大家都知道,它的全称是循环冗余校验(Cyclic Redundancy Check, CRC),用来校验文件是否出错但并不能用于自动纠错。。emmmm,计组上课好像讲过,老师让我们回去自己学,记得当时只是初略了解了一下,就是在后面加上一小段冗余位去检测,详细规则谷歌一下吧。。。。
    2. 2.0.2. 这里我以破解四位CRC的压缩包为例。。。。写一个理解之后的脚本
    3. 2.0.3. 另外还有一款很好用的6位的CRC32爆破