目录 Table of Contents
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'