random

题目:http://ctf.mxx307.com:8000/challenges (mt19937专题训练)
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 = 'flag{' + md5(str(random.getrandbits(32)).encode()).hexdigest() + '}'
print(flag)
2326314790
719518148604433429
71454731474622825865027545733
4137668267
9531557392694501274
74570456729078206891761288244
4157754977
3946102453515912184
40097319143813742390633773364
1038853348
10666615833034885445
36710470965032902465709786028
1321965918
1798644124741487138
577152584624630300710890139
4232241283
6687819278724140063
24751154429676122909335992615
2995867315
1327548085451204804
34911828835739196554051568431
3492916941
7587398202108464882
23859156362254866215290500915
2132156841
8439172595214685025
54249375218112604570028914942
4233016914
15715548064409345333
3516546914086253580840863811
2863782218
2740678907334825848
75518404045766161849526399626
353712835
1570441271495869757
59394931975522934380428522119
3568999239
17432684669267962068
48146736718880714285894913522
2047105199
2375574968489660269
72727093326729991966666724122
256936163
7691897227971743877
7626338530825528859593013599
2230524843
8772185613788279929
75363451339472972950293533618
749738656
18055832553422093652
34833112001171512488119005560
1289906570
5896460139670269603
16943823462102638834688011221
3094516572
8225745537279752966
70295012202291315645696689011
51631508
14342187157247019729
17224314831668903185533926889
2577553040
10853559611863235874
41563551660688371578284670124
3406081480
2123110978626988560
54984136660082802077211963420
3371095674
18430485890788360413
23976094441937689748750073697
3983212863
11522873964903011432
1714934461537918077186617305
2099472261
11030395695591829581
47463417412540545227726998351
643865984
1765290028070949155
4796002922903512493650622607
2680079844
4222704321249388482
43278987944756404880564818907
1892470219
13607369051068063263
66128293309213871498013234484
1028399070
5804127730795392422
62830277348364578759346278704
3656368723
12362706861747253650
8550526028547045792641381894
1528332936
5174948910250441673
53866330207956679137619064251
1178147084
2306021796856596638
15989241720179063995116833508
3491352497
14246736639759136095
70000988545308913681559442649
2170754766
16201730428726781102
68331884374225560772699931498
1582742338
7270827396374935286
35937890984751207622525001918
1865410690
15864546593609579069
74821415344676224542830782847
2229114877
17484574920472005287
51084004236024506075057427800
2755244012
16004432876972167007
73908957523253962502860099834
2431936214
15910866686846960114
3758778309519275179792313794
3623963178
7395305424917279389
40601007118368732756186458366
2606774970
2363094837237935455
33291650851769793667191728374
1644597057
754689802394102867
7896680845082530601439685967
1024829317
8934948819513347439
61127298406361206467924522181
485314592
18137816858061570645
4443695307054187758087251239
3133144166
11293763290398729991
8885390453431383089555875059
1307010304
13537033352949555747
5139294911697690680055221754
3787329396
8068485913471033880
76001956975166508564015211509
1708466121
6632389748509104086
51984422647433019374013230513
2600629655
6446380845470304153
39026170225252947135819113814
3947277115
248248747143661626
73654900147916328731584767109
4111288662
4383341760610752137
59044146833460693927747901370
4191470888
6697949800555062909
67824484417780019866733238090
24350839
3373188417228082426
50197307871325617630963260813
881684135
7171317348366169274
4663616715500684154662829390
3701227384
4488316654307756561
37500688704919647113047205432
2005404481
3932290244250823722
5765002823130730984243169424
3025603170
7167888969496021472
2391117861585666179043764699
1575219245
10091464449302914368
43274921934903890314559063359
1637779207
10805322886038718627
76645345590150433833785059627
2599794460
13331850084481583099
60793303810014660850126508882
2650107024
16060893256194235649
30537362474874342950499121067
952171620
9931707243615244872
11341242733245404362976168028
1046200111
10979637936914213899
1688496994793487973285919291
3938440775
1306769199798890676
67408062325825091770063963902
3612078433
779013337614398
69272941730470842398685213459
211215977
6593057291617014275
74393982278385182331054240847
1038388871
14106316737629676965
64704186269054907700853326069
639493066
8497419189598689999
12359340603014516200943439318
1204852192
7123365880643023619
43473740808507546554375330946
2538812361
1099830506315641093
66659509210654943287184414796
2560608540
8731706789056767862
37181359327379565508185971062
2989792522
221235571540897825
59922093718534501249653310146
2058642550
2558049127433479702
26278525227269485068106717565
396693836
11408662889776229862
30681659219411735417443376835
3057919231
13134563196173965385
72279030420782690131962782704
952720370
15112266355928967150
4074562681006658685304788079
4198404361
1555368803406124459
57028920026083111982355526935
3209194251
1272652433245896804
24588704208981072754240340127
1628433496
16459525445804104877
34524609174671308382859155255
3824063054
2870237635982672354
13957569548025135906420649811
356425563
8602866144491757047
51220572920020459639388090720
1928039518
5184429553400439759
60109901768747838986746172947
3593506805
15885704230333317106
29835061619592208667096445206
294018746
4102078661326638152
78404751808003243628872834127
2984511391
8774917820673882225
18644323563662631165534946602
1775416503
5114824873327108302
36305844501795085977961822889
3952372461
5911928575869564642
34546275672880742208670858393
4263153152
999185395209736301
66365168548348795906480074752
1921973737
938050486420153834
59917460344945241999161481521
3534175466
14917601158256992894
61748269505571009831308411310
3838877530
14416879900887667125
65502502201242195510203902304
2086909517
8507425219096935053
19735740426201899441607517607
103163911
4418903711255814067
8153004071727350504079806271
1893422484
15021112291899914847
43677890062199511622735204808
1516935633
17567806379306306468
23324062173927285523641675379
306682002
9962147024585268872
23042564363427876774882809075
528843317
2828267771060074241
44714501077540979764634785964
1817319365
12296470189813686230
15071173136668817878396832003
2683809276
17692605139270076335
49593509664255268506468028725
639138649
8706482347393960870
7820555315572103021512869786
1965497513
13835164184436474349
12907370455197935605173365410
3976024273
7221589480085829832
74840412048845685806363070035
2331835345
8043064895915378012
45850919122178856011057677745
2609729526
887584085808714593
63342410064507581230056089780

