hbctf的一个题–>http://hbctf-1252906577.costj.myqcloud.com/misc/flag6.zip
先来writeup:
解压软件打开,可以看到CRC32值。
因为题目提示了是6位数字,匹配CRC32爆破。
import binascii
real = 0x9c4d9a5d
for y in range(100000, 999999):
if real == (binascii.crc32(str(y)) & 0xffffffff):
print(y)
CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。
binascii:二进制和ASCII互转以及其他进制转换
由于CRC32产生校验值时源数据块的每一个bit(位)都参与了计算,所以数据块中即使只有一位发生了变化,也会得到不同的CRC32值.再加上题目提示了6位数字,这就大大缩小了范围,不同的数的CRC32值是不同的,所以可以通过循环匹配来爆破出文件值,即flag。