欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

moeCTF 2023 crypto

终极管理员 知识笔记 80阅读

这个比赛从8月到10月漫长又不分段。结束了以后前边的都基本上忘光了。还是分段提交的好点有机会写写。不过反正也是新生赛又不是新生只是打个热闹。

ezrot

厨子解决大部分问题

可可的新围墙

给了1个串

mt3_hsTal3yGnM_p3jocfFn3cp3_hFs3c_3TrB__i3_uBro_lcsOp}e{ciri_hT_avn3Fa_j

经过思考发现根据头确定处理的顺序

a  mt3_hsTal3yGnM_p3jb  ocfFn3cp3_hFs3c_3TrB__i3_uBro_lcsOp}c  e{ciri_hT_avn3Fa_jflag  for i in range(18):    flag  a[0]b[0]c[0]b[1]    a  a[1:]    b  b[2:]    c  c[1:]    print(flag)
 皇帝的新密码

tvljam{JhLzhL_JPwoLy_Pz_h_cLyF_zPtwPL_JPwoLy!_ZmUVUA40q5KbEQZAK5Ehag4Av}

结构都已经有了只是这偏移怎么上移法根据头判断

 

不是“皇帝的新密码” 

scsfct{wOuSQNfF_IWdkNf_Jy_o_zLchmK_voumSs_zvoQ_loFyof_FRdiKf_4i4x4NLgDn}

维吉尼亚密码试出头来就出来了

 

猫言喵语

 喵喵 喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵 喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵 喵喵喵喵喵 喵喵喵喵喵喵喵 喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵 喵喵 喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵 喵喵 喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵喵 喵喵喵 喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵喵 喵喵喵 喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵喵喵

有3种符号明显是用空格来分隔的。经测试 喵喵?转成. 喵喵喵 转成- 转成摩尔斯码

- .... . ..--.- -.- .- .-- .- .. .. ..--.- -.-. .- - ..--.- -... ..- - ..--.- -... . ..--.- -.-. .- .-.. .-.. . -.. ..--.- --. --- ..- --.. .. ..--.- -... -.-- ..--.- .-. -..- 

THE_KAWAII_CAT_BUT_BE_CALLED_GOUZI_BY_RX 

baby_e

 

from Crypto.Util.number import getPrime,bytes_to_longp,q  getPrime(2048),getPrime(2048)e  7n  p*qm  bytes_to_long(open(flag.txt,rb).read().strip())c  pow(m,e,n)print(c  ,c)print(n  ,n)# c   147693154873835354725007152781732424355869776162377337823960431913672366269917723916891506269449726723757821517328874729037838600793748824028829185409932536014732765063216715033843955453706710187792772702199448156372644163429786386035008302836467605094954587157232829525150652611067567669525072625329634860065850520051628272535479197120008981979404760445193750864902244921407742155742716289495581989134730376783828846663464819337418977287363028738701414486788851136608957124505485242331701209645216580641917007780811842757125048746184068597664780265422321550909392419865169775282217442331295071069272774722564587602419768461231775480847018941840911357926330143045826277813722919121117172763493242590521245640828462665947672485094793188432098216701511715232654611338293295459889814699850788048985878279440740712956248569068077253790198036918598519191892836075254345518967666166925163908185663991353344555402397055977817370082929420443034626201745027965444069777059760865359310439815816749939498993014457995041394803598825093836045546578310632172636478575946653375857640993393714607308326474003446154152048840071034349831168612740218034679021240949747357214453636633636662650940968576792518622437627529244515229173# n   553409369582823237678532685244026647155180191225879439432235077135813123637186465008813830373646133388592395760175777499266561095087891764348044063111935877931069321764391883899483374576303169645488542398590564148654412004383012178107972880058460460806768779452529433458826925606225797078653905380530651390617109384086518728626571028089036812787671647095695947167204428442727185744172445701874820612799168887428075695751162763647868386879374037826876671079326544820609721731078985096813307183878793033824330869698508952853770794414757655681370862323768018291030331209143189638496644361618184164228294031490537429556439588954274708598530042700988138862000054458742762198052079867259365645914383561162796796952346445529346145323567650621600171442575319262718389389870407629339714751583360252884338116164466349449862781112019462555743429653595045695696967783338371470032332852204294900011651434678829104876529439166176589508898757122660322523937330848536715937381297551894198974459004139082562228022412335520195652419375915216074658463954339332593244483927157329404652516225481116614815221154229491846087288087715884363786672244655901308480290011237244562251084095684531716327141154558809471185132979704992609461470501119328696999713829

很明显e很小而且明显c<n所以可以直接开方

bad_e
from Crypto.Util.number import *p  getPrime(512)q  getPrime(512)e  65537print(p) # 6853495238262155391975011057929314523706159020478084061020122347902601182448091015650787022962180599741651597328364289413042032923330906135304995252477571print(q) # 11727544912613560398705401423145382428897876620077115390278679983274961030035884083100580422155496261311510530671232666801444557695190734596546855494472819with open(flag.txt,r) as fs:    flag  fs.read().strip()m  bytes_to_long(flag.encode())c  pow(m,e,p*q)print(c) # 63388263723813143290256836284084914544524440253054612802424934400854921660916379284754467427040180660945667733359330988361620691457570947823206385692232584893511398038141442606303536260023122774682805630913037113541880875125504376791939861734613177272270414287306054553288162010873808058776206524782351475805

n已经分解好了

flag  long_to_bytes(pow(c,invert(e,(p-1)*(q-1)),p*q))
factor_signin
from Crypto.Util.number import getPrimefrom math import prodwith open(flag.txt,rb) as f:    flag  f.read().strip()assert len(flag)  72m1  int.from_bytes(flag[:36],big)m2  int.from_bytes(flag[36:],big)e  65537p,q  getPrime(2048),getPrime(2048)n1  p*qc1  pow(m1,e,n1)print(c1  ,c1)print(n1  ,n1)primes  [getPrime(64) for _ in range(32)]n2  prod(primes)c2  pow(m2,e,n2)print(c2  ,c2)print(n2  ,n2)

第1部分n1可以查到分解第2部分都是小素数可以很容易分解

c1   10004937130983861141937782436252502991050957330184611684406783226971057978666503675149401388381995491152372622456604317681236160071166819028679754762162125904637599991943368450200313304999566592294442696755822585022667008378021280392976010576970877334159755332946926433635584313137140987588847077645814987268595739733550220882135750267567373532603503399428451548677091911410732474324157868011686641243202218731844256789044721309478991918322850448456919991540932206923861653518190974620161055008847475600980152660468279765607319838003177639654115075183493029803981527882155542925959658123816315099271123470754815045214896642428657264709805029840253303446203030294879166242867850331945166255924821406218090304893024711068773287842075208409312312188560675094244318565148284432361706108491327014254387317744284876018328591380705408407853404828189643214087638328376675071962141118973835178054884474523241911240926274907256651801384433652425740230755811160476356172444327762497910600719286629420662696949923799255603628210458906831175806791599965316549386396788014703044837917283461862338269599464440202019922379625071512100821922879623930069349084917919100015782270736808388388006084027673781004085620817521378823838335749279055639005125n1   343504538870081878757729748260620800783581983635281373321527119223374418103340873199654926888439040391545101913132680017655039577253974802351999985470115474655124168592386965001556620077117966153475518658881140827499124290142523464795351995478153288872749817655925271395693435582010998996210909883510311066017237567799370371513462802547313382594409676803895262837061350017911885033133654781876923251129406855067993830824618637981136966134029212516871210627954762147349788788999116702635535406398258621926040887099782494271000823401788337120154104692934583729065189687995570122890809807661370008740283447636580308161498808092269041815719148127168137018600113465985504975054319601741498799761500526467431533990903047624407330243357514588557352746347337683868781554819821575385685459666842162355673947984514687068626166144076257334426612302554448774082488600083569900006274897032242821388126274957846236552373226099112200392102883351088570736254707966329366625911183721875374731791052229266503696334310835323523568132399330263642353927504971311717117370721838701629885670598853025212521537158141447625623337563164790788106598854822686494249848796441153496412236527242235888308435573209980270776407776277489669763803746640746378181948641p1  18055722101348711626577381571859114850735298658417345663254295930584841136416234624852520581982069555948490061840244710773146585295336094872892685938420880462305333393436098181186277450475949236132458958671804132443554885896037342335902958516394876382378829317303693655605215373555988755516058130500801822723195474873517960624159417903134580987202400855946137101429970119186394052011747475879598126195607938106163892658285305921071673588966184054026228745012993740035399652049777986535759039077634555909031397541116025395236871778797949216479130412500655359057128438928721459688727543057760739527720641179290282309741q1  19024691283015651666032297670418553586155390575928421823630922553034857624430114628839720683172187406577114034710093054198921843669645736474448836706112221787749688565566635453151716934583685087745112614898780150391513798368931496744574075511968933800467288441832780919514199410584786925010518564670786685241724643282580795568609339268652910564215887176803735675069372979560024792322029911970574914829712553975379661212645059271137916107885326625543090473004683836665262304916304580076748336858662108554591235698235221618061328251985929904075811056422186525179189846420226944944513865790999242309352900287977666792901m1  long_to_bytes(pow(c1,inverse(e, (p1-1)*(q1-1)),n1))print(m1)c2   4948422459907576438725352912593232312182623872749480015295307088166392790756090961680588458629287353136729331282506869598853654959933189916541367579979613191505226006688017103736659670745715837820780269669982614187726024837483992949073998289744910800139692315475427811724840888983757813069849711652177078415791290894737059610056340691753379065563574279210755232749774749757141836708161854072798697882671844015773796030086898649043727563289757423417931359190238689436180953442515869613672008678717039516723747808793079592658069533269662834322438864456440701995249381880745586708718334052938634931936240736457181295n2   8582505375542551134698364096640878629785534004976071646505285128223700755811329156276289439920192196962008222418309136528180402357612976316670896973298407081310073283979903409463559102445223030866575563539261326076167685019121804961393115251287057504682389257841337573435085535013992761172452417731887700665115563173984357419855481847035192853387338980937451843809282267888616833734087813693242841580644645315837196205981207827105545437201799441352173638172133698491126291396194764373021523547130703629001683366722885529834956411976212381935354905525700646776572036418453784898084635925476199878640087165680193737ps  [15211380502610462057,11853704782834170959,14397830993057803133,12404642343676224637,16408421615173973083,10049235158029375571,13645878578452317313,10596280721192026229,10864078180916418691,15332916111580607077,13062839684118954553,15751974537676958401,14813953870710226847,12034779627328165471,9949603102225364603 ,17289161209347211817,16123604149048919099,14678737767649343977,17673334943789572513,11092420583960163379,18345408081492711641,14745811312384518031,10547615587767500213,16870346804576162551,17093292308638969889,18390046459144888243,18106525049998616747,15175734709842430433,14619040595108594017,17543713628803023199,12448177342966243757,17265001711647542137]phi  1for v in ps:    phi*v - 1d  inverse(e,phi)m2  long_to_bytes(pow(c2,d,n2)) #moectf{fACtord6_And_YAfu_Are_6oth_good_utils_to_fACtorize_num6ers_ff90S}
feistel

寻找中。。。。看最后一题吧是同一个题一开始作的那个那个没给key这个给了比那个简单。

n&n

共模攻击

from Crypto.Util.number import *p  getPrime(1024)q  getPrime(1024)with open(flag.txt,r) as f:    flag  f.read().strip().encode()m  bytes_to_long(flag)n  p * qe1  0x114514e2  19198101c1  pow(m,e1,n)c2  pow(m,e2,n)print(c1) print(c2)print(n)c1   5776799746376051463605370130675046329799612910435315968508603116759552095183027263116443417343895252766060748671845650457077393391989018107887540639775168897954484319381180406512474784571389477212123123540984850033695748142755414954158933345476509573211496722528388574841686164433315356667366007165419697987147258498693175698918104120849579763098045116744389310549687579302444264316133642674648294049526615350011916160649448726069001139749604430982881450187865197137222762758538645387391379108182515717949428258503254717940765994927802512049427407583200118969062778415073135339774546277230281966880715506688898978925c2  4664955020023583143415931782261983177552050757537222070347847639906354901601382630034645762990079537901659753823666851165175187728532569040809797389706253282757017586285211791297567893874606446000074515260509831946210526182765808878824360460569061258723122198792244018463880052389205906620425625708718545628429086424549277715280217165880900037900983008637302744555649467104208348070638137050458275362152816916837534704113775562356277110844168173111385779258263874552283927767924979691542028126412133709129601685315027689094437957165812994784648540588277901241854031439324974562449032290219652206466731675967045633360n 13612969130810965900902742090064423006385890357159609755971027204203418808937093492927060428980020085273603754747223030702684866992231913349067578014240319426522039068836171388168087260774376277346092066880984406890296520951318296354893551565670293486797637522297989653182109744864444697818991039473180752980752117041574628063002176339235126861152739066489620021077091941250365101779354009854706729448088217051728432010328667839532327286559570597994183126402340332924370812383312664419874352306052467284992411543921858024469098268800500500651896608097346389396273293747664441553194179933758992070398387066135330851531
e1  0x114514e2  19198101g, x1, x2  gmpy2.gcdext(e1,e2)   #g!1, e有公因子需要再开根号m  pow(c1,x1,n)*pow(c2,x2,n) % nprint(long_to_bytes(int(gmpy2.iroot(m,g)[0])))#moectf{dO_nOt_u53_5AM3_MOdulu5_tO_3ncrYPt_dIFF3r3nt_dAtA!_JY63x33iiA0Ji}
|p-q|

费马分解p,q距离很近。不过很多软件都会也可以不必自己用费马分解。

with open(flag.txt,rb) as fs:    flag  fs.read().strip()assert len(flag)  72m  int.from_bytes(flag,big)from Crypto.Util.number import getPrime, isPrimedef next_prime(p):    while True:        p  2        if isPrime(p):            return pp  getPrime(2048)q  next_prime(p)n  p * qe  65537c  pow(m,e,n)print(n ,n)print(c ,c)e  65537n  329960318345010350458589325571454799968957932130539403944044204698872359769449414256378111233592533561892402020955736786563103586897940757198920737583107357264433730515123570697570757034221232010688796344257587359198400915567115397034901247038275403825404094129637119512164953012131445747740645183682571690806238508035172474685818036517880994658466362305677430221344381425792427288500814551334928982040579744048907401043058567486871621293983772331951723963911377839286050368715384227640638031857101612517441295926821712605955984000617738833973829140899288164786111118033301974794123637285172303688427806450817155786233788027512244397952849209700013205803489334055814513866650854230478124920442832221946442593769555237909177172933634236392800414176981780444770542047378630756636857018730168151824307814244094763132088236333995807013617801783919113541391133267230410179444855465611792191833319172887852945902960736744468250550722314565805440432977225703650102517531531476188269635151281661081058374242768608270563131619806585194608795817118466680430500830137335634289617464844004904410907221482919453859885955054140320857757297655475489972268282336250384384926216818756762307686391740965586168590784252524275489515352125321398406426217c  307746143297103281117512771170735061509547958991947416701685589829711285274762039205145422734327595082350457374530975854337055433998982493020603245187129916580627539476324521854057990929173492940833073106540441902619425074887573232779899379436737429823569006431370954961865581168635086246592539153824456681688944066925973182272443586463636373955966146029489121226571408532284480270826510961605206483011204059402338926815599691009406841471142048842308786000059979977645988396524814553253493672729395573658564825709547262230219183672493306100392069182994445509803952976016630731417479238769736432223194249245020320183199001774879893442186017555682902409661647546547835345461056900610391514595370600575845979413984555709077635397717741521573798309855584473259503981955303774208127361309229536010653615696850725905168242705387575720694946072789441481191449772933265705810128547553027708513478130258801233619669699177901566688737559102165508239876805822898509541232565766265491283807922473440397456701500524925191214292669986798631732639221198138026031561329502985577205314190565609214349344303324429408234237832110076900414483795318189628198913032900272406887003325858236057373096880675754802725017537119549989304878960436575670784578550
from math import isqrt,is_squaredef factorize(N):        Recovers the prime factors from a modulus using Fermats factorization method.    :param N: the modulus    :return: a tuple containing the prime factors, or None if the factors were not found        a  isqrt(N)    b  a * a - N    while b < 0 or not is_square(b):        a  1        b  a * a - N        p  a - isqrt(b)    q  N // p    if p * q  N:        return p, qp,q  factorize(n)>>> from Crypto.Util.number import *>>> d  invert(e,(p-1)*(q-1))>>> m  pow(c,d,n)>>> long_to_bytes(m)bmoectf{it_iS_vUlnErablE_iF_p_iS_aboUt_thE_SaME_SiZE_aS_Q_MVoAYArrlG3uco}

 

rsa_signin

给了一堆n,c这里边有一对有公因子

with open(flag.txt,rb) as f:    flag  f.read().strip()m  int.from_bytes(flag, big)e  65537from Crypto.Util.number import getPrimefor x in range(10):    p  getPrime(1024)    q  getPrime(1024)    n  p * q    c  pow(m, e, n)    print(n , n)    print(c , c)n1  17524722204224696445172535263975543817720644608816706978363749891469511686943372362091928951563219068859089058278944528021615923888948698587206920445508493551162845371086030869059282352535451058203615402089133135136481314666971507135484450966505425514285114192275051972496161810571035753943880190780759479521486741046704043699838021850105638224212696697865987677760179564370167062037563913329993433080123575434871852732981112883423565015771421868680113407260917902892944119552200927337996135278491046562185003012971570532979090484837684759828977460570826320870379601193678304983534424368152743368343335213808684523217c1  6870605439714128574950893771863182370595667973241984289208050776870220326525943524507319708560433091378319367164606150977103661770065561661544375425887970907060665421562712515902428061727268441585629591525591001533188276465911918724808701356962871139957343861919730086334623932624184172272488406793955068827527130338853980609365042071290967556159598511667974987218999253443575482949258292953639729393456515185185102248985930422080581185292420347510600574229080211050520146551505605537486989306457793451086767402197128573781597156939709237045132856159368959981648969874765462190363842275826077556314448408825308218451n2  24974121071274650888046048586598797033399902532613815354986756278905133499432183463847175542164798764762683121930786715931063152122056911933710481566265603626437742951648885379847799327315791800670175616973945640322985175516271373004547752061826574576722667907302681961850865961386200909397231865804894418194711076667760169256682834206788730947602211228930301853348503098156592000286467190760378847541148772869356389938999094673945092387627113807899212568399028514283219850734634544982646070106811651490010946670117927664594365986238107951837041859682547029079035013475238052160645871718246031144694712586073789250183c2  10324627733161143472233272675096997859064721978612320424254305978486200326061730105384511258706433940176741256952824288120499229240005823611541292676234913505775165761543820764046537413943393325463602612485849366939102550336256797820440347815027443410399157963547486098366749815425187247171697678576246606105486928212486117878157055321965270364583625270716186820068538749425299073309429589410882809098930213978117176627031795312102177342499674234163614021182116065492884880492891668658240362567156235958605768725892407536211503981819707919444725863397622629226309480836486427388484176463279384813974310500625102568341n3  14215826065753265334521416948225868542990756976323308408298887797364519400310818641526401662106853573185085731682502059761982246604277475488691297554851873224516934619888327644352138127883043558424300092247604877819821625587944308487310522092440517150600171819145803937177931473336108429889165189521078678397694303305705260759351843006130968234071638035667854938070597400634242396852782331461576526836227336952718230741560369621645218729592233657856104560425642219241082727756696967324334634822771842625681505869025740662258929200756109704988223034840699133778958569054445520305361142302393767439478256174414187983763c3  415916446053083522663299405080903121619846594209033663622616979372099135281363175464579440520262612010099820951944229484417996994283898028928384268216113118778734726335389504987546718739928112684600918108591759061734340607527889972020273454098314620790710425294297542021830654957828983606433731988998097351888879368160881316237557097381718444193741788664735559392675419489952796677690968481917700683813252460912749931286739585465657312416977086336732056497161860235343155953578618273940135486362350057858779130960380833359506761436212727289297656191243565734621757889931250689354508999144817518599291078968866323093n4  12221355905532691305226996552124162033756814028292708728711809229588190407700199452617060657420166395065565154239801465361510672853972152857415394695376825120759202857555325904640144375262531345320714166285999668052224661520834318497234299585219832943519644095197479639328120838919035625832361810964127485907587199925564724081163804724975965691571850962714258888527902920462746795712011579424322515292865504642938090200503979483095345893697972170153990274670257331483858538617460680462369680572833191232126527727222302641204529110948993583190295067970240051042000918629138767209918572311469915774910003970381965123241c4  2248834602646305164283014556051672824689884721514190813323189875541899566338153534858709617544459297836048770439230174669883719627734394673012731609952869246171300132019334542245094425654362711870373095782083791160029789553806741967408922001051006100049326921742208757147339981269528740944842177729701945606827918253016001436218891580980192743564642120923356793292885805519110411357830040053435569937296612987581482128241218218550319154933831743819546558930918761162723110000328532730751591375727881221199739397698390594797621758011191224528339478784930214820615602510460640307707682865125229937141010351138099874025n5  18152103454920389919231636321286527841833809319334215885641536161086810144890443857211776387914779781628740172079478910188540146498426564211851629962338413488555121865779016981727229209606498886170396500155102635962395243364899026418106378234307821492609778555173516000309435730752571818439328803899462791834490025768785383592935046996428331508608555503567191807692523852530836008436655164751054189301721070209363416058642811329040202582026786024825518381761299547703962502636888833428457116986351812252188468878701301184044948733274488264320930936362549028124581962244201377136969591119942276742760215403738913067567c5  2797812094994121597295362327809389195134238119144547570610194659000554967367804835006774413888965325870488368112707535584687083342412367127561646136089638402907513075405746055834487062923240856950047936297155455745928810738711368950139327254040579266046642851362228893522740216519732851152162928545416236075387903789535000820423985522550638100049857678600662008021574841083416323980817348573062083159710189689337626277009675683473560325178417766400002763719953723259300977655801234386662217462862844994462505601804422871991694828697337752697234180117437785537788728412520613916334045368736691714704501962513954509705n6  22877887459293720334652698748191453972019668578065068224653972884599636421200068659750242304040301306798039254241668648594556654589309801728248683586229288074709849246660525799452637187132633064172425677552176203292787732404537215347782229753837476655088638984496409603054524994383358547132112778403912563916886533181616856401929346567686400616307916690806467019665390260267596320840786982457521423178851498130935577260638269429250197050326097193841333205073650802709022947551398142692735680419453533128176592587955634333425401930362881423044363132586170013458300714163531162544301477356808388416864173949089028317961c6  12271947322974809255127222556723394446467844330408506340843897575503534175121932185624776713618037572593449207329510171212097269297133492090526270770286000839978630002819714376964416081198925899119135271459404333829811516667576167576916805217016117373027245648473458331936273975110163065432285322832123169216976420362833557809289561705091817949915218278430834098156335989014645979633658818904753942786129126233956314517292746008579152368541316795082120147520597254020266752859205131887527661767589367756335766220841483940854397440079467053684289006956034944336788288196391829411432383541473132962783883758561108297747n7  19844333358004073542783728196775487079202832688982038135532362073659058674903791697765527614270399097276261983744620537925712167578187109058145015032736796457938148615396547198728652435169126585595701228287449135664667959433491335769206692390262797325133960778920452511673878233190120432257482339068405290918739453464061987163074129048150451046315248186376609350095502130018696275764450248681787926130463463923862832714969425813770847493135627599129546112143050369344208092649256659330284904392961574494907186727388685504929586018639846040474616307662546605623294842316524163106100888851228858194942825157286544846177c7  9531264751315473345056673937611382755236533664089452852716992791452558274873158812669513178040971923528201631609089069182049526587423864397527252061341857426422965190913745048414029690931254119437249218321954899956104589066479231204536856131403590472063496956452030342299863907499976917750846369802185896519725837163530049157920978007252920334447236842959033879772444475877613295594785710745889554296655932909212643500877218304116451889820444820534937901427158918411546484157737612926382420354101675658160847653151539420222526999426483473829341628599881460824765758346670633385844187252696874025582747177333702736465n8  16956880944655068255446705024149899655327230949463546092744762226005904114738078692036960935391303255804754787864713189658290361949509917704853428701870609882427423574672772606814823959758208695540116440342488334213300943604780971422918744381486937517952553797134323570131582724393100092308466968491068503301604506186521656059375518680612292667310641047190088814753025794048591445267711939066523165042651430468971452726568222388482323097260496415484997546126185688914792795834046855221759289007609518312601640548469651358391745947588643697900883634533872314566389446271647587564348026861264979727062157272541149018781c8  16110326928338602237561005337578085623028116490564329920738844771341250444164294693848130674347672763073995755532723894042946521372321947507527854966013459795492930736187058535665041545095683801386814190612817128504426590828954205050425979880047802547011117626354405687170961272200066258220699329112978151044633994329352673342582175349200008181837211288847301836681860817044391028992501763375849046751094019224570802498414368189170656992427042010362385494565216988561215657424755648213390551881450141899860811844684546992754530755092358644968088017107313907435586729574798046187046145596726569637758312033849476689378n9  16472195897077185060734002588086375750797253422014472876266294484788862733424113898147596402056889527985731623940969291811284437034420929030659419753779530635563455664549165618528767491631867637613948406196511848103083967995689432928779805192695209899686072900265108597626632371718430059561807147486376536203800038054012500244392964187780217667805308512187849789773573138494622201856638931435423778275004491853486855300574479177472267767506041000072575623287557610576406578525902565241580838652860552046216587141709709405062150243990097835181557208274750462554811004137033087430556692966525170882625891516050207318491c9  11867731823522211833301190385669833752050387304375114576570892885641949969365352586215693183003550684262313893105989683214739695968039039944442567581277252581988489020834299896625977474857889570528169919064941042132119301236852358823696947330423679033138054012027878783478922023431469564210485180679933264749281963405243082505688901662659030897104957499953192201440290084373968716271056483463909282407034181891901928790601973222643210525000717355062752079302291729448234374709852429885984987094307177760741403086538949190424454337896501402430653783597070178968921411867485584517214777073301007918941216316241784521708n10  13890749889361612188368868998653029697326614782260719535555306236512452110708495623964530174188871342332417484996749651846510646453983388637377706674890018646246874688969342600780781646175634455109757266442675502522791531161284420286435654971819525519296719668701529481662071464145515727217108362496784024871976015116522898184301395037566514980846499856316532479656908169681719288258287756566886281183699239684997698487409138330229321935477734921670373632304542254938831218652340699024011371979519574576890581492623709896310465567043899767342676912434857372520308852745792360420376574037705943820090308501053778144141c10  6250115196713939477947942995075509357173312813431601073354390451609559579925704891503987992181988654989477525811826607070378476102616752398280691012244301950194800995432882828020405062344160270290542566163969692748126314259624623341922057435728127596172871894887055305291345372720594481096374310285437492746765510292863238933163142677773310305789984897974266961231555124787205980411992251387207335655129551950825339766848166539671565212408741432649813058363660321480995187545006718837863674527475323414266732366507905974800565463011676462244368010182725161416783875646259625352308599198614681446394427674340328493047n11  21457499145521259498911107987303777576783467581104197687610588208126845121702391694574491025398113729462454256070437978257494064504146718372095872819969887408622112906108590961892923178192792218161103488204912792358327748493857104191029765218471874759376809136402361582721860433355338373725980783308091544879562698835405262108188595630215081260699112737457564998798692048522706388318528370551365364702529068656665853097899157141017378975007689790000067275142731212069030175682911154288533716549782283859340452266837760560153014200605378914071410125895494331253564598702942990036163269043699029806343766286247742865671c11  6269656777204332618433779865483197625538144405832409880710764183039800286008967127279281167109250083159801218370191973055663058165456565194979210256278526713608759141588082614531352489547674696723140599892318118960648862531538435596775798128845789504910467783731144808685373807716609662688064728614003904579841055786083326311313295311152563668422289435606771091246147867715987583149743032723028324394173498623642539175178996531881058274717907066845565199058931743481410454382746158558886667761300257488769795092777021292335562818583719708133179974425584610403335487082478848975656282384575767178925517257692365828720
ns  [n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11]cs  [c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11]for i in range(len(ns)-1):    for j in range(i1,len(ns)):        if gcd(ns[i],ns[j]) ! 1:            print(i,j,gcd(ns[i],ns[j]))            #2 10 147352146484643764031622970604294889624856525072751495442791038251325198568446104214691837421831622655415627526708110986526177662910836604556867226815780490826061784656230373978115117669691022691171484914452586975269776325816859478861737379536769555626991492537714713353640978988383143423169600280639641367257p  gcd(n3,n11)q  n3//pd  invert(e, (p-1)*(q-1))m  pow(c3,d,n3)long_to_bytes(m)#moectf{it_is_relly__signin_level_cryPto_chllnge_ng92WPIBung92WPIBun}

 

xorrrrr

单字节异或加密key不清楚爆破呗

flag  open(flag.txt,rb).read()assert flag.startswith(bmoectf{) and flag.endswith(b})article  open(article.txt,rb).read()import randomstrxor  lambda x,y: bytes([a^b for a,b in zip(x,y)])result  []for i in range(100):    range_start  random.randint(0, len(article) - len(flag))    mask  article[range_start:range_start  len(flag)]    result.append(strxor(flag,mask))with open(result.log,w) as fs:    fs.writelines([str(i)\n for i in result])
msg  open(result.log).readlines()msg  [eval(v) for v in msg]strxor  lambda x,y: bytes([a^b for a,b in zip(x,y)])msg.pop(93)flag  bmoectf{W0W_y0U_HaVe_mastered_tHe_x0r_0Peart0r!_0iYlJf!M3rux9G9Vf!JoxiMl}for i in range(99):    k  strxor(msg[i],flag)    print(i,k, msg[i][len(flag): len(flag)4])

 

ez_chain
from Crypto.Util.number import *with open(key.txt, r) as fs:    key  int(fs.read().strip())with open(flag.txt, rb) as fs:    flag  fs.read().strip()assert len(flag)  72key  random.randint(base)flag  bmoectf{1234567890}m  bytes_to_long(flag)base  bytes_to_long(bkoito)iv  3735927943def blockize(long):    out  []    while long > 0:        out.append(long % base)        long // base    return list(reversed(out))blocks  blockize(m)def encrypt_block_cbc(blocks, iv, key):    encrypted  [iv]    for i in range(len(blocks)):        encrypted.append(blocks[i] ^ encrypted[i] ^ key)    return encrypted[1:]print(encrypt_block_cbc(blocks, iv, key))

CBC的异或加密

from Crypto.Util.number import *def get_base(v,key):    k  0    for i in v:        k*base         ki^key    return long_to_bytes(k)enc  [8490961288, 122685644196, 349851982069, 319462619019, 74697733110, 43107579733, 465430019828, 178715374673, 425695308534, 164022852989, 435966065649, 222907886694, 420391941825, 173833246025, 329708930734]base  bytes_to_long(bkoito)iv  3735927943enc  [iv]encenc_no_cbc  [enc[i-1]^enc[i] for i in range(1,len(enc))]print(enc_no_cbc)#[432674690023, 316083479432, 352306305703, 371107977111, 290734220940, 297123248011, 319994912423, 299600071333, 439506635169, 117796865187, 390928024701, 116328574846, 334545012049, 126344729644, 4910773519]#先猜长度for kl in range(60,70):    tkey  (bytes_to_long(bmoectf{)<<kl*8)//base**(len(enc_no_cbc)-1)    tkey ^enc_no_cbc[0]    for i in range(-1000,1000):        key  tkey  i        v  get_base(enc_no_cbc, key)        if bmoectf{ in v:            print(kl, v)            break    #bmoectf{thE_c6c_Is_not_so_hard_9ifxi9i!JGofMJ36D9cPMxroif6!M6oSMuliPPcA3}

 

flag_exchange

通过7次幂的加密7太小了

from Crypto.Util.number import isPrimefrom random import getrandbitswith open(flag.txt,rb) as fs:    flag  fs.read().strip()def diffie_hellman(p, flag):    alice_privKey  getrandbits(1024)    alice_pubKey  pow(7, alice_privKey, p)    bob_privKey  getrandbits(1024)    bob_pubKey  pow(7, bob_privKey, p)    superkey  pow(bob_pubKey, alice_privKey, p)    m  int.from_bytes(flag, big)    return (m * superkey) % p, alice_pubKey, bob_pubKeyfrom typing import Callabledef chall(input:Callable[[str],None], print:Callable[[str],None]):    p  int(input(P  ))    if isPrime(p) and p.bit_length() > 1024:        c, alice_pubKey, bob_pubKey  diffie_hellman(p, flag)        print(Alices public key: {}.format(alice_pubKey))        print(Bobs public key: {}.format(bob_pubKey))        print(Ciphertext: {}.format(c))    else:        print(Invalid P)
p  148489452939627293978440608759173442996844898460634522907853247036287190215343795547617202268308624753445214064773770913426160349040708130179091977708205626736036279968938890838225633390629273742668246518422214765060312463614874340097452229306723297896927521825468282346196425145184245667794004328269609137340417ak  13506505257902994926795380249835905035332235135211590669651308742167829046269285891449598193037355963934752767648404113487207650100033109025478128962303857858447936638923060635597426544104185868673581919643713670014001896204436868960342513827314899205480094036790812749085955676625407571768335193974649726494695bk  59201325930301080831020707685410323615662991813563685602352712666092170206124564190043221611539340845561303528216487138415532082769687060195426542753971585990425051581542903924039946519721877000739041825359986436864770793802041542615070727007409297662567507378880622382458757946880200666631006526627977012754315cipher  113859159624765890256820636097278078757726957717820539253273545045734749731324609285395064129161531586821631272409416097549974696104116207732168692060239798339988828548845153764394213384370110210010127665521461773892895483778273116595550989394557731721950223900029326813602085382207407781759070210822358775058078#c  (m * superkey) % pa  discrete_log(ak,mod(7,p))a  64668307636287699049178361204443104904947965453137320623869437362374876996215394346912445893643403561894212148309122505028572486721984798507289505281507627944598519908420891989408013250242428623664747266752871230816411372152512197777858955459437623237541142998761716048619580286646790406108437435522991034889#superkey  pow(bob_pubKey, alice_privKey, p)s  pow(bk,a,p)m  c*inverse_mod(s,p)%p#moectf{diffie_he11man_key_exChange_is_not_so_hard_2WPIBung92WPIBung9?WP}

 

giant_e

猜测是e非常d非常小的情况用winner分解

from Crypto.Util.number import getPrimewith open(flag.txt,rb) as fs:    flag  fs.read().strip()p  getPrime(1024)q  getPrime(1024)n  p * qe  0x609778981bfbb26bb93398cb6d96984616a6ab08ade090c1c0d4fedb00f44f0552a1555efec5cc66e7960b61e94e80e7483b9f906a6c8155a91cdc3e4917fa5347c58a2bc85bb160fcf7fe98e3645cfea8458ea209e565e4eb72ee7cbb232331a862d8a84d91a0ff6d74aa3c779b2b129c3d8148b090c4193234764f2e5d9b2170a9b4859501d07c0601cdd18616a0ab2cf713a7c785fd06f27d68dff24446d884644e08f31bd37ecf48750e4324f959a8d37c5bef25e1580851646d57b3d4f525bc04c7ddafdf146539a84703df2161a0da7a368675f473065d2cb661907d990ba4a8451b15e054bfc4dd73e134f3bf7d8fa4716125d8e21f946d16b7b0fc43m  int.from_bytes(flag,big)c  pow(m,e,n)n  0xbaa70ba4c29eb1e6bb3458827540fce84d40e1c966db73c0a39e4f9f40e975c42e02971dab385be27bd2b0687e2476894845cc46e55d9747a5be5ca9d925931ca82b0489e39724ea814800eb3c0ea40d89ebe7fe377f8d3f431a68d209e7a149851c06a4e67db7c99fcfd9ec19496f29d59bb186feb44a36fe344f11d047b9435a1c47fa2f8ed72f59403ebb0e439738fd550a7684247ab7da64311690f461e6dce03bf2fcd55345948a3b537087f07cd680d7461d326690bf21e39dff30268cb33f86eeceff412cd63a38f7110805d337dcad25e6f7e3728b53ca722b695b0d9db37361b5b63213af50dd69ee8b3cf2085f845d7932c08b27bf638e98497239c  0x45a9ce4297c8afee693d3cce2525d3399c5251061ddd2462513a57f0fd69bdc74b71b519d3a2c23209d74fcfbcb6b196b5943838c2441cb34496c96e0f9fc9f0f80a2f6d5b49f220cb3e78e36a4a66595aa2dbe3ff6e814d84f07cb5442e2d5d08d08aa9ccde0294b39bfde79a6c6dcd2329e9820744c4deb34a039da7933ddf00b0a0469afb89cba87490a39783a9b2f8f0274f646ca242e78a326dda886c213bc8d03ac1a9150de4ba08c5936c3fe924c8646652ef85aa7ac0103485f472413427a0e9d9a4d416b99e24861ca8499500c693d7a07360158ffffa543480758cafff2a09a9f6628f92767764fa026d48a9dd899838505ae16e38910697f9de14e  0x609778981bfbb26bb93398cb6d96984616a6ab08ade090c1c0d4fedb00f44f0552a1555efec5cc66e7960b61e94e80e7483b9f906a6c8155a91cdc3e4917fa5347c58a2bc85bb160fcf7fe98e3645cfea8458ea209e565e4eb72ee7cbb232331a862d8a84d91a0ff6d74aa3c779b2b129c3d8148b090c4193234764f2e5d9b2170a9b4859501d07c0601cdd18616a0ab2cf713a7c785fd06f27d68dff24446d884644e08f31bd37ecf48750e4324f959a8d37c5bef25e1580851646d57b3d4f525bc04c7ddafdf146539a84703df2161a0da7a368675f473065d2cb661907d990ba4a8451b15e054bfc4dd73e134f3bf7d8fa4716125d8e21f946d16b7b0fc43
from Crypto.Util.number import long_to_bytes,bytes_to_longdef transform(x,y):    res  []    while y:        res.append(x//y)        x,y  y,x%y    return resdef continued_fraction(res):    numerator,denominator  1,0    for i in res[::-1]:        denominator,numerator  numerator,i*numeratordenominator    return numerator,denominatordef wiener_attack(c,res,n):    print(Attack start...)    for i in range(1,len(res)):        ress  res[:i]        d  continued_fraction(ress)[1]        m  long_to_bytes(pow(c,d,n))        print(m)        if all(0x20<k<0x7f for k in m):        #if bflag{ in m:            print(m)            break        res  transform(e,n)wiener_attack(c,res,n)#moectf{too_larGe_exponent_is_not_a_iDea_too!_Bung92WPIBung92WPIBung9?WP}

 

minipack

远看是背包加密但是没取模

import randomwith open(flag.txt, rb) as fs:    flag  fs.read().strip()assert len(flag)  72m  int.from_bytes(b\xff  flag  b\xff, big)def long2bits(long):    bits  []    while long > 0:        bits.append(long & 1)        long >> 1    return list(reversed(bits))def genkey(len):    sum  0    out  []    for i in range(len):        delta  random.randint(1, 10000)        x  sum  delta        out.append(x)        sum  x    return outkey  genkey(74 * 8)with open(key.txt, w) as fs:    fs.write(str(key))def encrypt(m, keys):    data  long2bits(m)    assert len(data)  len(keys)    return sum((k if (p  1) else 1) for p, k in zip(data, keys))with open(ciphertext.txt, w) as fs:    fs.write(str(encrypt(m, key)))

直接一个个减就行不够就是0够就是1

from key import keyfrom Crypto.Util.number import *c  44096612931024003148407895164090667174657344536623354666642108463093659898867859567157728084018394988840266329206836985537987081415020571845239234014695335928717091578810470705259929m  for k in key[::-1]:    if c>k:        c-k         m1    else:        m0flag  int(m[::-1],2)print(long_to_bytes(flag))#moectf{superiNcreasiNg_sequeNce_is_useful_tO_cONstruct_a_KNapsacK_MAxSM}
bad_random

LCG加密先用grobner基求参数再解

import randomwith open(flag.txt, r) as f:    flag  f.read().strip()class LCG:    def set_params(self):        self.m  random.randint(10000, 20000)        self.a  random.randint(10000, 20000)        self.c  random.randint(1, self.a-1)        self.x  random.randint(0, self.m-1)        def get_all_output(self):        x0  self.x        s  set()        while (t : self()) not in s:            s.add(t)        self.x  x0        return s        def __init__(self):        self.set_params()        while len(self.get_all_output()) < 10:            self.set_params()        def __call__(self):        self.x  (self.a * self.x  self.c) % self.m        return self.xfrom typing import Callabledef chall(input:Callable[[str],None], print:Callable[[str],None]):    from hashlib import md5    from string import ascii_letters    s  .join(random.choices(ascii_letters, k16))    h  md5(s.encode()).hexdigest()    print(f<!> md5(XXXXXXXX{s[8:]})  {h})    i  input(Give me XXXXXXXX: )    if md5((i  s[8:]).encode()).hexdigest() ! h:        print(<!> ACCESS DENIED <!>)        return    inst  LCG()    print(Lets play a simple game! If you can guess the right number, I will give your the flag! You have 10 tries)    for tries in range(10):        i  input(fGive me a number, you have failed for {tries} times: )        if int(i)  (right : inst()):            print(fCongurations! You win the game! Your flag is here: {flag})        else:            print(fOh, you are wrong! The right number is {right})
from pwn import *from hashlib import md5 import string from math import gcd from gmpy2 import invert io  remote(127.0.0.1, 11027)context.log_level  debugio.recvuntil(bmd5(XXXX)tail  io.recvuntil(b)  , drop  True)hash  io.recvline().strip().decode()#prooffound  iters.bruteforce(lambda x: md5(x.encode()  tail).hexdigest()  hash, string.ascii_letters, 4)io.sendlineafter(bXXXX: , found.encode())xs  []for _ in range(9):    io.sendlineafter(btimes: , b88)    io.recvuntil(bThe right number is )    xs.append(int(io.recvline()))print(f{xs  })#P.<a,c>  PolynomialRing(ZZ)F  []for i in range(1, 9):    f  xs[i-1]*a  c - xs[i]    F.append(f)I  Ideal(F).groebner_basis()print(I)# 求解参数a c m  : x  (axc) %mres[x.constant_coefficient() for x in I]m  res[2]a  -res[0]%mc  -res[1]%mfor a in range(10000,20000):    if xs[-1]  (xs[-2]*ac)%m:        print((xs[-1]*ac)%m)        breakx10  input(x10:)#print(bsx10.encode())io.sendlineafter(btimes: , x10.encode())io.recvline()io.interactive()#moectf{u5e_5ingle_lcg_a5_a_RanDoM_nuMbeR_geneRaToR_i5_noT_a_gooD_iDea!_}\n

 

broken_hash

自制的hash换个顺序还能得到相同值。

def F(x, y, z):    return ((x & ~y) ^ (y & ~z) ^ (z & ~x)) ^ (        ((x  y) * (y  z)  (x  z)) & 0xFFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF    )def _block_hash(a, b, c, d):    x, y, z, w  F(a, b, c), F(b, c, d), F(c, d, a), F(d, a, b)    return (a ^ b ^ c ^ d ^ x ^ y ^ z ^ w) ^ 0xFFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFFdef _hash(blocks: list[int]):    length  len(blocks)    if length % 4 ! 0:        padding  4 - length % 4        blocks  [0] * padding        length  padding    if length  4:        return _block_hash(*blocks)    else:        block_size  length // 4        h1  _hash(blocks[:block_size])        h2  _hash(blocks[block_size : block_size * 2])        h3  _hash(blocks[block_size * 2 : block_size * 3])        h4  _hash(blocks[block_size * 3 :])        return _block_hash(h1, h2, h3, h4)def bytes2blocks(data: bytes, block_size16):    if len(data) % block_size ! 0:        data  b\x00 * (block_size - len(data) % block_size)    return [        int.from_bytes(data[i : i  block_size], little)        for i in range(0, len(data), block_size)    ]def hash(*data: list[bytes]):    return _hash(bytes2blocks(b.join(data)))from typing import Callablefrom random import randbytesfrom base64 import b64decode,b64encodefrom hashlib import md5from string import ascii_lettersfrom random import choiceswith open(flag.txt, r) as f:    flag  f.read().strip()def chall(input: Callable[[str], None], print: Callable[[str], None]):    def proof_of_work():        s  .join(choices(ascii_letters, k16))        h  md5(s.encode()).hexdigest()        print(f<!> md5(XXXXXXXX{s[8:]})  {h})        i  input(Give me XXXXXXXX: )        return md5((i  s[8:]).encode()).hexdigest()  h    if not proof_of_work():        print(<!> ACCESS DENIED <!>)        return    b  randbytes(256)    print(fthis is a random bytes: {b64encode(b).decode()})    i  input(give me another bytes with the same hash: )    try:        d  b64decode(i)    except:        print(invaild input)    if hash(b)  hash(d) and d!b:        print(fcongurations! and your flag is {flag})        
from pwn import *from base64 import * from hashlib import md5 io  remote(127.0.0.1, 10946)context.log_level  debugio.recvuntil(bmd5(XXXX)tail  io.recvuntil(b)  , drop  True)hash  io.recvline().strip().decode()#prooffound  iters.bruteforce(lambda x: md5(x.encode()  tail).hexdigest()  hash, string.ascii_letters, 4)io.sendlineafter(b: , found.encode())io.recvuntil(bthis is a random bytes: )b  b64decode(io.recvline().strip())a  b[16:64]  b[:16]  b[64:]a64  b64encode(a)io.sendlineafter(give me another bytes with the same hash: , a64)print(io.recvline())io.interactive()#moectf{a_hash_FUNCtioN_With_sYMMEtRY_is_vERY_vUlNERa6lE_3iiA0JiuP0DxuuP}

 

factorize_me!

给了9个因子的N和对应的phi从中选3个作n加密先用多因子分解得到因子再找出是哪个

from Crypto.Util.number import getPrimefrom math import prodfrom sympy import nextprimefrom random import choiceswith open(flag.txt, rb) as fs:    flag  fs.read().strip()primes  [getPrime(512) for _ in range(9)]print(f{prod(primes)  })print(f{prod(p - 1 for p in primes)  })primes2  [nextprime(p) for p in choices(primes, k3)]n  prod(primes2)e  65537c  pow(int.from_bytes(flag, big), e, n)print(fn  {n})print(fe  {e})print(fc  {c})
from Crypto.Util.number import *from gmpy2 import *N   363364907814244019888662301376841344262476227242899756862391470731421569394957444030214887114615748277199649349781524749919652160244484352285668794188836866602305788131186220057989320357344904731322223310531945208433910803617954798258382169132907508787682006064930747033681966462568715421005454243255297306718356766130469885581576362173340673516476386201173298433892314145854649884922769732583885904512624543994675379894718657682146178638074984373206937523380103438050549181568015985546172618830480078894445808092527561363650503540062128543705172678754195578429520889784813733491180748361345720247750720179608752244490362713103319685024237941527268458213442611663415417005556439749055222361212059968254748751273361732365487788593341859760309778894350385339764442343374673786357175846291309425081492959910254127778240522152676060766139057453197528944251599979227271074508795482632471242983094008619339488744362509349734218480932255216087706001484182136783834973304870508270118505737767002256270427907341952256516206663258530300791364944105025764611810001781971638030661367630116818647252727909489405550104641122269772492252464714694507693447974171377200402508765841829763548525530878309985480248379655169722567051495205792089930014228403456098065971372039443284193603395249634283366194562380309469628114581468645669390610963076340643757972439104287127375438663839421605531570285615180251phi   363364907814244019888662301376841344262476227242899756862391470731421569394957444030214887114615748277199649349781524749919652160244484352285668794188836492373364350673588273863828369502073826782362255108313852264064760467561392054178047091483873483255491431451728274259516789065331176728192953741805933100379191778599394515981288225535175013258094287912195847642598436035132783919453991516358280321085873745330313812205910011387125778714795906023110368957596998222544234082487264006696812862179916726781327290284827659294751262185328816323311831349296593013038823107653943652771448719760448938995150646738377177532550757319539185878535087009904848382493668686831331474113789651777885239747000076063679062106375348803749466079052774597412239427050432901553466002731972993029311850718200685157193170716432600165476733200831046297530470544781309612128231925681374239849452623513538498417735984094919756374577623486416462101457492789215144166273775249387638107644634704270216130852885082174564648445147377239033930079759024399532146184753110240154062693457622208373371290126810856885343328090305620627668495081760346853701632815149478447405718664667978825807101325764916405446176183238866136433205933785973568759281210319422288153910340542098573782006262190181726245838857185687242960093445000287347616796984610291664809895901301187179157382169999966124177588884152267266994164841066291200n  899081756851564072995842371038848265712822308942406479625157544735473115850983700580364485532298999127834142923262920189902691972009898741820291331257478170998867183390650298055916005944577877856728843264502218692432679062445730259562784479410120575777748292393321588239071577384218317338474855507210816917917699500763270490789679076190405915250953860114858086078092945282693720016414837231157788381144668395364877545151382171251673050910143023561541226464220441e  65537c  841335863342518623856757469220437045493934999201203757845757404101093751603513457430254875658199946020695655428637035628085973393246970440054477600379027466651143466332405520374224855994531411584946074861018245519106776529260649700756908093025092104292223745612991818151040610497258923925952531383407297026038305824754456660932812929344928080812670596607694776017112795053283695891798940700646874515366341575417161087304105309794441077774052357656529143940010140from math import gcdfrom random import randrangedef factorize_multi_prime(N, phi):        Recovers the prime factors from a modulus if Eulers totient is known.    This method works for a modulus consisting of any number of primes, but is considerably be slower than factorize.    More information: Hinek M. J., Low M. K., Teske E., On Some Attacks on Multi-prime RSA (Section 3)    :param N: the modulus    :param phi: Eulers totient, the order of the multiplicative group modulo N    :return: a tuple containing the prime factors        prime_factors  set()    factors  [N]    while len(factors) > 0:        # Element to factorize.        N  factors[0]        w  randrange(2, N - 1)        i  1        while phi % (2 ** i)  0:            sqrt_1  pow(w, phi // (2 ** i), N)            if sqrt_1 > 1 and sqrt_1 ! N - 1:                # We can remove the element to factorize now, because we have a factorization.                factors  factors[1:]                p  gcd(N, sqrt_1  1)                q  N // p                print(p)                if is_prime(p):                    prime_factors.add(p)                elif p > 1:                    factors.append(p)                if is_prime(q):                    prime_factors.add(q)                elif q > 1:                    factors.append(q)                # Continue in the outer loop                break            i  1    return list(prime_factors)n_factors  factorize_multi_prime(N,phi)n_factors  sorted(n_factors)#[6811480804433459752827714558479851837166061762294131563310130325846430072816177165149613687307165209577130630311477665591141650399740741396784593477667511,6991223361118904775931217829045348785013077549030883418924453538830605687999480005714979700653172534877541317997174968789510984315425270755055110913347281, 7592439908930473591169395506464664967460880934907692099467559610659035874008829133810341129161864445676397227262130671224157308868678442281617413952593477, 7661276973316857207751367277881032536449069939447322837508906694964933673171693624171780997296797446643574508184011878230465391879808258241752897792891323, 8752762682421281693932454897190422008900505775990831144558827755415243453970083322530846132571648469860763497724505255094464743633789884168771246977571539, 9987009117206906203158749743824168660291275882852229158070368815160479543708376165641735042845357978292384303332559592302507789120810447986634662721490507, 10022455487144667211701100343824680124338467215246658405697280466931561838565228778624923751405642974058833143888323468902504576610147119708725877528011439, 11627877395179828773706504422918933052041685770731872812302758181943244472706231518350716590168708806854971155512042158777017234038219076771501368374236727, 12876877424944854147075816504195994138450356002779004886384584287813869165469217718717854027672044903401715370348223932937626725119320180795716270261309139]for t in n_factors:    for i in range(2000):        if gcd(ti, n) ! 1:            print(ti)        p  [6991223361118904775931217829045348785013077549030883418924453538830605687999480005714979700653172534877541317997174968789510984315425270755055110913347349,9987009117206906203158749743824168660291275882852229158070368815160479543708376165641735042845357978292384303332559592302507789120810447986634662721490849,12876877424944854147075816504195994138450356002779004886384584287813869165469217718717854027672044903401715370348223932937626725119320180795716270261309141]phi  (p[0]-1)*(p[1]-1)*(p[2]-1)d  inverse_mod(e,phi)m  pow(c,d,n)long_to_bytes(int(m))#moectf{you_KNow_how_to_faCtorize_N_right?_9?WPIBung6?WPIBung6?WPIBund6?}

 

feistel_promax
from Crypto.Util.number import *from os import urandomround  2flag  open(./secret, rb).read().strip()def f(m, key):    m  m ^ (m >> 4)    m  m ^ (m << 5)    m  m ^ (m >> 8)    m ^ key    m  (m * 1145  14) % 2**64    m  (m * 1919  810) % 2**64    m  (m * key) % 2**64    return mdef enc(m, key, round):    key  bytes_to_long(key)    left  bytes_to_long(m[:8])    right  bytes_to_long(m[8:])    for i in range(round):        left, right  right, f(right, key) ^ left    left, right  right, left    return long_to_bytes(left).rjust(8, b\x00)  long_to_bytes(right).rjust(8, b\x00)def padding(m):    mlen  len(m)    pad  16 - mlen % 16    return m  pad * bytes([pad])def ecb_enc(m, key):    m  padding(m)    mlen  len(m)    c  b    for i in range(mlen // 16):        c  enc(m[i * 16 : i * 16  16], key, round)    return ckey  urandom(8)print(ecb_enc(padding(flag), key))# bB\xf5\xd8gy\x0f\xaf\xc7\xdf\xabn9\xbb\xd0\xe3\x1e0\x9eR\xa9\x1c\xb7\xad\xe5H\x8cC\x07\xd5w9Ms\x03\x06\xec\xb4\x8d\x80\xcb}\xa9\x8a\xcc\xd1W\x82[\xd3\xdc\xb4\x83P\xda5\xac\x9e\xb0)\x98R\x1c\xb3h

很麻烦

from Crypto.Util.number import long_to_bytes as l2b, bytes_to_long as b2ldef f(m, key):    m  m ^ (m >> 4)    m  m ^ (m << 5)    m  m ^ (m >> 8)    m ^ key    m  (m * 1145  14) % 2**64    m  (m * 1919  810) % 2**64    m  (m * key) % 2**64    return mdef enc(m, key, round):    key  b2l(key)    left  b2l(m[:8])    right  b2l(m[8:])    for i in range(round):        left, right  right, f(right, key) ^ left    left, right  right, left    return l2b(left).rjust(8, b\x00)  l2b(right).rjust(8, b\x00)key  b\xcdU\x19\xb4\x04\x9f\xaaEflag  b0123456789abcdef}for i in range(1,17):    tmp  flag  bytes([i])*i     tmp  tmp[-16:]    c  enc(tmp,key,2)    print(c)b\xa0\x8b\x9b\xce\xe4\xc8\xc2l<^\xfc\xe1\x8b\xb8\xbe\xd1b\x82Z\x13o\x92!\xf7V\xa7\n\x03!\x8b\xe2\x0f\x1eb\x1f<\xb8\x15c\xce\x84\x87\xb5\x91\xea\xb3\xc6\xe0S\x97b\x82nW\x12\xb8I\xe1\x81^Z\xdc\xc0\xba\xde\xdd\xb0b!\xd3\x84Vh~\xa7\x01\x1b\xb7u\xad\x92\xeb\xb6\xfdbUn\x1d\xf2\nzg\xc0F|*\xa7\xadX\xf0b,\x83\x91\xacsV\x13\x08\x17\xc6\xdb81\xcfkb\x80_-S\xa3\xd1S\xa7\xad\xc2\xb8W\xb5\xaejub\r\xc7Z\xcbh}\x14\xf7\xa4\xc23s8\x83\\\xc7b1u\xb4\x90\x8c\t\x16\xb0P\xc9\x8a\n\xdf\xeb\xeavb\r\xad\xfd\xe1\x8a.P\xac\xb4\xc3\x0148\xbb\xfdIb\xce3\xeb\t\x82\xc3K[<\xf0\xd7\xc2\x0e?o,b\xa7\x88.K\xee\x8be\xec\xf4Z\xac\x83u\xebb;8q}\x07\x069\xfeh\xe1\xcb\xf7\xe7\xf19\x9ab\xa2\xf1r\x90\xf9\xd4k\x8c\xce\x964\xd3y\x16BUb\x81\xb9\xa1d\xac\xac\x81:Q\x12\xcb\xe4S1n\x91l         r                  plainr         f(r)^l             round 1f(r)^l    f(f(r)^l)^r        round 2f(f(r)^l)^r   f(r)^l         c#testl  b2l(b\x10*8)r  b2l(b\x10*8)key  b2l(b\xcdU\x19\xb4\x04\x9f\xaaE)fr  f(r,key)^lffr  f(fr,key)^rprint(l2b(fr),l2b(ffr))enc  bB\xf5\xd8gy\x0f\xaf\xc7\xdf\xabn9\xbb\xd0\xe3\x1e0\x9eR\xa9\x1c\xb7\xad\xe5H\x8cC\x07\xd5w9Ms\x03\x06\xec\xb4\x8d\x80\xcb}\xa9\x8a\xcc\xd1W\x82[\xd3\xdc\xb4\x83P\xda5\xac\x9e\xb0)\x98R\x1c\xb3h#c  b\x81\xb9\xa1d\xac\xac\x81:Q\x12\xcb\xe4S1n\x91c  enc[-16:]cl,cr  b2l(c[8:]), b2l(c[:8])   #cl和r取3字节l取2字节#print(l2b(cl),l2b(cr))for pad in range(1,17):    l  bytes([pad])*2    r  bytes([pad])*3    l,r  b2l(l),b2l(r)    for key8 in range(256):        for key7 in range(256):            key  (key7<<8) |key8            fr   (f(r,  key)^l) &0xffff            ffr  (f(cl, key)^r) &0xffff            if fr  cl&0xffff and ffr  cr&0xffff:                print(pad, hex(key7), hex(key8) )#pad 16  key  b\xac\xb4pad  16key_tail  b4t*zFD\xac\xb4mod  1<<(8*(len(key_tail)1))l  bytes([pad])*8r  bytes([pad])*8l,r  b2l(l),b2l(r)for k in range(256):    key  (k<<(8*len(key_tail)))|b2l(key_tail)    fr   (f(r,  key)^l) %mod    ffr  (f(cl, key)^r) %mod    if fr  cl%mod and ffr  cr%mod:        print(l2b(key) )key  b2l(key_tail )#从明文 c  enc[32:48]cl,cr  b2l(c[8:]),b2l(c[:8])r  f(cl,key)^crl  f(r,key)^clprint(l2b(l)l2b(r))#moectf{F_func_1s_n1t_Ve5y_$EcU%e}

标签:
声明:无特别说明,转载请标明本文来源!