IDF实验室-特殊的日子

本文介绍了一次解密挑战,涉及CRC32校验的使用。作者通过回顾CRC的基本原理,利用现有库对特定日期范围进行穷举,成功找到了解密的关键日期20190804,从而得出flag:wctf{20190804}。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、原题

[原题链接]
每个人的一生中都会或多或少有那么几个对自己很重要的日子,比如对于我来说,这一天就很重要。

答案格式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}


四、总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值