4.Rar file without password
rar的压缩文档中是提供一个CRC32的值,这个值是文档在压缩之前的CRC32值,相信很多人都知道:每个不同的文件都有基本唯一的一个CRC32值。
CRC全称为循环冗余校验(Cyclic Redundancy Check, CRC),用来校验文件是否出错但并不能用于自动纠错。这种爆破方式只适用于文本文件较小的情况下,如果很大,不如去爆破密码。基本上不同文件都有唯一的CRC32值,那么在文件内容较小的情况下就更不可能重复了。
因为txt文本中的内容较短,所以我们可以用暴力穷举文本内容,只要找到相同的CRC码,即找到正确的文本内容。
源代码:CRC32.py
import binascii
#import string
#各种打印字符
#dic=string.printable
dic=range(0,128)
crc = 0x05665E74 # 记得要以0x开头
def CrackCrc(crc):
for i in dic :
for j in dic:
for p in dic:
s = str(chr(i)+chr(j)+chr(p)).encode("utf-8")
#在 Python 2.x 的版本中,binascii.crc32 所计算出來的 CRC 值域为[-2^31, 2^31-1] 之间的有符号整数,为了要与一般CRC 结果作比对,需要将其转为无符号整数,所以加上& 0xffffffff来进行转换。
# 如果是 Python 3.x 的版本,其计算结果为 [0, 2^32-1] 间的无符号整数,因此不需额外加上& 0xffffffff 。
#if crc == (binascii.crc32(s) & 0xffffffff):
if crc == binascii.crc32(s):
#Python3中字符都为unicode编码,必须先转码utf-8
print(str(s,'utf-8'))
print("CRC冲撞攻击解密的明文为:"+str(s,'utf-8'))
CrackCrc(crc)
实验结果截图:
最后rate.rar中的rate.txt解密的明文为:77%。