0x01 变异的凯撒密码
-
-
脚本如下:
m = 'afZ_r9VYfScOeO_UL^RWUc' s = '' for i in range(len(m)): s += chr(ord(m[i])+i+5) print(s)
-
flag{Caesar_variation}
0x02 篱笆树的影子
-
-
由题目篱笆 为 fence 猜测为栅栏密码加密
-
法1:
有题目得,解为flag{}的形式,所以felhaagv解密为flag的形式,所以可以看出该栅栏密码为两行
f l a g
e h a v
所以写出剩下的,解出密码为
flag{wethinkwehavetheflag} -
或者使用在线网站进行解密
0x03 RSA
-
题目:
-
脚本如下:
p = 473398607161 q = 4511491 e = 17 pini = (p-1) *(q - 1) d = invert(e,pini) print(d)
-
flag{125631357777427553}
0x03 丢失的md5
-
首先打开之后是一个py文件,本地跑一下,出错
import hashlib for i in range(32,127): for j in range(32,127): for k in range(32,127): m=hashlib.md5() m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM') des=m.hexdigest() if 'e9032' in des and 'da' in des and '911513' in des: print des
-
首先补全print() 的括号
然后报错见下图
-
-
报错是因为是在进行md5哈希运算前,需要对数据进行编码
-
正确代码:
import hashlib for i in range(32,127): for j in range(32,127): for k in range(32,127): m=hashlib.md5() m.update('TASC'.encode('utf-8')+chr(i).encode('utf-8')+'O3RJMV'.encode('utf-8')+chr(j).encode('utf-8')+'WDJKX'.encode('utf-8')+chr(k).encode('utf-8')+'ZM'.encode('utf-8')) des=m.hexdigest() if 'e9032' in des and 'da' in des and '911513' in des: print (des)
0x04 rsarsa
-
题目
Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm. p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483 q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407 e = 65537 c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034 Use RSA to find the secret message
-
脚本如下:
import gmpy2 p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483 q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407 e = 65537 c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034 n = p*q pini = (p-1) * (q-1) d = gmpy2.invert(e,pini) m = gmpy2.powmod(c,d,n) print(m) print(hex(m)) print(bytes.fromhex(hex(m)[2:]))
0x05 Windows 系统密码
-
题目:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56:::
-
windows 系统密码 都是以md5的形式储存的
-
所以进行md5暴力破解
-
得到flag
0x06 中文电码
-
题目
606046152623600817831216121621196386
-
感觉没有提示
-
看大佬的wp 发现是中文电码
-
在线网站破解得到flag
-
在线网站: https://dianma.bmcx.com/
0x07 RSA1
-
题目
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229 q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469 dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929 dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041 c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
-
-
因此脚本如下:
import gmpy2 p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229 q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469 dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929 dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041 c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852 I = gmpy2.invert(q,p) m1 = pow(c,dp,p) m2 = pow(c,dq,q) m = (((m1-m2)*I)%p)*q+m2 print(m) #10进制明文 print(hex(m)[2:]) #16进制明文 print(bytes.fromhex(hex(m)[2:])) #16进制转文本
-
0x08 RSA3
-
题目
c1=22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361 n=22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801 e1=11187289 c2=18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397 e2=9647291
-
脚本如下:
import gmpy2 import libnum def exgcd(a, b): if b==0: return 1, 0 x, y = exgcd(b, a%b) return y, x-a//b*y e1 = 2767 e2 = 3659 n = 21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111 c1 = 20152490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599 c2 = 11298697323140988812057735324285908480504721454145796535014418738959035245600679947297874517818928181509081545027056523790022598233918011261011973196386395689371526774785582326121959186195586069851592467637819366624044133661016373360885158956955263645614345881350494012328275215821306955212788282617812686548883151066866149060363482958708364726982908798340182288702101023393839781427386537230459436512613047311585875068008210818996941460156589314135010438362447522428206884944952639826677247819066812706835773107059567082822312300721049827013660418610265189288840247186598145741724084351633508492707755206886202876227 x,y = exgcd(e1,e2) m = pow(c1,x,n)*pow(c2,y,n) % n print(m) print(hex(m)) print(bytes.fromhex(hex(m)[2:]))
0x09 RSA2
-
题目
e = 65537 n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113 dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657 c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
-
-
代码如下:
import gmpy2 e = 65537 n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113 dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657 c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751 for i in range(1,e): if( (e*dp)%i == 1): p = (e * dp - 1) // i + 1 if(n % p != 0): continue q = n // p phin = (q-1) * (p-1) d = gmpy2.invert(e,phin) m = gmpy2.powmod(c,d,n) print(m) print(hex(m)[2:]) print(bytes.fromhex(hex(m)[2:]))
0x0A RSA
-
题目:(属于已知公钥文件
-
-
-----BEGIN PUBLIC KEY----- MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+ /AvKr1rzQczdAgMBAAE= -----END PUBLIC KEY-----
-
rsa 的公钥 和 传输的 文件 flag.enc
-
-
脚本如下:
import gmpy2 import rsa e=65537 n=86934482296048119190666062003494800588905656017203025617216654058378322103517 p=285960468890451637935629440372639283459 q=304008741604601924494328155975272418463 phin = (p-1) * (q-1) d=gmpy2.invert(e, phin) key=rsa.PrivateKey(n,e,int(d),p,q) with open("flag.enc","rb") as f: f=f.read() print(rsa.decrypt(f,key))
0x0B 异性相吸
-
解释一下,yxx这道题实际上和异性相吸时一样的解题思路,因为它——yxx可能是少打了x(个人猜测),因为异性相吸的首字母就是yxxx,很相似。
而题目就是南邮ctf的异性相吸,最近做的这种题的可能有印象,就是给了一个明文.txt和一个密文.txt,给了提示的题,而这道yxx没给提示
-
-
-
1.xor
2.hex2binary
3.len(bin(miwen))==len(bin(mingwen)) -
写脚本对其进行逐bit 异或
a = '0000101000000011000101110000001001010110000000010001010100010001000010100001010000001110000010100001111000110000000011100000101000011110001100000000111000001010000111100011000000010100000011000001100100001101000111110001000000001110000001100000001100011000' b = '0110110001101111011101100110010101101100011011110111011001100101011011000110111101110110011001010110110001101111011101100110010101101100011011110111011001100101011011000110111101110110011001010110110001101111011101100110010101101100011011110111011001100101' for i in range(len(a)): if(a[i] == b[i]): print '0' else: print '1'
0x0C 还原大师
-
题目:
-
可以看到 原文中三个 问号, 以生成的md5中的 E903为参照 进行爆破
-
# -*- coding: utf-8 -*- #!/usr/bin/env python import hashlib #print hashlib.md5(s).hexdigest().upper() k = 'TASC?O3RJMV?WDJKX?ZM' #要还原的明文 for i in range(26): temp1 = k.replace('?',str(chr(65+i)),1) for j in range(26): temp2 = temp1.replace('?',chr(65+j),1) for n in range(26): temp3 = temp2.replace('?',chr(65+n),1) s = hashlib.md5(temp3.encode('utf8')).hexdigest().upper()#注意大小写 if s[:4] == 'E903': #检查元素 print (s) #输出密文
-
flag{E9032994DABAC08080091151380478A2}
0x0D rsaroll
-
题目:
{920139713,19} 704796792 752211152 274704164 18414022 368270835 483295235 263072905 459788476 483295235 459788476 663551792 475206804 459788476 428313374 475206804 459788476 425392137 704796792 458265677 341524652 483295235 534149509 425392137 428313374 425392137 341524652 458265677 263072905 483295235 828509797 341524652 425392137 475206804 428313374 483295235 475206804 459788476 306220148
-
发现对每个 c 对应的原文m 对其进行ascii 编码 为字符
-
因此脚本如下:
import gmpy2 n = 920139713 e = 19 p = 18443 q = 49891 d = gmpy2.invert(e,(p-1)*(q-1)) c = [704796792, 752211152, 274704164, 18414022, 368270835, 483295235, 263072905, 459788476, 483295235, 459788476, 663551792, 475206804, 459788476, 428313374, 475206804, 459788476, 425392137, 704796792, 458265677, 341524652, 483295235, 534149509, 425392137, 428313374, 425392137, 341524652, 458265677, 263072905, 483295235, 828509797, 341524652, 425392137, 475206804, 428313374, 483295235, 475206804, 459788476, 306220148] y = ''.join(chr(pow(i,d,n)) for i in c ) print(y)
8476,
663551792,
475206804,
459788476,
428313374,
475206804,
459788476,
425392137,
704796792,
458265677,
341524652,
483295235,
534149509,
425392137,
428313374,
425392137,
341524652,
458265677,
263072905,
483295235,
828509797,
341524652,
425392137,
475206804,
428313374,
483295235,
475206804,
459788476,
306220148]
y = ‘’.join(chr(pow(i,d,n)) for i in c )
print(y)