CTF比赛

     成为大牛的第一步就是学习大牛们对于知识的积累~~

     前段时间报名了金融密码杯,对于大牛们口中的签到题,我都觉得很难。记录下来赛后自己的一些总结,也为自己的博客涨涨人气哈哈~

     

这一次先分享一下第三题,题目如下:

Mathematical
50分
小张是某金融科技公司的运维人员,最近遇到了一件烦心事,自己维护的服务器明文密码忘记了,但是找到了明文对应密文的加密算法,通过分析以下脚本,你能帮小张找回服务器密码吗?答案请用flag{密码}表示,例如flag{pass1234}

然后题目给了一个脚本如下:

from Crypto.Util import number

from gmpy2 import *

from secret import flag

e = 65537

p = number.getPrime(2020)

q = number.getPrime(2020)

n = p*q

print n 

r =  number.getPrime(150)

phi = (p-1)*(q-1)

d = invert(e,phi)

k = (p-r)*d

print k

constant = 21984859824026882810575522264245671634373273283085819951236985457203975991204630506817354315760888340497144753325078495829441321520328008

enc = pow(flag,e,n)

print enc

#n = 6208295095230965527051536112000533217839751707756137908689973343594740737273300354882129471790714061579212141521581437573460066428133649162617863798753061370588336642335739339329613056883099651589308826111251776898753907314632389883177359017441888763223292622107128583258543531273336647405476200600917013260267314276022159445864197757712897885890854119653893171237545237981945487975245520840182827388451488702292468728600894312080618460031716132281505447335749736831056784298081375564578927881638220995825783699017195380034033633092930114002940220082046160549839416526065794581431429452394640960314664745748345227111821047784999527563842871234894970512905495663697240904372920397005450669334608992877133419875553875614453855618749883285471661896614833691033148699474686541316002300677547538245923306083943090911305974072563616074243672776429442348786508433149702766447560408164285366303627833919809181061145119509318456203914995302340361618091130936945986909934911722676548619873395539367474494509438516170722972298004960507801571285491242421724552425359334100565459242186463476014933104548497198625413988182897958933335697662011218563183239333745855774679553947704835779907385101526868306238220311371681276863842231

#k = 174702896315117390718298550391733401770697163847889747416364150400419812071457698494398043304401359739938563272125249211135824393385102061842977026829760629419742000557000963040827888604358013660061225334148832195220259528792531111936988654351045546936541543605127776624260793527487095106531932444142586693591607594750134838434470057526225241675399283876710489046107485931333061116247820913203944886266682068729851681413999395889518117948259592988022573702549030153060793486912550292914671330697470182981310074516969558680442408176452549741581379882955106745012064109454462769581833363439333786396266084989594634232957948965219390777777545170747435360180248098889932493057730872369009094398065442899060004383505999512203518664609795157759350078816781770322631263792090749872633814326298094388072222285964930775160710511638462379786468669231646956446691746833228078591390375659486369797990486495500362103141415966391199947702708931019998496563589441223400733409451140485297753692328570193425464759227119448672966411646082176073007418127284333323954117803525715930782589109348511179812599213788322336195029451637432118511059679197840096617262213370886378526356977166213683890645808447823390128172512097177488442334924515499710337871516123611521172247200806205903791817987645980356817928986880798238418424044295831972837153091486095043907068268400119329629419287317761829035888796256156007987635671529878148201972919111890003223978148999780646676130645548906687967084594944669850284116689804534712597140711075997429780131562428140460803670948161951825832257105326362674824886648316277076851327663792233026404886325100529452795193337935126431362534893622991774284118103617317175436518227455386161940363242875774807020460783218591963060392648215987824605731332195705888844735458676177619633219926129455567809866871676456316007682

#enc = 4795383752584993844108516429900258655661133850684807983071809951024460134759443108711074145909903916787198089413007221022708957360387687246839870355853873320697294017198060440536565273293028173149449287858317538701346918185537758158979284778830859951570957039440297443034120895547087835155290991383854801865693151448144864280946260237799144242603047953661573879773697195696931305160351524780656251285150716877471124822978853888136398127235399185024540381484422531594988834393950441752346442081320006303897535117725780985810927050047417232272737534953530835287354839216047459279586160388879667632181304071755107446032180443940895072258776134576187686901154748162848341532366356932681486492014760528711156453506050743800569562706083682519279189677643805371751092585778158805420204598082895239498745045959757904340141459680787846778202752411527631773720922322510572433358025752903092041363930741249051500266046069790070705316167071788993233531210102049461238375258234005083647266408322008954149845330842701381602137178841481123296635974736568689673738594360438783452112994409770607969904487028956775307780187978779426080243193778210339547019908431953870315056108247202334941716764539141863537230973025019209112307218375

#hint:8*r^3+240*r^2+2400*r=constant

上面的脚本在python2.7环境下编译通过,部分依赖库可能需要转换下大小写。

这里推荐几个可能用到的工具:

1.http://factordb.com/ 一个在线分解大数的网站

2.yafu 一个暴力破解n的工具,当n不太大的时候适用

没错,我拿到题目的第一想法就是暴力破解n,然后比赛结束了,yafu的结果仍然没出来...后来我才知道,现在的超级计算机破解的极限可能也就是2048位,而且可能花费的时间是80年左右。虽然据说量子计算机已经能够破解RSA加密了,但是也需要花费8小时左右,而比赛10个题目限时总共都才8小时。

那么我们就需要换一个思路,从k开始突破k=(p-r)*d  k通过http://factordb.com/分解为2*29*47*347*x4,这里x4还是一个大合数,因子未知,分析失败。这条思路也没走通。

最后这个题目解决了,是通过请教大神。大神告诉我这是之前比赛的原题,通过构造法,利用费马小定理简化。求得flag的值后转化成byte,感兴趣的同学可以先尝试一下,具体的推导将在下一篇博文中给出。

猜你喜欢

转载自blog.csdn.net/zhyjie2008/article/details/109034940
ctf