【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

admin 2025年4月23日16:17:11评论2 views字数 11064阅读36分52秒阅读模式
接上文,
【WP】第四届SQCTF网络安全及信息对抗大赛WEB方向题目全解
继续整理Crypto方向的WP

小白兔白又白

Base91解密

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

Base64->Base36->hex转str

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

Rabbit解密,根据提示b站哈哈大笑猜测密钥是233

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

得到SQCTF{LOOK_my_eyes_baby_why?}

春风得意马蹄疾

社会主义价值观解密

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

再解几次

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

解出SQCTF{E2jacnicamcm_cnanamw_kwkma}

别阴阳我了行吗?

阴阳怪气解码

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

得到SQCTF{xm!tql!xm!}

base?

赛博厨子base85一把梭

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

得到SQCTF{b7b48685-03ef-4e24-b25b-212fac2ec2d3}

简单RSA

根据hint提示知道pq接近分解n

考虑费马分解,然后根据pq求d解c即可

import mathimport gmpy2from Crypto.Util.number import long_to_bytesdef fermat_attack(n):    a = math.isqrt(n)    b2 = a*a - n    b = math.isqrt(n)    count = 0    while b*b != b2:        a = a + 1        b2 = a*a - n        b = math.isqrt(b2)        count += 1    p = a+b    q = a-b    assert n == p*q    return p,qn = 7349515423675898192891607474991784569723846586810596813062667159281369435049497248016288479718926482987176535358013000103964873016387433732111229186113030853959182765814488023742823409594668552670824635376457830121144679902605863066189568406517231831010468189513762519884223049871926129263923438273811831862385651970651114186155355541279883465278218024789539073180081039429284499039378226284356716583185727984517316172565250133829358312221440508031140028515954553016396884149904097959425582366305748700291610280675014390376786701270107136492645593662763444032174543205008326706371954830419775515459878227148997362533e = 65537c = 3514741378432598036735573845050830323348005144476193092687936757918568216312321624978086999079287619464038817665467748860146219342413630364856274551175367026504110956407511224659095481178589587424024682256076598582558926372354316897644421756280217349588811321954271963531507455604340199167652015645135632177429144241732132275792156772401511326430069756948298403519842679923368990952555264034164975975945747016304948179325381238465171723427043140473565038827474908821764094888942553863124323750256556241722284055414264534546088842593349401380142164927188943519698141315554347020239856047842258840826831077835604327616p,q=fermat_attack(n)phi_n = (p-1)*(q-1)d = gmpy2.invert(e,phi_n)m = pow(c,d,n)print(long_to_bytes(m))
【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解
【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

得到SQCTF{be7e48547356cdf16649fd29e0ff9e1f}

ezCRT

给了多组nc,很显然低加密指数广播攻击

import gmpy2from functools import reducefrom Crypto.Util.number import bytes_to_long,long_to_bytesdef CRT(c,n):    sum = 0    N = reduce(lambda x,y:x*y,n)    for n_i, c_i in zip(n,c):        N_i = N // n_i        t_i = gmpy2.invert(N_i,n_i)        sum += c_i * N_i * t_i    return sum % Nn1 = 64461804435635694137780580883118542458520881333933248063286193178334411181758377012632600557019239684067421606269023383862049857550780830156513420820443580638506617741673175086647389161551833417527588094693084581758440289107240400738205844622196685129086909714662542181360063597475940496590936680150076590681n2 = 82768789263909988537493084725526319850211158112420157512492827240222158241002610490646583583091495111448413291338835784006756008201212610248425150436824240621547620572212344588627328430747049461146136035734611452915034170904765831638240799554640849909134152967494793539689224548564534973311777387005920878063n3 = 62107516550209183407698382807475681623862830395922060833332922340752315402552281961072427749999457737344017533524380473311833617485959469046445929625955655230750858204360677947120339189429659414555499604814322940573452873813507553588603977672509236539848025701635308206374413195614345288662257135378383463093c1 = 36267594227441244281312954686325715871875404435399039074741857061024358177876627893305437762333495044347666207430322392503053852558456027453124214782206724238951893678824112331246153437506819845173663625582632466682383580089960799423682343826068770924526488621412822617259665379521455218674231901913722061165c2 = 58105410211168858609707092876511568173640581816063761351545759586783802705542032125833354590550711377984529089994947048147499585647292048511175211483648376727998630887222885452118374649632155848228993361372903492029928954631998537219237912475667973649377775950834299314740179575844464625807524391212456813023c3 = 23948847023225161143620077929515892579240630411168735502944208192562325057681298085309091829312434095887230099608144726600918783450914411367305316475869605715020490101138282409809732960150785462082666279677485259918003470544763830384394786746843510460147027017747048708688901880287245378978587825576371865614n = [n1, n2, n3]c = [c1, c2, c3]x = CRT(c,n)# e一般都不大可以尝试爆破for e in range(1,10):    m, r = gmpy2.iroot(x,e)    if r == True:        print(long_to_bytes(m))
【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解
【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

