一、原题
[原题链接]
每个人的一生中都会或多或少有那么几个对自己很重要的日子,比如对于我来说,这一天就很重要。
答案格式wctf{日期} //友情提示,此题需要暴力破解,但只是爆破这段密文,不是爆破这个网站。。 = =!
就是这一天↓
4D1FAE0B
二、writeup
没有思路,看提示,crc32
。
CRC(循环冗余校验法)的百科:[CRC]
以前看过,具体的细节忘了,对照资料回忆了一下,CRC是网络传输中经常用的一种校验方式。
其中CRC32则是采用这样的一个多项式生成式的CRC:
X32+X26+X23+X22+X16+X12+X11+X10
+X8+X7+X5+X4+X2+X+1
python
中有现成的库计算crc32
,参考[python计算CRC32]
参考以上链接给的函数:
import zlib
def crc32(st):
crc = zlib.crc32(st)
if crc > 0:
return "%x" % (crc)
else:
return "%x" % (~crc ^ 0xffffffff)
然后对所有的日期进行穷举,这里先限定日期的范围为'10000101'~'30001231'
,看能否找到结果。
#生成年'1000'~'3000'
year = [str(i) for i in range(1000,3000)]
#生成月'01'~'12'
month = [str(i) if i>9 else (str(0)+str(i)) for i in range(1,13) ]
#生成日'01'~'31'
day = [str(i) if i>9 else (str(0)+str(i)) for i in range(1,32) ]
#题目所给
realDate = '4D1FAE0B'.lower()
#穷举日期计算crc32值然后与题目给的值进行比对,一样则输出
import itertools
#利用itertools.protduct()生成年月日的所有组合
for item in itertools.product(year,month,day):
date = ''.join(item)
if crc32(date) == realDate:
print date
得到结果
20190804
提交,无误。
三、flag
wctf{20190804}
四、总结
- [CRC(循环冗余校验)]
- 有空自己实现一下
CRC
- python中
itertool
模块非常实用