python 脚本爆破 CRC32

python 脚本爆破 CRC32

参考链接

https://blog.csdn.net/weixin_42350229/article/details/104073077

确定文件的长度

pig@deep:~/Desktop/crc32碰撞$ zipinfo flag.zip
Archive:  flag.zip
Zip file size: 166 bytes, number of entries: 1
-rw-a--     6.3 fat        4 Bx stor 19-Oct-29 20:52 flag.txt
1 file, 4 bytes uncompressed, 4 bytes compressed:  0.0%

这里是 4 字节, 所以下面要爆破 4 位, 写 4 层循环

代码

import string
import zipfile
import binascii

# dic 的内容是所有 ASCII 数字和大小写字母加上特殊符号, 也就是 flag 的常见内容
dic = string.ascii_letters + string.digits + '+-={}'

def getcrc():
    '''
    获取文件的 CRC32 值, 不过这玩意可以直接用 7z 看
    '''
    f = zipfile.ZipFile("flag.zip", "r") # 目标文件是 flag.zip 里面的 flag.txt
    GetCrc = f.getinfo("flag.txt")
    crc = GetCrc.CRC
    jisuancrc(crc) # 将得到的crc的值传递给接下来需要计算crc的模块

def jisuancrc(crc):
    '''
    主循环, 你要爆破几位, 这里就写几个循环
    '''
    for a in dic:
        for b in dic:
            for c in dic:
                for d in dic:
                    s = a + b + c + d
                    s = str(s).encode() #注意python2和python3之间的编码方式的不同, 如果是python2版本则不需要这行
                    if (binascii.crc32(s)) == crc: # 如果是python2还需要加上0xfffffff 使crc值都是正值,python3则不需要
                        print (s)
                        return

if __name__ == "__main__":
    jisuancrc(crc)

HDCTF 你明白 lsb 的含义吗

import string
import zipfile
import binascii

crc = 0x7ba3bb27
dic = '1234567890'

def jisuancrc(crc):
    '''
    主循环, 你要爆破几位, 这里就写几个循环
    '''
    for a in dic:
        for b in dic:
            for c in dic:
                for d in dic:
                    for f in dic:
                        s = a + b + c + d + f
                        s = str(s).encode() #注意python2和python3之间的编码方式的不同, 如果是python2版本则不需要这行
                        # 如果是python2还需要加上0xfffffff 使crc值都是正值,python3则不需要
                        if (binascii.crc32('131'.encode() + s + '262'.encode())) == crc:
                            print('131'.encode() + s +'262'.encode())
                            return

if __name__ == "__main__":
    jisuancrc(crc)

TypeError: can only concatenate str (not "bytes") to str

报错, 不能把 '131' 和 s 和 '262' 连起来, 需要对 '131' 和 '262' 进行编码

'131'.encode() + s + '262'.encode()

最终结果如下

$python -u "d:\CTF\MISC 工具包\题目\HDCTF\misc\你知道lsb是什么意思吗_\crc32_lsb.py"
b'13118975262'