得到SQCTF{CRT_Unl0cks_RSA_Eff1c13ncy}

失落矿洞中的密码

找到了原题,sage暴力破解secretKey

https://ctf-wiki.org/crypto/asymmetric/discrete-log/ecc/

a = 1234577b = 3213242n = 7654319E = EllipticCurve(GF(n), [0, 0, 0, a, b])base = E([5234568, 2287747])pub = E([2366653, 1424308])c1 = E([5081741, 6744615])c2 = E([610619, 6218])X = basefor i in range(1, n):    if X == pub:        secret = i        print "[+] secret:", i        break    else:        X = X + base        print im = c2 - (c1 * secret)print "[+] x:", m[0]print "[+] y:", m[1]print "[+] x+y:", m[0] + m[1]
【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

得到SQCTF{5720914}

玩的挺变态啊清茶哥

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

很明显猪圈密码

解码得到jijibaotonghualizuoyingxiong

提交SQCTF{jijibaotonghualizuoyingxiong}即可

密室逃脱的终极挑战

IDA打开直接看到flag

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

丢三落四的小I

已知n、dp、e的rsa板子题,直接秒

import gmpy2from Crypto.Util.number import long_to_bytese = 65537n = 15124759435262214519214613181859115868729356369274819299240157375966724674496904855757710168853212365134058977781083245051947523020090726851248565503324715984500225724227315777864292625995636236219359256979887906731659848125792269869019299002807101443623257106289957747665586226912446158316961637444556237354422346621287535139897525295200592525427472329815100310702255593134984040293233780616515067333512830391860868933632383433431739823740865023004008736555299772442805617275890761325372253913686933294732259451820332316315205537055439515569011020072762809613676347686279082728000419370190242778504490370698336750029dp = 1489209342944820124277807386023133257342259912189247976569642906341314682381245025918040456151960704964362424182449567071683886673550031774367531511627163525245627333820636131483140111126703748875380337657189727259902108519674360217456431712478937900720899137512461928967490562092139439552174099755422092113c = 4689152436960029165116898717604398652474344043493441445967744982389466335259787751381227392896954851765729985316050465252764336561481633355946302884245320441956409091576747510870991924820104833541438795794034004988760446988557417649875106251230110075290880741654335743932601800868983384563972124570013568709773861592975182534005364811768321753047156781579887144279837859232399305581891089040687565462656879173423137388006332763262703723086583056877677285692440970845974310740659178040501642559021104100335838038633269766591727907750043159766170187942739834524072423767132738563238283795671395912593557918090529376173for x in range(1, e):    if(e*dp%x==1):        p=(e*dp-1)//x+1        if(n%p!=0):            continue        q=n//p        phi=(p-1)*(q-1)        d=gmpy2.invert(e, phi)        m=pow(c, d, n)        print(long_to_bytes(m))
【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

得到SQCTF{7b909221-c8ff-f391-0c86-d3a9ca8491d1}

字母的轮舞与维吉尼亚的交响曲

暴力破解维吉尼亚key是flag

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

得到VTFWI{brx_duh_zlq!}继续凯撒解密得到SQCTF{you_are_win!}

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

ez_SCA

很明显的侧信道攻击

找到原题https://blog.csdn.net/xuruihan177/article/details/139507987

import numpy as npfrom scipy.spatial.distance import euclidean# 加载能量轨迹文件traces = np.load('energy_traces_with_flag.npy')# 加载模板轨迹文件template_trace_0 = np.load('template_trace_0.npy')template_trace_1 = np.load('template_trace_1.npy')# 恢复私钥(明文 flag 的二进制形式)def recover_private_key(traces, template_trace_0, template_trace_1):    private_key = []    for trace in traces:        # 计算轨迹与两个模板轨迹的欧几里得距离        dist_0 = euclidean(trace, template_trace_0)        dist_1 = euclidean(trace, template_trace_1)        # 选择距离较小的模板轨迹对应的比特位        private_key.append(0 if dist_0 < dist_1 else 1)    return private_key# 将恢复的二进制形式转换为明文 flagdef bits_to_text(bits):    chars = [bits[i:i+8for i in range(0len(bits), 8)]    text = ''.join([chr(int(char, 2)) for char in chars])    return text# 恢复私钥并转换为明文private_key = recover_private_key(traces, template_trace_0, template_trace_1)recovered_bits_str = ''.join(map(str, private_key))recovered_plaintext = bits_to_text(recovered_bits_str)print(f"Recovered plaintext: {recovered_plaintext}")
【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

