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}
RSA脚本大多引用自https://lazzzaro.github.io/2020/05/06/crypto-RSA/