记一次压缩包中短文本文件的crc32碰撞

发布于 2020-10-29  350 次阅读


之前碰到的crc32碰撞题,都是3~4位的,拿我的土制python脚本就可以跑出来。

import time
import zlib

def fuc1(str, times, len, pswdall, crcall): # 所有位置的可能字符一样
    times += 1
    for i in pswdall:
        if times == len:
            #print(str + i)
            crc = zlib.crc32((str + i).encode())
            if crc in crcall:
                print(hex(crc)[2:], str + i)
                #print(time.asctime())
        else:
            fuc1(str+i, times, len, pswdall, crcall)

def fuc2(str, times, len, pswdall, crcall): # 不同位置的可能字符不一样
    times += 1
    for i in pswdall[times-1]:
        if times == len:
            #print(str + i)
            crc = zlib.crc32((str + i).encode())
            if crc in crcall:
                print(hex(crc)[2:], str + i)
                #print(time.asctime())
        else:
            fuc2(str+i, times, len, pswdall, crcall)

print(time.asctime())
fuc1("",0,3,"abcdefghijklmnopqrstuvwxyz",{0x96fd05bb,0x60f363de})
print(time.asctime())
fuc2("",0,3,["wm","ko","re"],{0x96fd05bb,0x60f363de})
print(time.asctime())

但是今天碰到一个五字节的文本需要进行crc32碰撞,然后我的土脚本就顶不住了,跑了半天没跑出来。
学长说有个叫hashcat的神奇工具,我就去找了找,但是这玩意的中文资料特别少,关于咋碰撞crc就更少了,于是只好慢慢爬外网论坛,终于总结出了如下命令行。

hashcat -m 11500 -a 3 hash.txt ?a?a?a?a?a -i --increment-min 4 --increment-max 5 --outfile-autohex-disable --keep-guessing

  1. -m 11500
    指定hash函数为crc32
  2. -a 3
    指定攻击方式为掩码爆破
  3. hash.txt
    指定目标hash的所在文件(自己创建的),文件内容如下:
    397e0355:00000000
    96b1eaef:00000000
    73fcc42d:00000000
    后面的:00000000是我在外网论坛的网友建议下加上的,具体原因不明,反正不加就没法跑crc32
  4. ?a?a?a?a?a
    5位ascii字符作为掩码
  5. -i --increment-min 4 --increment-max 5
    期望明文长度4~5位
  6. --outfile-autohex-disable
    禁用输出结果智能转hex,不禁用的话,带特殊字符和标点符号的明文会以hex形式显示。
  7. --keep-guessing
    开启持久化攻击,这样子就能把所有可能明文给全跑一遍,而不是找到一个符合条件的明文就停止了,因为crc32的明文重复率比较高

然后因为我没指定结果的输出目标,所以默认会把结果输出在hashcat.potfile文件中。
最后得到结果如下:

96b1eaef:00000000:-_-#
397e0355:00000000:*:eja
96b1eaef:00000000:VaD's
397e0355:00000000:6u9ku
73fcc42d:00000000:h0rs3
96b1eaef:00000000:&]5"#
96b1eaef:00000000:w?TN?
397e0355:00000000:FIHn%

最后,这些明文就可以挑选合适的拿去继续解题了。


以上。
感觉又学到了好多