得到SQCTF{easy_funny_and_not_hard_sca_hhh_just_kingdding}

你的天赋是什么

很明显摩斯密码

【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

得到SQCTF{YOU-HAVE-TALENT}

Common Modulus

同一个n不同e的rsa板子题,共模攻击

import gmpy2from Crypto.Util.number import long_to_bytesn= 13650503560233612352420237787159267432351878281073422449253560365809461612884248041710373755322100953953257608601227381211434513766352420535096028618735289379355710140356003114010103377509526452574385251495847301426845768427018504464757671958803807138699056193259160806476941875860254288376872925837127208612702688503022494109785623082365323949385021488106289708499091818714253710552213982060745736652306892896670424179736886691685639988637188591805479432332714690818805432648223229601082431517091667297328748597580733946557364100555781113940729296951594110258088501146224322799560159763097710814171619948719257894889c1= 3366500968116867439746769272799247895217647639427183907930755074259056811685671593722389247697636905214269760325119955242254171223875159785479900114989812511815466122321484289407596620307636198001794029251197349257235827433633936216505458557830334779187112907940003978773672225479445837897135907447625387990203145231671233038707457396631770623123809080945314083730185110252441203674945146889165953135351824739866177205127986576305492490242804571570833778440870959816207461376598067538653432472043116027057204385251674574207749241503571444801505084599753550983430739025050926400228758055440679102902069032768081393253c2= 7412517103990148893766077090616798338451607394614015195336719617426935439456886251056015216979658274633552687461145491779122378237012106236527924733047395907133190110919550491029113699835260675922948775568027483123730185809123757000207476650934095553899548181163223066438602627597179560789761507989925938512977319770704123979102211869834390476278761480516444396187746843654541476645830961891622999425268855097938496239480682176640906218645450399785130931214581370821403077312842724336393674718200919934701268397883415347122906912693921254353511118129903752832950063164459159991128903683711317348665571285175839274346e1= 4217054819e2= 2800068527_,s1, s2 = gmpy2.gcdext(e1, e2)m = pow(c1, s1, n) * pow(c2, s2, n) % nprint(long_to_bytes(m))
【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解
【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

得到SQCTF{06774dcf-b9d1-3c2d-8917-7d2d86b6721c}

《1789年的密文》

提示很明显了,托马斯·杰弗逊转轮密码

找到板子:https://blog.csdn.net/2302_80322812/article/details/136093897

txt = '''1: <QWXZRJYVKSLPDTMACFNOGIEBHU < 2: <BXZPMTQOIRVHKLSAFUDGJYCEWN < 3: <LKJHGFDSAQZWXECRVBYTNUIMOP < 4: <POIUYTREWQASDFGHJKLMNBVCXZ < 5: <ZXCVBNMASDFGHJKLPOIUYTREWQ < 6: <MNHBGVCFXDRZESWAQPLOKMIJUY < 7: <YUJIKMOLPQAWSZEXRDCFVGBHNM < 8: <EDCRFVTGBYHNUJMIKOLPQAZWSX < 9: <RFVGYBHNUJMIKOLPQAZWSXEDCT <10: <TGBYHNUJMIKOLPQAZWSXEDCRFV <11: <WSXEDCRFVTGBYHNUJMIKOLPQAZ <12: <AZQWSXEDCRFVTGBYHNUJMIKOLP <13: <VFRCDXESZWAQPLOKMIJNUHGBTG <14: < KOLPQAZWSXEDCRFVTGBYHNUJM <'''x = []lines = txt.strip().split('n')for line in lines:    x.append(line[4:31].strip().replace('<'''))print(x)# 根据密文对应的密钥调整转表key = '4,2,11,8,9,12,3,6,10,14,1,5,7,13'key = key.split(',')  # 转化为列表型key = [int(i) for i in key]  # 转化为数值型print(key)flag = []mi = 'UNEHJPBIUOMAVZ'for m, n in zip(key, mi):    flag.append(x[m - 1][x[m - 1].index(n):] + x[m - 1][:x[m - 1].index(n)])print(flag)for i in range(26):    for j in flag:        print(j[i],end='')    print()
【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解
【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

提交SQCTF{maketysecgreat}即可

原文始发于微信公众号(智佳网络安全):【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月23日16:17:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【WP】第四届SQCTF网络安全及信息对抗大赛Crypto方向题目全解https://cn-sec.com/archives/3967120.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息