解题:

from hashlib import md5
from randcrack import RandCrack
def foo(l,i):
    a=[]
    a.append(l[i])#在列表a最后(末尾)添加一个元素l[i]
    b1=l[i+1]>>32#对于64位的各二进位全部右移32位,对无符号数,高位补0
    b2=l[i+1]&(2**32-1)#两个位都为1时,结果才为1
    a.append(b2)
    a.append(b1)
    b1=l[i+2]>>64#对于96位的各二进位全部右移64位,对无符号数,高位补0
    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]#i.strip()用于移除字符串头尾指定的字符,int(i.strip())???
ll=[]#新建数组
for i in range(0,len(l),3):#range(start, stop, step)计数从 start 开始,计数到 stop 结束,但不包括 stop,步长,默认为1
    ll+=foo(l,i)#将随机数放入数组中
rc=RandCrack()
for i in ll:
    rc.submit(i)#提交数组中的随机数
aa=rc.predict_getrandbits(32)#预测下一个32位随机数
print(md5(str(aa).encode()).hexdigest())#md5编码输出
for i in range(0,len(l)):
 print(ll[i])
#我们了解到 MT19937能做生成在 1≤k≤623 个32位均匀分布的随机数。而正巧我们已经有624(104 + 104 ∗ ( 64 / 32 ) + 104 ∗ ( 96 / 32 ) = 624)个生成的随机数了,也就是说,根据已经有的随机数我们完全可以推出下面会生成的随机数。
#方法二
with open(r'D:\py.code\mt19937\random.txt','r') as f: l=f.readlines() l=[int(i.strip()) for i in l] print(l) predictor = MT19937Predictor() for i in range(0,312,3): predictor.setrandbits(l[i], 32) predictor.setrandbits(l[i+1], 64) predictor.setrandbits(l[i+2], 96) # assert random.getrandbits(32) == predictor.getrandbits(32) flag = 'flag{' + md5(str(predictor.getrandbits(32)).encode()).hexdigest() + '}' print(flag)

答案:

flag{8b3b14ce2cb0b1a0a4aa6e4e8a582c55}

posted @ 2022-06-28 14:06  Jjyyyyy  阅读(193)  评论(0编辑  收藏  举报