0x00 前言
说到CRC想必大家都知道,它的全称是循环冗余校验(Cyclic Redundancy Check, CRC)
可以根据数据求出对应的CRC,用来发现传送过程中是否有比特错误
然而,我们也应当知道,正面根据数据可以算出对应的CRC,那么根据CRC能否求出数据呢?
答案是肯定的,对于低位数的CRC肯定是可以爆破出来的:
最近在各个CTF平台的加密题里,遇到不少CRC32爆破的题目,今天来做个总结
0x01 5位及5位以下的CRC32爆破
相对4~5位的CRC爆破,时间上也并不算长
这里注意一下,dic的顺序个人感觉挺重要的
5位以下就算了,33~127直接循环也可以
但是我觉得5位的,如果顺序把握的好,可以节省一些时间
比如一些符号出现在开头的几率就比较小
附上≤5位的CRC爆破脚本:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21import binascii
def str2num(s):
return int(s, 16)
dic = '''abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~'''
crc1= str2num("第一个CRC32")
crc2= str2num("第二个CRC32")
crc3= str2num("第三个CRC32")
for x in dic:
for a in dic:
for b in dic:
for c in dic:
for d in dic:
str = x+a+b+c+d
str_crc = binascii.crc32(str)& 0xffffffff
if (str_crc==crc1):
print "crc1:",str
if (str_crc==crc2):
print "crc2:",str
if (str_crc==crc3):
print "crc3:",str
0x02 6位的CRC32爆破
附上神器:https://github.com/theonlypwner/crc32
具体使用方法:python crc32.py reverse 你的crc32密文
即可非常迅速的爆破出对应的数据
0x03 后记
对于7位及其以上的我就没有尝试过了,因为感觉已经不太现实了,不但时间上需要耗费极大,而且还会出现大量的冗余,不容易找出需要的项
本人技术渣渣,有高见的欢迎找我讨论,还给我留言~