安全矩阵

 找回密码
 立即注册
搜索
楼主: pukr

buuctf解题

[复制链接]

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
 楼主| 发表于 2021-11-9 23:41:42 | 显示全部楼层
本帖最后由 pukr 于 2021-11-19 09:57 编辑

rsa2  低解密指数(wiener 攻击)这类攻击的特征是e很大,接近于N,导致d较小。
两篇文章可供阅读,攻击脚本下载地址:[rsa-wiener-attack](https://github.com/pablocelayes/rsa-wiener-attack)


攻击原理
知识储备
​​




​​​​


  1. # -*- coding: utf-8 -*-
  2. import hashlib

  3. d = 8920758995414587152829426558580025657357328745839747693739591820283538307445
  4. flag = "flag{" + hashlib.md5(hex(d)).hexdigest() + "}"
  5. print(flag)
复制代码
python2环境运行


得到d的过程:
github上下载的脚本,修改一下d那里,其他的直接运行。
  1. '''
  2. Created on Dec 14, 2011

  3. @author: pablocelayes
  4. '''

  5. import ContinuedFractions, Arithmetic, RSAvulnerableKeyGenerator

  6. def hack_RSA(e,n):
  7.     '''
  8.     Finds d knowing (e,n)
  9.     applying the Wiener continued fraction attack
  10.     '''
  11.     frac = ContinuedFractions.rational_to_contfrac(e, n)
  12.     convergents = ContinuedFractions.convergents_from_contfrac(frac)
  13.    
  14.     for (k, d) in convergents:
  15.         
  16.         #check if d is actually the key
  17.         if k != 0 and (e*d-1) % k == 0:
  18.             phi = (e*d-1)//k
  19.             s = n - phi + 1
  20.             # check if the equation x^2 - s*x + n = 0
  21.             # has integer roots
  22.             discr = s*s - 4*n
  23.             if discr >= 0:
  24.                 t = Arithmetic.is_perfect_square(discr)
  25.                 if t != -1 and (s+t) % 2 == 0:
  26.                     print("Hacked!")
  27.                     return d

  28. # TEST functions


  29. def test_hack_RSA():
  30.     print("Testing Wiener Attack")
  31.     times = 5
  32.    
  33.     while times>0:
  34.         # e,n,d = RSAvulnerableKeyGenerator.generateKeys(1024)
  35.         n = 101991809777553253470276751399264740131157682329252673501792154507006158434432009141995367241962525705950046253400188884658262496534706438791515071885860897552736656899566915731297225817250639873643376310103992170646906557242832893914902053581087502512787303322747780420210884852166586717636559058152544979471
  36.         e = 46731919563265721307105180410302518676676135509737992912625092976849075262192092549323082367518264378630543338219025744820916471913696072050291990620486581719410354385121760761374229374847695148230596005409978383369740305816082770283909611956355972181848077519920922059268376958811713365106925235218265173085

  37.         print("(e,n) is (", e, ", ", n, ")")
  38.         # print("d = ", d)
  39.    
  40.         hacked_d = hack_RSA(e, n)
  41.    
  42.         # if d == hacked_d:
  43.         #     print("Hack WORKED!")
  44.         # else:
  45.         #     print("Hack FAILED")
  46.         
  47.         # print("d = ", d, ", hacked_d = ", hacked_d)
  48.         print("hacked_d = ", hacked_d)
  49.         print("-------------------------")
  50.         times -= 1


  51. if __name__ == "__main__":
  52.     # test_is_perfect_square()
  53.     # print("-------------------------")
  54.     test_hack_RSA()
复制代码


代码分析:
分析一下github上求d的代码,其实过程就是上面写的那样,学习一下大佬怎么写的代码。
运算核心应该是这个文件:ContinuedFractions.py
第一个函数用于将实数变成连分数的数组表示形式。

​​

  1. def rational_to_contfrac(x,y):
  2.     '''
  3.     Converts a rational x/y fraction into
  4.     a list of partial quotients [a0, ..., an]
  5.     '''
  6.     a = x//y
  7.     pquotients = [a]
  8.     while a * y != x:
  9.         x,y = y,x-a*y
  10.         a = x//y
  11.         pquotients.append(a)
  12.     return pquotients
复制代码


第二个函数,用于分割原实数的连分数数组,因为求渐进分数的时候是一个个p、q逐渐求的。
​​
  1. def convergents_from_contfrac(frac):
  2.         '''
  3.         computes the list of convergents
  4.         using the list of partial quotients
  5.         '''
  6.         convs = [];
  7.         for i in range(len(frac)):
  8.                 convs.append(contfrac_to_rational(frac[0:i]))
  9.         return convs
复制代码

第三个函数,用于求出所给数组的渐进分数。
​​
  1. def contfrac_to_rational (frac):
  2.     '''Converts a finite continued fraction [a0, ..., an]
  3.      to an x/y rational.
  4.      '''
  5.     if len(frac) == 0:
  6.         return (0,1)
  7.     num = frac[-1]
  8.     denom = 1
  9.     for _ in range(-2,-len(frac)-1,-1):
  10.         num, denom = frac[_]*num+denom, num
  11.     return (num,denom)
复制代码

这样,convs数组就是保存连分数的渐近分数的数组,遍历frac逐渐求出渐进分数。



回复

使用道具 举报

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
 楼主| 发表于 2021-11-10 07:48:30 | 显示全部楼层
dangerous rsa
低加密指数


  1. import gmpy2
  2. from Crypto.Util.number import *

  3. n = 0x52d483c27cd806550fbe0e37a61af2e7cf5e0efb723dfc81174c918a27627779b21fa3c851e9e94188eaee3d5cd6f752406a43fbecb53e80836ff1e185d3ccd7782ea846c2e91a7b0808986666e0bdadbfb7bdd65670a589a4d2478e9adcafe97c6ee23614bcb2ecc23580f4d2e3cc1ecfec25c50da4bc754dde6c8bfd8d1fc16956c74d8e9196046a01dc9f3024e11461c294f29d7421140732fedacac97b8fe50999117d27943c953f18c4ff4f8c258d839764078d4b6ef6e8591e0ff5563b31a39e6374d0d41c8c46921c25e5904a817ef8e39e5c9b71225a83269693e0b7e3218fc5e5a1e8412ba16e588b3d6ac536dce39fcdfce81eec79979ea6872793
  4. e = 0x3
  5. c = 0x10652cdfaa6b63f6d7bd1109da08181e500e5643f5b240a9024bfa84d5f2cac9310562978347bb232d63e7289283871efab83d84ff5a7b64a94a79d34cfbd4ef121723ba1f663e514f83f6f01492b4e13e1bb4296d96ea5a353d3bf2edd2f449c03c4a3e995237985a596908adc741f32365

  6. k = 0
  7. while 1:
  8.     res = gmpy2.iroot(k*n+c, e)
  9.     if res[1] == True:
  10.         print(long_to_bytes(res[0]))
  11.         break
复制代码



回复

使用道具 举报

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
 楼主| 发表于 2021-11-10 09:03:11 | 显示全部楼层
rsa & what  共模攻击、base64隐写
先解出base64隐写后的明文:
  1. import gmpy2
  2. n = 785095419718268286866508214304816985447077293766819398728046411166917810820484759314291028976498223661229395009474063173705162627037610993539617751905443039278227583504604808251931083818909467613277587874545761074364427549966555519371913859875313577282243053150056274667798049694695703660313532933165449312949725581708965417273055582216295994587600975970124811496270080896977076946000102701030260990598181466447208054713391526313700681341093922240317428173599031624125155188216489476825606191521182034969120343287691181300399683515414809262700457525876691808180257730351707673660380698973884642306898810000633684878715402823143549139850732982897459698089649561190746850698130299458080255582312696873149210028240898137822888492559957665067936573356367589784593119016624072433872744537432005911668494455733330689385141214653091888017782049043434862620306783436169856564175929871100669913438980899219579329897753233450934770193915434791427728636586218049874617231705308003720066269312729135764175698611068808404054125581540114956463603240222497919384691718744014002554201602395969312999994159599536026359879060218056496345745457493919771337601177449899066579857630036350871090452649830775029695488575574985078428560054253180863725364147
  3. e1 = 1697
  4. e2 = 599

  5. c1 = [412629526163150748619328091306742267675740578011800062477174189782151273970783531227579758540364970485350157944321579108232221072397135934034064481497887079641131808838242743811511451355024436983050572020925065644355566434625618133203024215941534926113892937988520918939061441606915556516246057349589921494351383160036280826024605351878408056180907759973804117263002554923041750587548819746346813966673034182913325507826219961923932100526305289894965216608254252188398580139545189681875824089456195044984585824938384521905334289906422454152976834867304693292466676355760173232407753256256317546190171995276258924613533179898467683358934751999655196790168438343198229183747091108262988777659858609744709324571850262293294975336628234767258858873839342596887193772615000676401522431518310648303975593582965021189182246986957349253156736526071639973844039068996404290548474640668851856078201093335425412842295604919065487301340901573809617549185106072798799159726375235125260509158832996701927878713084753334549129580912412168594170659605421750204835970231909591063407612779337478065175988365401590396247576709343727196106058477166945670117868989025903023998142850338956985816131805349549059377047477131270847579095628384569645636821650, 494644347943710545224678831941589086572700792465459558770782213550069709458568349686998660541810166872034041584767487150140111151788221460027897193248273461607411027815984883969396220626358625041781558277804930212654296704055890683796941327712758797770820006623289146990000114915293539639766846910274034245607746230740851938158390562286057002223177609606376329007676845450142537930798148258428701466415483232670659815791064681384406494388237742330786225557303988025468036820082959712050733095860546860468575857084616069132051094882919253745234762029759124776348047587755897123575123506976140900565238840752841856713613368250071926171873213897914794115466890719123299469964019450899291410760762179836946570945555295288184698184555018368687708432612286248476073758067175481771199066581572870175460016017100414479346437034291784837132240891321931601494414908927713208448927221095745802380014441841139882391378410438764884597938773868771896252329517440068673532468372840830510218585255432000690265226016573313570977945083879214961394087065558376158826938257664840570952233832852869328785568175434516247720356520242602299510374317488182738732700078879665745909603766482100138001417023680647717824323143388857817595766172152883484274718248, 152942283599728307168144137370127212672611894072038732126041098102628831053000986759260271210671922070555948023688596575415822984026159010574404359474670428678518262175033880513984372909748992727828381694416776740981021730545374002974037896534944567124543272737618380646771071804878796585983783360553761828325817820260204820004421979881871027255562690952334900616675606524933557440263648233514757200263521499508373975003431306847453046714027687108396945719803444444954079308404947126216395526551292104722047878178373207886033071857277857997932255251315982837892164421298202073945919187779856785892717251746704537315003771369737854896595170485152591013676942418134278534037654467840633528916812275267230155352077736583130992587670941654695382287023971261529987384520843829695778029311786431227409189019205818351911572757145556993606643464336196802350204616056286497246016800105003143046120608673496196758720552776772796609670537056331996894322779267635281472481559819839042424017171718303214059720568484939239370144038161541354254182769979771948759413102933987773401644506930205164891773826513161783736386604783484446345744957119469799231796368324927570694496679453313927562345656690240414624431304646248599226046524702364131095964335, 79717988936247951265489157583697956031893477858854186991051529161879478488281744062318600470906120960002282886511477294555606503083169449335174864424180701080203993329996226566203834693869525797695969610065991941396723959032680019082506816443041598300477625793433080664346470586416385854692124426348587211026568667694805849554780794033764714016521711467557284846737236374990121316809833819996821592832639024026411520407330206281265390130763948165694574512140518775603040182029818771866749548761938870605590174330887949847420877829240131490902432602005681085180807294176837646062568094875766945890382971790015490163385088144673549085079635083262975154206269679142412897438231719704933258660779310737302680265445437771977749959110744959368586293082016067927548564967400845992380076107522755566531760628823374519718763740378295585535591752887339222947397184116326706799921515431185636740825707782742373783475781052674257292910213843986132987466810027275052416774693363446184518901899202502828670309452622347532932678874990809930682575738653876289384151496807194146308614368821006660626870989784697045160231069428458961107751207771093777394616856305293335603892178327520756554333365975114235981173451368131680404850832773147333013716920, 123111353650401158556639983459870663057297871992927053886971224773529636525110628183715748795987525113177540092814119928708272290370336537110381023134637759740716140969662183269370676630325583385284994943164692397459103195434968057377474610500216801375394703781249039351368816958227409657934091741509357152328382960684515093945552479461382281913961956745154260686029997827565075768703774895750561575155143606297116391666385705899138085693913246313778033627210312268959737394553510894720099165193981333775907531107232556909478156441457899797515694348816961762796703443502856101079430585547997496001098926600499728389113862894833789669213630332988693669889340482430613291490613803204484751470676686041002772556117213612152322606737150858116122936539131795111263513114569794532805886643087299918196635113037777138666914296986040549274559835214505300618256105508764026461518876579387159881983544667258537064954616097750399839661065797883103731694314852301848272092388637114950059216922969842082648527035538090054093890365647676119748995243416337805666557501345234056968476142608491830438065401219751688687373709390057521910942736632126729711606256158399963682990881473178216060827021373776598901281958527655543318413664277921492723185984, 36869806815936046911848195817405817350259890871483063184373728397968909458432625046025376290214729914038387534731762237978339011724858818860181178811639468996206294711495853807311240013786226884265118119546377272154555615363105236192878292703331473547623021744317034819416624562896226194523639793573028006666236271812390759036235867495803255905843636447252225413871038762657801345647584493917576263471587347202664391908570140389126903204602391093990827188675090199750617303773574821926387194478875191828814971296674530519321530805302667925998711835019806761133078403281404889374663875077339168901297819436499920958268483684335998301056068380228873524800383911402490807139268964095165069610454677558808756444381542173782815227920906224931028457073652453777424387873533280455944646592996920617956675786286711447540353883400282402551158169958389450168079568459656526911857835375748015814860506707921852997096156275804955989964215077733621769938075413007804223217091604613132253046399456747595300404564172224333936405545921819654435437072133387523533568472443532200069133022979195685683508297337961701169394794966256415112246587706103819620428258245999539040721929317130088874161577093962579487428358736401687123174207198251449851429295]
  6. c2 = [592169079372093727306100216011395857825646323934289480976073629037543922902098120901138454462177159996376654176248238979132528728327590301098966139983157980612320563496546128644967731000716697705104079039156276714872147463350811303393260622707024952543509891692246246277965823414460326811240048060543656588688604452353899779068825120910282167004715339763187734797180326976132213325054697165320479166356562518029805927741656605174809726397565772271562066078076105491745903986597877400370206718954975288721072048333678609055008135809089304229015364348490924974097403734627265297637171818849461766523691595241613878709865506436588268999163342945070495338153600520537498539457396582804692959296612715752573140296135784933206146091436617979599749774330699946637591406356289409716084034451049094715202196203486088368791744107629271647320273259836915312794297246589501008666299165717722507702866033454215783240025504356157664454861755286285777763585177751796252655008206383024707883077513745863312079349790275094080707502392866946325796914450602264462588722052297430827681750827349094323968337670311272933785838850649376115667223821665435911506351891489985627506615492005617098615432522564204152887767244129985681083657783356557756654335186, 373940646416832740878733255707567753033716583448402000789202767511920210382830343955553654111486728333980557319799362514960627879016797491389812007768832730979916230647641872759001906846747977631675704310179448857128160385701185892914523053669366534408863734305635222625590986006420486092550427301086984563126480814987024980594613542978310129247678826691418335300577577527951623696426435497835228167084738007750914270251001921329521479047662848650808989996085600197309361410863238526802127877523767262921515150984998560136647154865791163316503073285223966216441025637452229043510097323724381056976302288136843260163922706692913035222445496716008888946581535004546355744211680390731257309941902587303353139951102244865270295414474488798335404630458489706639805186573874814586736746232358849677477533671968344154242963289415569487579895910660999043578737461300406937828924818002658292769882181668784501439254131996848948120781562158861495883827848139425862249576454689133681009549361314460818658995959098228995702202268649635363105549975932395335076521137604288520082040121286614922986554652700056148966514178935952363036963217619879899671383604638416567950421350546204434902113156720006282720889591288850271076074941927715678306057176, 527630926460622936571385649841758214453416849039412401087443444317101857090904711485538107058823056085840539073345920792871368232355475394571098380596835468509997340505604333730547799560998822989747473780307779717715522787724471724766494090783971030594671013168209717686720448579582618378459567979027822271918653169622428153856198907810040224340270362413432495029672123261375400927159831537760709974778708160583252613784358234858583174544777979242887938827573604837766801998381379999076416444683891078093889686055482709838668356120916040352123019019255084513769603803814947774554028717814638951416291274696771515474086351482107953150253616922787262398450376249126999644026382478413080973933173079111305142716133389111399235545279259017424722601848670061556859163943895466553927946412523750166582734005733378328468250568944945912238495877929717101722314678120172228493787964904072583905721074766711732215815561012960394537195757832959268603775112932862105945720853959285187521763557915356428113876893276879775603217718981852114599706699524551973934242045743122744146361596971245034059345915315495232135483464496114770357536576200511490922413208178149869347802988786513451486411409887164516065062084917556120712465074206435831498113605, 8786437178698940322877889807009957616777351844979869726962356553244050911283984280960665761649310895230455072977431415102053987735969326553978994853162483051544656873294555116009995592043183070208706258164840540599577072097104139505857517663273929851202628854185356185647194933800084230503413037858893307713037149307477830536758283681093517617820169181420796105338681582230788318108428132051793761014952837330456262272828627355701464740578197966332613127307037255647286823496355917642353327912440019621838870388091824748629637425759125214639885130163183752378908729773517053259212525494555880921052679512582051516604297098204363525081039382358483926727008679327719083138865969291911863630382097160230960738043575559330264018212774424527719153248563876760067931499029384228993253862501939337758514377472011933279273181144830381169849387893799390755052093069179605579485710343655570028592595882436632426527654452895431758715126580164902410286422637215098476316042367916779431052267545769495994723721129943616294879642305545894912914632980455031755879087401575310699765408473606166727137934224515998416625122213056208800095077933103150699272650116151674702438463062734472714004926103668378506804002740045547964716693536349447660850580, 205314962204511500352858372254132533167549960825498949618514841570703199264867431580754674275990554478140637041427842111391746883257447120035947621456863890934062044010795443059281736346976175772415034838334682726635263432655537852942177334888025283748611576171534251461847349566505628290587224150869640386437623371249743165260396675220683302142805646368906930575140628610003919131999295855501215111393294818218799982703289304596989070475000081175510085432290264502023736899104746316830742226946395027029820825791831870857382647221322734605026210073093918331247494307555600335550942340526536281372036612138713881098866303169425501998978400008829873080965592009371176208668290074288903681417933657472279670688597862835627506340169978450918788539270346340385928840299573889292189531738082166408734046381423516467694328971385421907314814283489322619386570046183556572383980777277173349209330683424343658179781015072259378576130442222984963071166207642585589822061597282467850868050737957726423713761694231879497037175627546427449730638216214828463003483408928375620315193290871300316930139260521382533279767663839278693750409419493280753368451508802658272220767624766390639285308433607255253282702383762149755935518922075584637512494819, 271453634732502613378948161256470991260052778799128789839624515809143527363206813219580098196957510291648493698144497567392065251244844074992734669490296293997386198359280316655904691639367482203210051809125904410431506925238374843856343243276508280641059690938930957474434518308646618959004216831130099873532714372402117796666560677624822509159287675432413016478948594640872091688482149004426363946048517480052906306290126242866034249478040406351940088231081456109195799442996799641647167552689564613346415247906852055588498305665928450828756152103096629274760601528737639415361467941349982213641454967962723875032638267311935042334584913897338553953961877439389588793074211502597238465542889335363559052368180212013206172712561221352833891640659020253527584706465205486408990762759230842192028381048563437724528409174790022752557512795782713125166158329880702730769957185428522011430144840232256419113631679343171680631630775266488738173707357123139368825087043785842169049943237537188129367275730984789479909103397937113837824575137021012333461552176687570010445744268373840742899299977372834041925102853718964831225250407279578465008537542659673685686242773379131904890865110699190451534445434533919127658976874721029586168106207]

  7. g, x, y = gmpy2.gcdext(e1, e2)
  8. print(x, y)
  9. m = []
  10. for i in range(len(c1)):
  11.     m = pow(c1[i], x, n)*pow(c2[i], y, n) % n

  12. mstr = "VEhJUz==\nRkxBR3==\nSVN=\nSElEREVOLo==\nQ0FO\nWU9V\nRklORM==\nSVT=\nT1VUP4==\nRE8=\nWU9V\nS05PV9==\nQkFTRTY0P5==\nWW91bmdD\nVEhJTku=\nWU9V\nQVJF\nTk9U\nVEhBVE==\nRkFNSUxJQVI=\nV0lUSO==\nQkFTRTY0Lh==\nQmFzZTY0\naXO=\nYW==\nZ3JvdXA=\nb2b=\nc2ltaWxhcn==\nYmluYXJ5LXRvLXRleHR=\nZW5jb2Rpbme=\nc2NoZW1lc0==\ndGhhdD==\ncmVwcmVzZW50\nYmluYXJ5\nZGF0YW==\naW5=\nYW6=\nQVNDSUl=\nc3RyaW5n\nZm9ybWF0\nYnk=\ndHJhbnNsYXRpbmd=\naXS=\naW50b1==\nYT==\ncmFkaXgtNjQ=\ncmVwcmVzZW50YXRpb24u\nVGhl\ndGVybc==\nQmFzZTY0\nb3JpZ2luYXRlc8==\nZnJvbd==\nYY==\nc3BlY2lmaWN=\nTUlNRT==\nY29udGVudI==\ndHJhbnNmZXI=\nZW5jb2Rpbmcu\nVGhl\ncGFydGljdWxhct==\nc2V0\nb2b=\nNjR=\nY2hhcmFjdGVyc5==\nY2hvc2Vu\ndG+=\ncmVwcmVzZW50\ndGhl\nNjQ=\ncGxhY2UtdmFsdWVz\nZm9y\ndGhl\nYmFzZd==\ndmFyaWVz\nYmV0d2Vlbt==\naW1wbGVtZW50YXRpb25zLp==\nVGhl\nZ2VuZXJhbI==\nc3RyYXRlZ3n=\naXO=\ndG9=\nY2hvb3Nl\nNjR=\nY2hhcmFjdGVyc5==\ndGhhdA==\nYXJl\nYm90aN==\nbWVtYmVyc5==\nb2a=\nYS==\nc3Vic2V0\nY29tbW9u\ndG8=\nbW9zdM==\nZW5jb2RpbmdzLA==\nYW5k\nYWxzb8==\ncHJpbnRhYmxlLg==\nVGhpc9==\nY29tYmluYXRpb25=\nbGVhdmVz\ndGhl\nZGF0YW==\ndW5saWtlbHk=\ndG/=\nYmV=\nbW9kaWZpZWS=\naW5=\ndHJhbnNpdE==\ndGhyb3VnaN==\naW5mb3JtYXRpb26=\nc3lzdGVtcyw=\nc3VjaN==\nYXM=\nRS1tYWlsLD==\ndGhhdA==\nd2VyZQ==\ndHJhZGl0aW9uYWxseQ==\nbm90\nOC1iaXQ=\nY2xlYW4uWzFd\nRm9y\nZXhhbXBsZSw=\nTUlNRSdz\nQmFzZTY0\naW1wbGVtZW50YXRpb24=\ndXNlcw==\nQahDWiw=\nYahDeiw=\nYW5k\nMKhDOQ==\nZm9y\ndGhl\nZmlyc3Q=\nNjI=\ndmFsdWVzLg==\nT3RoZXI=\ndmFyaWF0aW9ucw==\nc2hhcmU=\ndGhpcw==\ncHJvcGVydHk=\nYnV0\nZGlmZmVy\naW4=\ndGhl\nc3ltYm9scw==\nY2hvc2Vu\nZm9y\ndGhl\nbGFzdA==\ndHdv\ndmFsdWVzOw==\nYW4=\nZXhhbXBsZQ==\naXM=\nVVRGLTcu"
  13. mstr.split("\n")
  14. print(mstr)
复制代码




然后python2脚本解出flag:
  1. def inttobin(a, n):
  2.     ret = bin(a)[2:]
  3.     while len(ret) < n:
  4.         ret = '0' + ret
  5.     return ret

  6. table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

  7. f = open("./flag.txt", "r")
  8. tmpbin = ''
  9. res = ''
  10. line = f.readline()
  11. while line:
  12.     if line[-2] == '=':
  13.         if line[-3] == '=':
  14.             tmpbin += inttobin(table.index(line[-4]), 6)[2:]
  15.         else:
  16.             tmpbin += inttobin(table.index(line[-3]), 6)[4:]
  17.     line = f.readline()
  18. quotient = len(tmpbin)/8
  19. for i in range(quotient):
  20.     res += chr(int(tmpbin[8*i:8*i+8], 2))
  21. print(res)
复制代码
flag.txt的内容:
  1. VEhJUz==
  2. RkxBR3==
  3. SVN=
  4. SElEREVOLo==
  5. Q0FO
  6. WU9V
  7. RklORM==
  8. SVT=
  9. T1VUP4==
  10. RE8=
  11. WU9V
  12. S05PV9==
  13. QkFTRTY0P5==
  14. WW91bmdD
  15. VEhJTku=
  16. WU9V
  17. QVJF
  18. Tk9U
  19. VEhBVE==
  20. RkFNSUxJQVI=
  21. V0lUSO==
  22. QkFTRTY0Lh==
  23. QmFzZTY0
  24. aXO=
  25. YW==
  26. Z3JvdXA=
  27. b2b=
  28. c2ltaWxhcn==
  29. YmluYXJ5LXRvLXRleHR=
  30. ZW5jb2Rpbme=
  31. c2NoZW1lc0==
  32. dGhhdD==
  33. cmVwcmVzZW50
  34. YmluYXJ5
  35. ZGF0YW==
  36. aW5=
  37. YW6=
  38. QVNDSUl=
  39. c3RyaW5n
  40. Zm9ybWF0
  41. Ynk=
  42. dHJhbnNsYXRpbmd=
  43. aXS=
  44. aW50b1==
  45. YT==
  46. cmFkaXgtNjQ=
  47. cmVwcmVzZW50YXRpb24u
  48. VGhl
  49. dGVybc==
  50. QmFzZTY0
  51. b3JpZ2luYXRlc8==
  52. ZnJvbd==
  53. YY==
  54. c3BlY2lmaWN=
  55. TUlNRT==
  56. Y29udGVudI==
  57. dHJhbnNmZXI=
  58. ZW5jb2Rpbmcu
  59. VGhl
  60. cGFydGljdWxhct==
  61. c2V0
  62. b2b=
  63. NjR=
  64. Y2hhcmFjdGVyc5==
  65. Y2hvc2Vu
  66. dG+=
  67. cmVwcmVzZW50
  68. dGhl
  69. NjQ=
  70. cGxhY2UtdmFsdWVz
  71. Zm9y
  72. dGhl
  73. YmFzZd==
  74. dmFyaWVz
  75. YmV0d2Vlbt==
  76. aW1wbGVtZW50YXRpb25zLp==
  77. VGhl
  78. Z2VuZXJhbI==
  79. c3RyYXRlZ3n=
  80. aXO=
  81. dG9=
  82. Y2hvb3Nl
  83. NjR=
  84. Y2hhcmFjdGVyc5==
  85. dGhhdA==
  86. YXJl
  87. Ym90aN==
  88. bWVtYmVyc5==
  89. b2a=
  90. YS==
  91. c3Vic2V0
  92. Y29tbW9u
  93. dG8=
  94. bW9zdM==
  95. ZW5jb2RpbmdzLA==
  96. YW5k
  97. YWxzb8==
  98. cHJpbnRhYmxlLg==
  99. VGhpc9==
  100. Y29tYmluYXRpb25=
  101. bGVhdmVz
  102. dGhl
  103. ZGF0YW==
  104. dW5saWtlbHk=
  105. dG/=
  106. YmV=
  107. bW9kaWZpZWS=
  108. aW5=
  109. dHJhbnNpdE==
  110. dGhyb3VnaN==
  111. aW5mb3JtYXRpb26=
  112. c3lzdGVtcyw=
  113. c3VjaN==
  114. YXM=
  115. RS1tYWlsLD==
  116. dGhhdA==
  117. d2VyZQ==
  118. dHJhZGl0aW9uYWxseQ==
  119. bm90
  120. OC1iaXQ=
  121. Y2xlYW4uWzFd
  122. Rm9y
  123. ZXhhbXBsZSw=
  124. TUlNRSdz
  125. QmFzZTY0
  126. aW1wbGVtZW50YXRpb24=
  127. dXNlcw==
  128. QahDWiw=
  129. YahDeiw=
  130. YW5k
  131. MKhDOQ==
  132. Zm9y
  133. dGhl
  134. Zmlyc3Q=
  135. NjI=
  136. dmFsdWVzLg==
  137. T3RoZXI=
  138. dmFyaWF0aW9ucw==
  139. c2hhcmU=
  140. dGhpcw==
  141. cHJvcGVydHk=
  142. YnV0
  143. ZGlmZmVy
  144. aW4=
  145. dGhl
  146. c3ltYm9scw==
  147. Y2hvc2Vu
  148. Zm9y
  149. dGhl
  150. bGFzdA==
  151. dHdv
  152. dmFsdWVzOw==
  153. YW4=
  154. ZXhhbXBsZQ==
  155. aXM=
  156. VVRGLTcu
复制代码


回复

使用道具 举报

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
 楼主| 发表于 2021-11-10 09:17:45 | 显示全部楼层
babyRSA 普通计算
  1. from Crypto.Util.number import *
  2. pjq = 0x1232fecb92adead91613e7d9ae5e36fe6bb765317d6ed38ad890b4073539a6231a6620584cea5730b5af83a3e80cf30141282c97be4400e33307573af6b25e2ea
  3. s = 0x5248becef1d925d45705a7302700d6a0ffe5877fddf9451a9c1181c4d82365806085fd86fbaab08b6fc66a967b2566d743c626547203b34ea3fdb1bc06dd3bb765fd8b919e3bd2cb15bc175c9498f9d9a0e216c2dde64d81255fa4c05a1ee619fc1fc505285a239e7bc655ec6605d9693078b800ee80931a7a0c84f33c851740
  4. e = 0xe6b1bee47bd63f615c7d0a43c529d219
  5. d = 0x2dde7fbaed477f6d62838d55b0d0964868cf6efb2c282a5f13e6008ce7317a24cb57aec49ef0d738919f47cdcd9677cd52ac2293ec5938aa198f962678b5cd0da344453f521a69b2ac03647cdd8339f4e38cec452d54e60698833d67f9315c02ddaa4c79ebaa902c605d7bda32ce970541b2d9a17d62b52df813b2fb0c5ab1a5
  6. enc_flag = 0x50ae00623211ba6089ddfae21e204ab616f6c9d294e913550af3d66e85d0c0693ed53ed55c46d8cca1d7c2ad44839030df26b70f22a8567171a759b76fe5f07b3c5a6ec89117ed0a36c0950956b9cde880c575737f779143f921d745ac3bb0e379c05d9a3cc6bf0bea8aa91e4d5e752c7eb46b2e023edbc07d24a7c460a34a9a

  7. n = s-pjq-1
  8. print(n)
  9. m = pow(enc_flag, d, n)
  10. print(long_to_bytes(m))
复制代码


回复

使用道具 举报

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
 楼主| 发表于 2021-11-10 10:31:48 | 显示全部楼层

[HDCTF2019]bbbbbbrsa1   很简单,只是需要注意编码问题


  1. from Crypto.Util.number import *
  2. import gmpy2
  3. import binascii

  4. p = 177077389675257695042507998165006460849
  5. n = 37421829509887796274897162249367329400988647145613325367337968063341372726061
  6. c = 2373740699529364991763589324200093466206785561836101840381622237225512234632
  7. q = n // p
  8. phi = (p-1)*(q-1)
  9. for e in range(50000, 70000):
  10.     if gmpy2.gcd(e, phi) == 1:
  11.         d = gmpy2.invert(e, phi)
  12.         m = pow(c, d, n)
  13.         m = binascii.b2a_hex(long_to_bytes(m)).decode()

  14.         hx = m.encode('utf-8')
  15.         str_bin = binascii.unhexlify(hx)
  16.         try:
  17.             st = str_bin.decode('utf-8')
  18.             if 'flag{' in st:
  19.                 print(st)
  20.         except:
  21.             pass
复制代码


回复

使用道具 举报

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
 楼主| 发表于 2021-11-10 10:35:42 | 显示全部楼层

[HDCTF2019]basic rsa1

和上面的几乎一样。
  1. from Crypto.Util.number import *
  2. import gmpy2
  3. import binascii

  4. p = 262248800182277040650192055439906580479
  5. q = 262854994239322828547925595487519915551
  6. e = 65533
  7. c = 27565231154623519221597938803435789010285480123476977081867877272451638645710
  8. n = p*q
  9. phi = (p-1)*(q-1)
  10. d = gmpy2.invert(e, phi)
  11. m = pow(c, d, n)
  12. m = binascii.b2a_hex(long_to_bytes(m)).decode()

  13. hx = m.encode('utf-8')
  14. str_bin = binascii.unhexlify(hx)
  15. try:
  16.     st = str_bin.decode('utf-8')
  17.     if 'flag{' in st:
  18.         print(st)
  19. except:
  20.     pass
复制代码


回复

使用道具 举报

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
 楼主| 发表于 2021-11-19 10:01:56 | 显示全部楼层
学校的赛题,不出自buuctf。

已知n、e、d,分解n

这是我在学校的比赛中遇到的一道题,我把n分解出来了,最后flag不对??我也不知道为嘛,学校密码选手太少了,没得人讨论,老师也不给wp(难受.jpg)
原题目:

  1. from gmpy2 import invert
  2. from md5 import md5
  3. from secret import p, q

  4. e = ?????
  5. n = p*q
  6. phi = (p-1)*(q-1)
  7. d = invert(e, phi)
  8. ans = gcd(e,phi)

  9. print n, e, d
  10. print "Flag: flag{%s}" %md5(str(p + q)).hexdigest()

  11. """
  12. n = 75314708877985876609891002668743876625554190294166511210009550179954413879734907287395890885734882006305000064658341495591490553852990740634932819033664336759786999376788951906380623027099236652601832025317652283419527455478573200079725665895206177368408570970326643545210806238705537263439737999272322484393
  13. d = 10304874744787654147496365278986478201114950968434882459767596171356827577657686449351556699845391000049127292331775147314862622929371560548378501236023888087293532591829210438002936193106686968965664061672386720994287123226920682554316401724229936815553418464587344630901327534059887918508779592213104601681
  14. """
复制代码
​​


脚本:
  1. import random
  2. import gmpy2
  3. from Crypto.Util.number import *


  4. def getpq(n, d):
  5.     for e in range(0, 100000):
  6.         k = e * d - 1
  7.         g = random.randint(0, n)
  8.         while gmpy2.gcd(g, n) != 1:
  9.             g = random.randint(0, n)
  10.         while k % 2 == 0:
  11.             k = k//2
  12.             temp = gmpy2.powmod(g, k, n)-1
  13.             if gmpy2.gcd(temp, n) > 1 and temp != 0:
  14.                 print(e)
  15.                 return gmpy2.gcd(temp, n)


  16. if __name__ == '__main__':
  17.     n = 75314708877985876609891002668743876625554190294166511210009550179954413879734907287395890885734882006305000064658341495591490553852990740634932819033664336759786999376788951906380623027099236652601832025317652283419527455478573200079725665895206177368408570970326643545210806238705537263439737999272322484393
  18.     d = 10304874744787654147496365278986478201114950968434882459767596171356827577657686449351556699845391000049127292331775147314862622929371560548378501236023888087293532591829210438002936193106686968965664061672386720994287123226920682554316401724229936815553418464587344630901327534059887918508779592213104601681
  19.     p = getpq(n, d)
  20.     print(p)
  21.     q = n // p
  22.     c = p+q
  23.     print(c)
复制代码


回复

使用道具 举报

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
 楼主| 发表于 2021-12-20 20:39:32 | 显示全部楼层
  1. import gmpy2
  2. from Crypto.Util.number import *
  3. p = 842868045681390934539739959201847552284980179958879667933078453950968566151662147267006293571765463137270594151138695778986165111380428806545593588078365331313084230014618714412959584843421586674162688321942889369912392031882620994944241987153078156389470370195514285850736541078623854327959382156753458569
  4. q = 139916095583110895133596833227506693679306709873174024876891023355860781981175916446323044732913066880786918629089023499311703408489151181886568535621008644997971982182426706592551291084007983387911006261442519635405457077292515085160744169867410973960652081452455371451222265819051559818441257438021073941183
  5. n = 117930806043507374325982291823027285148807239117987369609583515353889814856088099671454394340816761242974462268435911765045576377767711593100416932019831889059333166946263184861287975722954992219766493089630810876984781113645362450398009234556085330943125568377741065242183073882558834603430862598066786475299918395341014877416901185392905676043795425126968745185649565106322336954427505104906770493155723995382318346714944184577894150229037758434597242564815299174950147754426950251419204917376517360505024549691723683358170823416757973059354784142601436519500811159036795034676360028928301979780528294114933347127
  6. c = 41971850275428383625653350824107291609587853887037624239544762751558838294718672159979929266922528917912189124713273673948051464226519605803745171340724343705832198554680196798623263806617998072496026019940476324971696928551159371970207365741517064295956376809297272541800647747885170905737868568000101029143923792003486793278197051326716680212726111099439262589341050943913401067673851885114314709706016622157285023272496793595281054074260451116213815934843317894898883215362289599366101018081513215120728297131352439066930452281829446586562062242527329672575620261776042653626411730955819001674118193293313612128
  7. flag = "CTF"
  8. phi = (p-1)*(q-1)
  9. for e in range(2, 1000000):
  10.     try:
  11.         d = gmpy2.invert(e,phi)
  12.         m = pow(c, d, n)
  13.         st = str(long_to_bytes(m))

  14.         if flag in st:
  15.             print(st)
  16.             break
  17.     except:
  18.         pass
复制代码
  1. A=(((y%x)**5)%(x%y))**2019+y**316+(y+1)/x
  2. p=next_prime(z*x*y)
  3. q=next_prime(z)
  4. A =  2683349182678714524247469512793476009861014781004924905484127480308161377768192868061561886577048646432382128960881487463427414176114486885830693959404989743229103516924432512724195654425703453612710310587164417035878308390676612592848750287387318129424195208623440294647817367740878211949147526287091298307480502897462279102572556822231669438279317474828479089719046386411971105448723910594710418093977044179949800373224354729179833393219827789389078869290217569511230868967647963089430594258815146362187250855166897553056073744582946148472068334167445499314471518357535261186318756327890016183228412253724
  5. n =  117930806043507374325982291823027285148807239117987369609583515353889814856088099671454394340816761242974462268435911765045576377767711593100416932019831889059333166946263184861287975722954992219766493089630810876984781113645362450398009234556085330943125568377741065242183073882558834603430862598066786475299918395341014877416901185392905676043795425126968745185649565106322336954427505104906770493155723995382318346714944184577894150229037758434597242564815299174950147754426950251419204917376517360505024549691723683358170823416757973059354784142601436519500811159036795034676360028928301979780528294114933347127
  6. c =  41971850275428383625653350824107291609587853887037624239544762751558838294718672159979929266922528917912189124713273673948051464226519605803745171340724343705832198554680196798623263806617998072496026019940476324971696928551159371970207365741517064295956376809297272541800647747885170905737868568000101029143923792003486793278197051326716680212726111099439262589341050943913401067673851885114314709706016622157285023272496793595281054074260451116213815934843317894898883215362289599366101018081513215120728297131352439066930452281829446586562062242527329672575620261776042653626411730955819001674118193293313612128
复制代码
[RoarCTF2019]RSA
回复

使用道具 举报

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
 楼主| 发表于 2021-12-20 23:10:24 | 显示全部楼层
[RoarCTF2019]babyRSA
  1. import sympy
  2. import random

  3. def myGetPrime():
  4.     A= getPrime(513)
  5.     print(A)
  6.     B=A-random.randint(1e3,1e5)
  7.     print(B)
  8.     return sympy.nextPrime((B!)%A)
  9. p=myGetPrime()
  10. #A1=21856963452461630437348278434191434000066076750419027493852463513469865262064340836613831066602300959772632397773487317560339056658299954464169264467234407
  11. #B1=21856963452461630437348278434191434000066076750419027493852463513469865262064340836613831066602300959772632397773487317560339056658299954464169264467140596

  12. q=myGetPrime()
  13. #A2=16466113115839228119767887899308820025749260933863446888224167169857612178664139545726340867406790754560227516013796269941438076818194617030304851858418927
  14. #B2=16466113115839228119767887899308820025749260933863446888224167169857612178664139545726340867406790754560227516013796269941438076818194617030304851858351026

  15. r=myGetPrime()

  16. n=p*q*r
  17. #n=85492663786275292159831603391083876175149354309327673008716627650718160585639723100793347534649628330416631255660901307533909900431413447524262332232659153047067908693481947121069070451562822417357656432171870951184673132554213690123308042697361969986360375060954702920656364144154145812838558365334172935931441424096270206140691814662318562696925767991937369782627908408239087358033165410020690152067715711112732252038588432896758405898709010342467882264362733
  18. c=pow(flag,e,n)
  19. #e=0x1001
  20. #c=75700883021669577739329316795450706204502635802310731477156998834710820770245219468703245302009998932067080383977560299708060476222089630209972629755965140317526034680452483360917378812244365884527186056341888615564335560765053550155758362271622330017433403027261127561225585912484777829588501213961110690451987625502701331485141639684356427316905122995759825241133872734362716041819819948645662803292418802204430874521342108413623635150475963121220095236776428
  21. #so,what is the flag?
复制代码
​​
  1. import gmpy2
  2. from Crypto.Util.number import *
  3. import sympy

  4. # 求M
  5. def Wilson(a, b):
  6.     c=1
  7.     b = b+1
  8.     while b<a:
  9.         c = c*b
  10.         c = c%a
  11.         b = b+1
  12.     return c


  13. A1 = 21856963452461630437348278434191434000066076750419027493852463513469865262064340836613831066602300959772632397773487317560339056658299954464169264467234407
  14. B1 = 21856963452461630437348278434191434000066076750419027493852463513469865262064340836613831066602300959772632397773487317560339056658299954464169264467140596
  15. m1 = Wilson(A1, B1)
  16. c1 = gmpy2.invert(m1,A1)
  17. p = sympy.nextprime((c1*(-1)%A1),ith=1)
  18. print(p)

  19. A2 = 16466113115839228119767887899308820025749260933863446888224167169857612178664139545726340867406790754560227516013796269941438076818194617030304851858418927
  20. B2 = 16466113115839228119767887899308820025749260933863446888224167169857612178664139545726340867406790754560227516013796269941438076818194617030304851858351026
  21. m2 = (Wilson(A2,B2))*(-1)%A2
  22. c2 = gmpy2.invert(m2,A2)
  23. q = sympy.nextprime(c2,ith=1)
  24. print(q)
  25. n=85492663786275292159831603391083876175149354309327673008716627650718160585639723100793347534649628330416631255660901307533909900431413447524262332232659153047067908693481947121069070451562822417357656432171870951184673132554213690123308042697361969986360375060954702920656364144154145812838558365334172935931441424096270206140691814662318562696925767991937369782627908408239087358033165410020690152067715711112732252038588432896758405898709010342467882264362733

  26. r=n//p//q

  27. phi = (p-1)*(q-1)*(r-1)
  28. e=0x1001
  29. d = gmpy2.invert(e,phi)
  30. c=75700883021669577739329316795450706204502635802310731477156998834710820770245219468703245302009998932067080383977560299708060476222089630209972629755965140317526034680452483360917378812244365884527186056341888615564335560765053550155758362271622330017433403027261127561225585912484777829588501213961110690451987625502701331485141639684356427316905122995759825241133872734362716041819819948645662803292418802204430874521342108413623635150475963121220095236776428
  31. m = pow(c,d,n)
  32. print(long_to_bytes(m))
复制代码


回复

使用道具 举报

46

主题

165

帖子

731

积分

高级会员

Rank: 4

积分
731
 楼主| 发表于 2021-12-21 00:28:51 | 显示全部楼层
[GWCTF 2019]BabyRSA
学到了一个很好用的解方程工具
题目源码:

  1. import hashlib
  2. import sympy
  3. from Crypto.Util.number import *

  4. flag = 'GWHT{******}'
  5. secret = '******'

  6. assert(len(flag) == 38)

  7. half = len(flag) / 2

  8. flag1 = flag[:half]
  9. flag2 = flag[half:]

  10. secret_num = getPrime(1024) * bytes_to_long(secret)

  11. p = sympy.nextprime(secret_num)
  12. q = sympy.nextprime(p)

  13. N = p * q

  14. e = 0x10001

  15. F1 = bytes_to_long(flag1)
  16. F2 = bytes_to_long(flag2)

  17. c1 = F1 + F2
  18. c2 = pow(F1, 3) + pow(F2, 3)
  19. assert(c2 < N)

  20. m1 = pow(c1, e, N)
  21. m2 = pow(c2, e, N)

  22. output = open('secret', 'w')
  23. output.write('N=' + str(N) + '\n')
  24. output.write('m1=' + str(m1) + '\n')
  25. output.write('m2=' + str(m2) + '\n')
  26. output.close()
复制代码
经过一系列计算得到两个方程:
​​
然后用sympy.solve解方程即可,不用自己推导,超级方便。
注意要提前格式化根a和b
  1. a = sympy.Symbol("a")
  2. b = sympy.Symbol("b")
复制代码
  1. import gmpy2
  2. from Crypto.Util.number import *
  3. import sympy

  4. N=636585149594574746909030160182690866222909256464847291783000651837227921337237899651287943597773270944384034858925295744880727101606841413640006527614873110651410155893776548737823152943797884729130149758279127430044739254000426610922834573094957082589539445610828279428814524313491262061930512829074466232633130599104490893572093943832740301809630847541592548921200288222432789208650949937638303429456468889100192613859073752923812454212239908948930178355331390933536771065791817643978763045030833712326162883810638120029378337092938662174119747687899484603628344079493556601422498405360731958162719296160584042671057160241284852522913676264596201906163
  5. p = 797862863902421984951231350430312260517773269684958456342860983236184129602390919026048496119757187702076499551310794177917920137646835888862706126924088411570997141257159563952725882214181185531209186972351469946269508511312863779123205322378452194261217016552527754513215520329499967108196968833163329724620251096080377747699
  6. q = 797862863902421984951231350430312260517773269684958456342860983236184129602390919026048496119757187702076499551310794177917920137646835888862706126924088411570997141257159563952725882214181185531209186972351469946269508511312863779123205322378452194261217016552527754513215520329499967108196968833163329724620251096080377748737
  7. phi = (p-1)*(q-1)
  8. e = 0x10001
  9. d = gmpy2.invert(e, phi)
  10. c1=90009974341452243216986938028371257528604943208941176518717463554774967878152694586469377765296113165659498726012712288670458884373971419842750929287658640266219686646956929872115782173093979742958745121671928568709468526098715927189829600497283118051641107305128852697032053368115181216069626606165503465125725204875578701237789292966211824002761481815276666236869005129138862782476859103086726091860497614883282949955023222414333243193268564781621699870412557822404381213804026685831221430728290755597819259339616650158674713248841654338515199405532003173732520457813901170264713085107077001478083341339002069870585378257051150217511755761491021553239
  11. c2=487443985757405173426628188375657117604235507936967522993257972108872283698305238454465723214226871414276788912058186197039821242912736742824080627680971802511206914394672159240206910735850651999316100014691067295708138639363203596244693995562780286637116394738250774129759021080197323724805414668042318806010652814405078769738548913675466181551005527065309515364950610137206393257148357659666687091662749848560225453826362271704292692847596339533229088038820532086109421158575841077601268713175097874083536249006018948789413238783922845633494023608865256071962856581229890043896939025613600564283391329331452199062858930374565991634191495137939574539546

  12. m1 = pow(c1,d,N)
  13. m2 = pow(c2,d,N)
  14. a = sympy.Symbol("a")
  15. b = sympy.Symbol("b")
  16. res = sympy.solve([a+b-m1,pow(a,3)+pow(b,3)-m2],[a,b])

  17. f1 = long_to_bytes(res[0][0])
  18. f2 = long_to_bytes(res[0][1])

  19. print(f2+f1)
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 00:44 , Processed in 0.022961 second(s), 16 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表