记录一下看了的几道题。有两道Crypto代码实在是冗长,没什么做的欲望。
Crypto
CCCCC
5c4c4c6c4c3c4c3c5c4c4c6c7cbc6c3c7c3c6c8c6cfc7c5c7c4c5cfc6c3c6cfc7c5c7c4c5cfc6c3c7c4c3c0c5cfc6c3c6cdc7c9c5cfc6c3c6c2c3c0c7c9c5cfc6c3c3c4c6cec6c4c5cfc6c3c6cdc7c9c5cfc6c3c6c4c6cfc6c7c5cfc6c3c6c1c6cec6c4c5cfc6c3c6cdc7c9c5cfc6c3c6c3c3c4c3c7c7cdc0ca
把c去掉之后hex to char就行。
Conway
task
Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from secret import generate_next_key, flagimport hashlibfrom Crypto.Cipher import AESfrom Crypto.Util.Padding import pad initial = 11131221131211131231121113112221121321132132211331222113112211 initial = generate_next_key(initial)print (initial) initial = generate_next_key(initial) h = hashlib.sha256() h.update(str (initial).encode()) key = h.digest() cipher = AES.new(key, AES.MODE_ECB)print (cipher.encrypt(pad(flag.encode(),16 )).hex ())
output.txt
plaintext 1 2 311311222113111231131112132112311321322112111312211312111322212311322113212221 f143845f3c4d9ad024ac8f76592352127651ff4d8c35e48ca9337422a0d7f20ec0c2baf530695c150efff20bbc17ca4c
题目名让我想到Conway非常经典的Game of
Life,不过这是个一维的情况,我不是很懂规则。最后cheng_xing提醒我其实就是数数——对于最初的initial,开始是三个连续的1,所以递推后的initial开始就是31,接着是一个连续的3,所以接着是13,以此类推。
Genetics
task
plaintext 1 2 3 I just took a quick look at my DNA. I feel like I was created for this CTF. CCCA CACG CAAT CAAT CCCA CACG CTGT ATAC CCTT CTCT ATAC CGTA CGTA CCTT CGCT ATAT CTCA CCTT CTCA CGGA ATAC CTAT CCTT ATCA CTAT CCTT ATCA CCTT CTCA ATCA CTCA CTCA ATAA ATAA CCTT CCCG ATAT CTAG CTGC CCTT CTAT ATAA ATAA CGTG CTTC
对一下密文和已知的flag头能猜到其实就是每个字母代表两个bit而已。
exp
Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import sysfrom Crypto.Util.number import * bin_dna = {'A' :'00' ,'C' :'01' ,'G' :'10' ,'T' :'11' }def bin_2_code (string ): string = string.replace(" " ,"" ) string = string.replace("\n" ,"" ) final="" for j in range (0 ,len (string)): final+=bin_dna[string[j]] return long_to_bytes(int (final,2 )) input_str = input ("Input:" )print (bin_2_code(input_str))
Hellfire Phantom
task
python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 from sage.all import *import randomfrom Crypto.Util.number import getPrime, isPrime, long_to_bytes, bytes_to_longfrom Crypto.Util.Padding import padfrom Crypto.Cipher import AESfrom hashlib import sha256 FLAG = b'REDACTED' secret = REDACTED b_curve = REDACTED p = 1154543773027194978300531105544404721440832315984713424625039 g = 2 shared = pow (g,secret,p)print (f"p = {p} " )print (f"g = {g} " )print (f"shared = {shared} " ) secret2 = bytes_to_long(FLAG) p_curve = 4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000001 a_curve = 35220 Z = GF(p_curve) E = EllipticCurve(Z, [a_curve,b_curve]) G = E.lift_x(Z(secret)) P = G * secret2print (f'p_curve = {p_curve} ' )print (f'a_curve = {a_curve} ' )print (f'P = {P} ' )
output.txt
plaintext 1 2 3 4 5 6 p = 1154543773027194978300531105544404721440832315984713424625039 g = 2 shared = 589382223336825905353017404337901190007770052877203421235378 p_curve = 4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000001 a_curve = 35220 P = (623096442003276996005526819582785620084071954736463701753970373963912716099078435477704571257942074621357 : 2384627087675194082373873481003992989604314757777638917742582544298077858048626428935086473569758082583040 : 1)
经典套娃。part1是个DLP,part2是个ECDLP。part1的p-1和p+1都不光滑,但是p足够小,直接cado
nfs就能跑出来。
part2的p_curve-1很光滑,但是曲线order并不令人满意。不过出题人告诉我flag长度只不过16
chars,所以姑且还是可以在subgroup上pohlig hellman一下。
中间那一步把secret lift到点G时,出题人实际上用的是-G,有点幽默。
exp
python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 from Crypto.Util.number import long_to_bytesfrom sage.all import * p_curve = 4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000001 a_curve = 35220 b_curve = 85127 secret = 3182763716837142378046258424310770114697574212011835 Z = GF(p_curve) E = EllipticCurve(Z, [a_curve,b_curve])try : G = E(3182763716837142378046258424310770114697574212011835 ,2312946128953497569445083537734048164871112582045360268346156095918010577593177039498521291057451954433727 ) P = E(623096442003276996005526819582785620084071954736463701753970373963912716099078435477704571257942074621357 ,2384627087675194082373873481003992989604314757777638917742582544298077858048626428935086473569758082583040 )except : pass print ("testing..." )print (E)print (G) n = E.order() factors = list (factor(n)) m = 1 moduli = [] remainders = []print (f"[+] Running Pohlig Hellman" )print (factors)for i, j in factors: if i < 10 **12 : continue mod = i**j print (mod) g2 = G*(mod) q2 = P*(mod) r = discrete_log(q2, g2, ord =G.order(), operation='+' ) kk = G.order()//modfor k in range (1000 ): tmp = long_to_bytes(k*kk+r) if b'TFC' in tmp: print (tmp) break
rotator cuffs
task
python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from sage.all import *from secrets import SECRET, x1, x2, y1, y2 sumyum = -142226769181911294109604985414279966698269380324397182385943224688881786967396493297107323123238846393606215646973028804858833605857511769169835160302020010947120438688346678912969985151307036771093126928042899151991372646137181873186360733201445140152322209451057973604096364822332301687504248777277418181289153882723092865473163310211285730079965167100462695990655758205214602292622245102893445811728006653275203674798325843446182682402905466862314043187136542260285271179956030761086907321077282094937573562503816663264662117783270594824413962461600402415572179393223815743833171899844403295401923754406401502029098878225426758204788 assert sumyum == 2 * x1 ** 2 - SECRET * y1 ** 2 + 2 * x2 ** 2 - SECRET * y2 ** 2 F = RealField(3456 ) x = vector(F, [x1, x2]) y = vector(F, [y1, y2])for _ in range (10000 ): theta = F.random_element(min =-5 * pi, max =5 * pi) R = matrix(F, [[cos(theta), -sin(theta)], [sin(theta), cos(theta)]]) x = R * x y = R * yprint ("resulting_x =" , x)print ("resulting_y =" , y)
output.txt
plaintext 1 2 resulting_x = (3.3634809129087361339072596725006530600959848462815297766832600914180365498172745779530909095267862889993244875375870115862675521807203899602656875152466204714275847395081849947663071267678766620524700684572851632968584152642766533856599351512856580709762480161587856072790441655306539706390277559619708164477066112096159734609814163507781608041425939822535707080207842507025990454423454350866271037975269822168384397403714076341093853588894719723841956801405249658560486108807190027518922407932998209533025998785987344569930974892824749931597842343369782141668038797305601028366704322107431479213165353278773002704707347001056980736352878716736155054293350509670339144379602697176068785416128203382284653052813910539052285224499161723972390574800570738938264516350981139157860135237512937090793549860152173756751719627025142858529263243314917653507237003568510016357713402278753999645732592631577726849749929789275649985363293274521704758513276997442425705172979362522303209937874019044195572717894784790824040985970678829869212168596332338e228, 4.3493076236586169242233212405270398931813271488805260703904730395387317512159124699671617536806847379014763743850012966440449858042327139796085868934120939346500622666309663813415016921760622643752056516232426324399548704613192843351795229042500735885925583510203795565452553753954474949980588780332651769544235511465216034600990329267883327087177217125655503845919331440817328958054102807738186874040636118222352351053320953917165679774298608790659071127811941909136888169274293065733698380573486079052876249484455409206182001827225690775874445171478338344209529207109172368590360722150559332665968826925103060717742483611155201852629766859356827518117986215929527812137774656124580645282319815982553388185475874607903050755710964732279490338614504903256117014312989278124177060468718045944298976827788272885547066724342578660563396148909159051946415261351324693896674313199869788279492452177771905587881622085592044441472137286330359635594402564357596784568377870545793505212074411425362120275312322293627143588322908897500139505746513232e228) resulting_y = (3.0086123485184949854819528432444522887263618452152977201477700454454717599185922285792607291484161348863603668674724666302028473336653202339259214779198337146709052083562504123644969759313504022148939497579033947489964578987257010705347661159352495880621564046451129149321751369899157697461990748527068553919767557375414807745137776378672423131583632676118768803623661016450513713378889178790819115525404124475586398119768281556573742250499881136366816528002891506377591473809774876327335425713426558761290418087432306668623923825516541279687269109753438014462223886767964900168026643719447209474190574704192551865457553267219179816090151816092471203713238427208397671093453024024773606469951052196613699816481289760243547361942029869165939022611782658000517871759272476768999453412473058498224382162775678590320117678687959374599497850317809926761224934950410879753727042047871292717229649696383856159211062622325024918849176324424823611459590717866478574927162324917352318674258311617781845396479605897293293787546058229588461669469113001e228, 4.1955438730064492244518395125687091233417321001179084616477593364143186962035096742717340249485256810878365124925979444527539802357032735868877910266504910589105346718553503670072791148806000734099122372428956062737130602189826489676949800396857262364104813055382317498461363421406914514918460816121876800728600531432610837129788010503804927836206596876591613685011706833895602299866191433190745884295362337967940063679204541643670409168084686978205876941245671248753306754892761206974604980311577415661960800437927228624982030061751022139301406066860249918396002252864930009083759551916555623475795108943840654272107400479044754688171126386094896825019962082090350188892677712358612478027143147182776057102433244569971150928964257290752485837202929975257858813456753394801152212850446322739077604336730800210171231609831225616780923301071587159265696870229784689201181607735865814975046649574472138172333744474559659785291954987787639082881571990180182337133038177924408020273887276582566592470019342076814034084107444178243083855840959209e228)
给的是个旋转矩阵,左乘10000次相当于还是对原向量逆时针旋转了theta弧度。两个向量各自的分量取平方和可以获得\(x_{1}^{2}+x_{2}^{2}\) 和\(y_{1}^{2}+y_{2}^{2}\) 的近似值,取最接近的整数即可获得准确值。
exp
python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 F = RealField(3456 ) x1 = 3.3634809129087361339072596725006530600959848462815297766832600914180365498172745779530909095267862889993244875375870115862675521807203899602656875152466204714275847395081849947663071267678766620524700684572851632968584152642766533856599351512856580709762480161587856072790441655306539706390277559619708164477066112096159734609814163507781608041425939822535707080207842507025990454423454350866271037975269822168384397403714076341093853588894719723841956801405249658560486108807190027518922407932998209533025998785987344569930974892824749931597842343369782141668038797305601028366704322107431479213165353278773002704707347001056980736352878716736155054293350509670339144379602697176068785416128203382284653052813910539052285224499161723972390574800570738938264516350981139157860135237512937090793549860152173756751719627025142858529263243314917653507237003568510016357713402278753999645732592631577726849749929789275649985363293274521704758513276997442425705172979362522303209937874019044195572717894784790824040985970678829869212168596332338e228 x2 = 4.3493076236586169242233212405270398931813271488805260703904730395387317512159124699671617536806847379014763743850012966440449858042327139796085868934120939346500622666309663813415016921760622643752056516232426324399548704613192843351795229042500735885925583510203795565452553753954474949980588780332651769544235511465216034600990329267883327087177217125655503845919331440817328958054102807738186874040636118222352351053320953917165679774298608790659071127811941909136888169274293065733698380573486079052876249484455409206182001827225690775874445171478338344209529207109172368590360722150559332665968826925103060717742483611155201852629766859356827518117986215929527812137774656124580645282319815982553388185475874607903050755710964732279490338614504903256117014312989278124177060468718045944298976827788272885547066724342578660563396148909159051946415261351324693896674313199869788279492452177771905587881622085592044441472137286330359635594402564357596784568377870545793505212074411425362120275312322293627143588322908897500139505746513232e228 y1 = 3.0086123485184949854819528432444522887263618452152977201477700454454717599185922285792607291484161348863603668674724666302028473336653202339259214779198337146709052083562504123644969759313504022148939497579033947489964578987257010705347661159352495880621564046451129149321751369899157697461990748527068553919767557375414807745137776378672423131583632676118768803623661016450513713378889178790819115525404124475586398119768281556573742250499881136366816528002891506377591473809774876327335425713426558761290418087432306668623923825516541279687269109753438014462223886767964900168026643719447209474190574704192551865457553267219179816090151816092471203713238427208397671093453024024773606469951052196613699816481289760243547361942029869165939022611782658000517871759272476768999453412473058498224382162775678590320117678687959374599497850317809926761224934950410879753727042047871292717229649696383856159211062622325024918849176324424823611459590717866478574927162324917352318674258311617781845396479605897293293787546058229588461669469113001e228 y2 = 4.1955438730064492244518395125687091233417321001179084616477593364143186962035096742717340249485256810878365124925979444527539802357032735868877910266504910589105346718553503670072791148806000734099122372428956062737130602189826489676949800396857262364104813055382317498461363421406914514918460816121876800728600531432610837129788010503804927836206596876591613685011706833895602299866191433190745884295362337967940063679204541643670409168084686978205876941245671248753306754892761206974604980311577415661960800437927228624982030061751022139301406066860249918396002252864930009083759551916555623475795108943840654272107400479044754688171126386094896825019962082090350188892677712358612478027143147182776057102433244569971150928964257290752485837202929975257858813456753394801152212850446322739077604336730800210171231609831225616780923301071587159265696870229784689201181607735865814975046649574472138172333744474559659785291954987787639082881571990180182337133038177924408020273887276582566592470019342076814034084107444178243083855840959209e228 x1 = F(x1) x2 = F(x2) y1 = F(y1) y2 = F(y2)print ((2 *x1**2 +2 *x2**2 ))print ((y1**2 +y2**2 ))""" """ t1 = Integer(6.0458961313432700746931348477825758192229020432715951204522236716438606488287830118571477216061475210062738469232910543583772789009092752627010833566899296726498585367653663884152832500606045796426785544863725558993639659014043831131766285384964991019625206454962406019843219392602518434638730182803996487844535438276226041548124895578905508260052851551549731588088096686178425943892262835046783953738438780109057031247559746813562239126044914178423658072272e457 ) t2 = Integer(2.6654336653979930072932080854217803878980327287812916202113733837281421458611769701044321441231223717460047958070788407898027091612528627848314033997938963634683650311201578046725621329886792733555154958650003761603106155621404806459549963777276803246893201517791757415848958560084349757549144848596659632445238472959648749998982354516391976477782686807957854536054937553191464787432683110564288464895393221593820017494097475356503877505295996914147435644564e457 ) fl = 142226769181911294109604985414279966698269380324397182385943224688881786967396493297107323123238846393606215646973028804858833605857511769169835160302020010947120438688346678912969985151307036771093126928042899151991372646137181873186360733201445140152322209451057973604096364822332301687504248777277418181289153882723092865473163310211285730079965167100462695990655758205214602292622245102893445811728006653275203674798325843446182682402905466862314043187136542260285271179956030761086907321077282094937573562503816663264662117783270594824413962461600402415572179393223815743833171899844403295401923754406401502029098878225426758204788 (t1+fl)/t2
我猜Grobner
basis应该也可解这题,不过赛中看穿数学关系之后手提更快,就没试验另一条路XD
Misc
mcbsh
没给附件,试验一阵子之后(嗯,输入了所有可打印字符才知道只允许输入01#$'()<\
,不给附件是真有点幽默了)可以发现就是个bashFuck ,一把梭了。
Discord Shenanigans V4
同2024 imaginaryCTF
sussy ,不再赘述。