sky's blog

CRC32爆破总结

字数统计: 483阅读时长: 2 min
2017/06/19 Share

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
21
import 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位及其以上的我就没有尝试过了,因为感觉已经不太现实了,不但时间上需要耗费极大,而且还会出现大量的冗余,不容易找出需要的项
本人技术渣渣,有高见的欢迎找我讨论,还给我留言~

点击赞赏二维码,您的支持将鼓励我继续创作!
CATALOG
  1. 1. 0x00 前言
  2. 2. 0x01 5位及5位以下的CRC32爆破
  3. 3. 0x02 6位的CRC32爆破
  4. 4. 0x03 后记