完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
[GKCTF 2021]Random
题目 import random from hashlib import md5 def get_mask(): file = open(“random.txt”,“w”) for i in range(104): file.write(str(random.getrandbits(32))+“n”) file.write(str(random.getrandbits(64))+“n”) file.write(str(random.getrandbits(96))+“n”) file.close() get_mask() flag = md5(str(random.getrandbits(32)).encode()).hexdigest() print(flag) 解题 通过读代码,知道是求生成104组随机数之后的一个随机数 通过算法出的随机数是伪随机数, randcrack 工作原理 该生成器基于Mersenne Twister,能够生成具有优异统计特性的数字(与真正的随机数无法区分)。但是,此生成器的设计目的不是加密安全的。您不应在关键应用程序中用作加密方案的PRNG。 这个饼干的工作原理如下。它从生成器获得前624个32位数字,并获得Mersenne Twister矩阵的最可能状态,即内部状态。从这一点来看,发电机应该与裂解器同步。 如何使用 将生成器生成的32位整数**准确地输入cracker非常重要,因为它们无论如何都会生成,但如果您不请求它们,则会删除它们。 同样,您必须在出现新种子之后,或者在生成624*32位之后,准确地为破解程序馈电,因为每个624 32位数字生成器都会改变其状态,并且破解程序设计为从某个状态开始馈电。 脚本参考 from hashlib import md5 from randcrack import RandCrack def foo(l,i): a=[] a.append(l[i]) b1=l[i+1]》》32 b2=l[i+1]&(2**32-1) a.append(b2) a.append(b1) b1=l[i+2]》》64 b2=(l[i+2]&(2**64-1))》》32 b3=l[i+2]&(2**32-1) a.append(b3) a.append(b2) a.append(b1) return a with open(r‘random.txt’,‘r’) as f: l=f.readlines() l=[int(i.strip()) for i in l] ll=[] for i in range(0,len(l),3): ll+=foo(l,i) rc=RandCrack() for i in ll: rc.submit(i) aa=rc.predict_getrandbits(32) print(md5(str(aa).encode()).hexdigest()) 运行得到:14c71fec812b754b2061a35a4f6d8421 答案 GKCTF{14c71fec812b754b2061a35a4f6d8421} (坑人,检查好几遍不知道哪错了,最后发现错到格式上了)。 |
|
|
|
只有小组成员才能发言,加入小组>>
2434 浏览 0 评论
9099 浏览 4 评论
36771 浏览 19 评论
5025 浏览 0 评论
24743 浏览 34 评论
1527浏览 2评论
1742浏览 1评论
2192浏览 1评论
1552浏览 0评论
523浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 13:11 , Processed in 1.215838 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号