Buuctf zip--crc暴力破解多个小文件

解压得到out0.zip---out67.zip68个zip文件,

但是里面压缩包加密的data.txt都比较小,都为4字节,尝试crc32爆破

借用大神脚本,我做注释

这段Python脚本的功能是破解一个包含多个zip文件的文件夹中的每个zip文件的CRC32校验值,并将破解成功的结果写入到一个名为"out.txt"的文件中。

具体的实现逻辑如下:
1. 导入了zipfile、string、binascii和os模块。
2. 定义了一个文件路径filepath,并将当前工作目录更改为该路径。
3. 定义了一个函数CrackCrc,用于破解给定的CRC32校验值。该函数通过四层嵌套循环遍历一个字符集合dic的所有可能组合,将每个组合转换为字节流并计算其CRC32校验值,然后与给定的crc进行比较,如果相等则将该组合写入到文件f中并返回。
4. 定义了一个函数CrackZip,用于破解每个zip文件的CRC32校验值。该函数通过一个循环遍历68个zip文件,获取每个zip文件中名为"data.txt"的文件的CRC32校验值,并调用CrackCrc函数进行破解。
5. 定义了一个字符串dic,包含了大小写字母、数字和字符"+/=",用于生成可能的组合。
6. 打开一个名为"out.txt"的文件f,用于存储破解成功的结果。
7. 打印"CRC32begin"。
8. 调用CrackZip函数进行破解。
9. 打印"CRC32finished"。
10. 关闭文件f。

import zipfile  # 导入zipfile模块,用于处理zip文件

import string  # 导入string模块,用于生成字母和数字

import binascii  # 导入binascii模块,用于进行CRC32校验

import os  # 导入os模块,用于文件操作

filepath = r'./'  # 设置文件路径

os.chdir(filepath)  # 切换当前工作目录为指定路径

def CrackCrc(crc):

    # 定义一个函数用于破解CRC32校验值

    for i in dic:

        for j in dic:

            for k in dic:

                for h in dic:

                    s = i + j + k + h  # 生成四个字符的组合

                    if crc == (binascii.crc32(s.encode())):  # 判断CRC32校验值是否匹配

                        f.write(s)  # 将匹配的字符串写入文件

                        return

def CrackZip():

    # 定义一个函数用于破解zip文件

    for i in range(0, 68):

        file = 'out' + str(i) + '.zip'  # 构造zip文件名

        crc = zipfile.ZipFile(file, 'r').getinfo('data.txt').CRC  # 获取zip文件中data.txt的CRC32校验值

        CrackCrc(crc)  # 调用破解CRC32校验值的函数

        print('\r' + "loading:{:%}".format(float((i + 1) / 68)), end='')  # 打印加载进度

dic = string.ascii_letters + string.digits + '+/='  # 定义字符集,包括大小写字母、数字和'+/='符号

f = open('out.txt', 'w')  # 打开一个文件用于写入破解结果

print("\nCRC32begin")  # 打印开始破解提示

CrackZip()  # 调用破解zip文件的函数

print("CRC32finished")  # 打印破解完成提示

f.close()  # 关闭文件



 

out.txt里是base64编码,去解码

Base64 在线解码、编码

点击右下方的unkown文件,下载,winhex打开,怀疑是rar文件,添加rar文件头:52 61 72 21 1A 07 00,保存为flag.rar

zip文件格式及伪加密解题思路

  • 21
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值