首页 > 其他分享 >CRC32爆破脚本 + [MoeCTF 2022]cccrrc 题解

CRC32爆破脚本 + [MoeCTF 2022]cccrrc 题解

时间:2024-10-23 12:48:55浏览次数:14  
标签:文件 字节 题解 校验 CRC32 crc32 cccrrc MoeCTF 压缩包

CRC32爆破原理介绍:

CRC(循环冗余校验)是一种用于检测数据传输错误的技术。

CRC算法生成一个校验值(校验和),这个值可以附加到数据后面,在数据接收方重新计算校验值并与附加的校验值进行比较,以此来确定数据是否在传输过程中发生了错误

CRC32是一种常用的CRC算法,它的校验值长度固定为32位,具体来说:

  • 位数:CRC32产生的校验值是一个32位(4字节)的无符号整数
  • 范围:32位无符号整数的范围是从 0x000000000xFFFFFFFF,即从0到4294967295

 

爆破CRC32值获取压缩包文件内容的原理就是:

每个文件都有唯一的CRC32值,虽然不知道压缩包的解压密码,但是如果知道压缩包中文件的大小和CRC32值

那么通过不断穷举数据,直到穷举的字符串内容的crc32值与压缩包中文件的crc32的值相同时就匹配成功,即找到了文件的内容,这样就可以达到暴力破解的目的,而不需要获取压缩包解压密码

但是crc32爆破的适用条件也很明显,方法的关键是暴力枚举,所以只适用于文件大小较小的文件,一般是低于5字节(byte)     超出这个大小就很难利用这种方法得到结果

既然需要暴力枚举,那么用脚本来进行操作是不可或缺的,结合下面的ctf例题 题解中会给出脚本,是4字节文件的crc32爆破脚本,并且详细解释代码的思路和用到的函数和类的作用

[MoeCTF 2022]cccrrc

题目给出的压缩包文件中有四个文件,需要密码才能解压缩

对于加密的压缩包进行解压缩时,如果题目给出的文件没有发现与密码有关的提示,无从下手,可以考虑几个解题思路:

伪加密    暴力破解密码  文件分离 明文攻击   crc32爆破 等

因为这里讲的是crc32爆破,所以其他思路经过尝试当然是不可行的

推荐用winRAR 打开压缩包,可以看到文件大小信息和crc32值,比较方便,虽然有广告但是瑕不掩瑜

看到压缩包中的四个文件大小都是4字节,所以很符合crc32爆破的条件,下面就是利用脚本爆破

脚本中的关键代码给出了注释,便于理解

脚本:

import string
import binascii
import zipfile

#四字节文件内容crc爆破
def CrackCrc(crc):
    for i in dic:
        for j in dic:
            for p in dic:
                for q in dic:
                    s = i + j + p + q    #枚举4个字节的字符串
                    s = s.encode()    #encode()方法用于将字符串转换成字节串(bytes),用于处理二进制数据
                    if crc == (binascii.crc32(s) & 0xffffffff):      
                        #binascii.crc32()接受一个字节串 (bytes) 作为参数,并返回一个整数,表示计算得到的 CRC32 校验和,& 0xffffffff 用于确保结果是一个32位(4字节)无符号整数
                        return s
def CrackZip(txt):
    f = zipfile.ZipFile('F:\\CTF\\NSSCTF_杂项\\cccrrc\\cccccrc.zip', 'r')    #读取zip压缩包文件
    GetCrc = f.getinfo(txt)     #使用 getinfo 方法获取ZIP压缩包中指定文件的信息并赋值给GetCrc,GetCrc被赋值为一个ZipInfo 对象,它包含了文件的各种信息,包括CRC值
    crc = GetCrc.CRC           #自动获取文件的crc32值,获取的是crc32值的十进制格式
    #print(crc)               
    s1=CrackCrc(crc)
    return s1

dic = string.printable     #包含所有可打印的ASCII字符

#打印压缩包中的所有文件名,不是必要的步骤,只是顺手获取信息
with zipfile.ZipFile('F:\\CTF\\NSSCTF_杂项\\cccrrc\\cccccrc.zip', 'r') as zip_file:
    # 使用namelist()方法获取文件列表
    file_list = zip_file.namelist()
    print(file_list)

flag=b""   #b表示字节串
for i in file_list:
    flag+=CrackZip(i)
    print(flag)

 

标签:文件,字节,题解,校验,CRC32,crc32,cccrrc,MoeCTF,压缩包
From: https://blog.csdn.net/weixin_73904941/article/details/143169378

相关文章

  • P8814 [CSP-J 2022] 解密 题解
    解方程$题目中说,n=pq,ed=(p-1)(q-1)+1,m=n-ed+2.$$把ed的式子展开,得到:$$ed=p(q-1)-(q-1)+1$$ed=pq-p-q+2$$再把展开后的式子带入m中,得:$$m=n-(pq-p-q+2)+2.$$m=n-pq+p+q-2+2$$\becausen=pq$$\thereforem=pq-pq+p+q-2+2$$m=p+q.$$如果想要求出p和q的值,那么可以再......