ctfshow-crypto
本文最后更新于 176 天前,其中的信息可能已经有所发展或是发生改变。

签到

把题目里的提示倒序一下就可以:flag{ctfshow}

crypto2

发现txt文件里是一串加密字符,去搜索一下发现是jsfuck之类的编码,用随波逐流字密1中的jsfuck解码梭一下就行:flag{3e858ccd79287cfe8509f15a71b4c45d}

crypto-3

同上题,搜索后发现是aaencode颜文字解密,同样在随波逐流字密1中找到,然后解密:flag{js_da_fa_hao}

我把网站贴一下,遇到没见过的可以对照一下:CTF密码学——常见编解码及加解密总结_ctf解码….. .?.?! .?!.?-CSDN博客

crypto-4

简单了解一下rsa算法就能解决,题目给出p,q,e求e的逆元d。代码如下:

from Crypto.Util.number import *
from gmpy2 import *
p=447685307
q=2037
e=17
n = p*q
phi = (p-1)*(q-1)
d = inverse(e,phi)
print(d)

flag{53616899001}

crypto-5

同上,多了一步求解明文m,代码如下:

from Crypto.Util.number import *
from gmpy2 import *
p=447685307
q=2037
e=17
c=704796792
phi = (p-1)*(q-1)
n = p*q
d = inverse(e,phi)
m = pow(c,d,n)
print(m)

flag{904332399012}

crypto-6

666学到了,看密文头猜加密方式6666666,我以为base64呢服了QWQ

密文开头是U2FsdGVkX,是rabbit密文的开头,当然也有可能是AES,DES加密,反正找个解密网站挨个试一下就好了,密钥是Rabbit

flag{a8db1d82db78ed452ba0882fb9554fc9}

在线网站:AES加密,DES加密,RC4加密,Rabbit加密,TripleDes加密 – 站长工具

crypto-7

这个加密方式碰到过,就是ook加密,找一个解密网站解密即可:

flag{b615c4b79a1aede83b9ae67104ff4eb5}

网站:Brainfuck/Text/Ook! obfuscator – deobfuscator. Decode and encode online.

crypto-8

这个也是碰到过,brainfuck加密,题目的提示是口出F,意指fuck,网站同上一个ook就行

flag{99754106633f94d350db34d548d6091a}

crypto-9

下载附件,发现有加密,用ziperello爆破出密码4132,得到一个乱码文件,联系文件夹的名称是serpent,是蟒蛇加密还是啥来着,找在线解密网站,这里推荐这个网站

Serpent Encryption – Easily encrypt or decrypt strings or files

其余的说实话我不咋会用也没解出来这个题,最后用这个解出来的,方式选择打开文件,然后密钥试一下之前爆破出来的密码4132即可解密

flag{c960a0f3bf871d7da2a8413ae78f7b5f}

crypto-10

额,拿到密文之后去找一下发现是Quoted-Printable编码,找个在线网站解密即可

flag{用你那火热的嘴唇让我在午夜里无尽的销魂}

网站:Quoted-Printable 编码/解码 – 锤子在线工具

!!!!!!非预期来了哈哈哈哈哈哈

给ai他会直接翻译出来(惊恐!)

把等号去掉用随波逐流baes64混合编码也能梭出来,有师傅说=换%然后url编码也能解

crypto-11

这题纯看的wp算是,没想过是MP5解密,网站:MD5免费在线解密破解_MD5在线加密-SOMD5

flag{ctf}

crypto-0

我也不是到为什么第0题在这,但是看到密文gmbh{ifmmp_dug}我首先想到的是quipqiup解码来着,但是试了一下发现不对,选择随波逐流一把梭,发现也没结果,但是这题很明显就是gmbh对应flag,突然想起来了变异凯撒,用随波逐流字密1梭一下就出来了

flag{hello_ctf}

crypto-12

试了一下quipqiup和凯撒都不对,直接随波逐流一把梭找到是Atbash解码

flag{Atbase_code_from_ctfshow}

crypto-13

额,base嵌套啊原来是,我以为base转文件呢QWQ

脚本如下:

import string
import base64
with open('D:\\ctfshow-crypto\\base家族-crypto13\\base家族\\base.txt') as f:
text = f.read()
while(1):
try:
text = base64.b64decode(text).decode()
except Exception as e:
try:
text = base64.b32decode(text).decode()
except Exception as e:
try:
text = base64.b16decode(text).decode()
except Exception as e:
break
print(text)

flag{b4Se_Fami1y_Is_FUn}

但是不知道怎么看出来的是base64和base32嵌套的,我怎么看都是base32啊QWQ

脚本是借鉴的,大致就是不断用base64和base32解码,直到两种都解不出来为止

crypto-14

题目是二进制转十六进制转字符然后base64解码

主要难在base64的解码上,有偏移量,对于一般的flag{xxxxxx}他的base64编码后的开头应该为Zmxh,对于本题只要看前一个或两个字母对应的偏移量就可以了

# 修改此处的 s
s = '3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG'
flag_exp = 'Zmxh' # flag{xxxx...} 开头的字符串的 base64 编码一定是 Zmxh 开头


import base64

base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
def base64_offset(text):
'''
计算 base64 表的偏移量
'''
global base64_table
return base64_table.index(text)


def main():
global base64_table

# 计算偏移量
diff = base64_offset(flag_exp[0]) - base64_offset(s[0])
index = []
for one in s:
index.append(base64_offset(one) + diff)

text = ''
for i in index:
text += base64_table[i]
if len(text)%4!=0:
text = text + "=" * (4-(len(text)%4))
print(f'base64 解码结果:{text}')
print(f'明文:{base64.b64decode(text).decode()}')


if __name__ == '__main__':
main()

对于flag开头这个脚本直接梭就可以,如果是其他开头可以手动找到偏移量之后用下面这个脚本

import base64

# 输入的混淆 Base64 字符串
str1 = "3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG"

# 自定义 Base64 字符表(题目使用的编码表)
string1 = "efghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcd"

# 标准 Base64 字符表
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

# 构建映射:将 string1 中的每个字符映射到 string2 对应位置
str2 = ""
for char in str1:
if char in string1:
idx = string1.index(char)
str2 += string2[idx]
else:
# 如果遇到 '=' 或其他字符(虽然这里没有),保留原样
str2 += char

# 补齐 Base64 padding(长度必须是 4 的倍数)
if len(str2) % 4 != 0:
str2 += "=" * (4 - (len(str2) % 4))

# 输出还原后的标准 Base64 字符串
print("还原后的 Base64:", str2)

# Base64 解码并输出 flag
flag = base64.b64decode(str2).decode('utf-8')
print("Flag:", flag)

flag{看我长不长?}

萌新_密码5

明文发现是当铺密码,直接去随波逐流字密3解码即可。

原理是通过汉字突出的笔画来计数,比如夫是7,然后十进制转字符

flag{ctfshow}

贝斯多少呢

原文是8nCDq36gzGn8hf4M2HJUsn4aYcYRBSJwj4aE0hbgpzHb4aHcH1zzC9C3IL

简单进行分段的话,我们看到8n,8h,4a,4a,4a是比较明显的开头

试一下8nCDq36gzGn 8hf4M2HJUsn 4aYcYRBSJwj 4aE0hbgpzHb 4aHcH1zzC9C 3IL

扔到随波逐流梭一下发现是base62转ascll

flag{6a5eb2_i5_u5ua11y_u5ed_f0r_5h0rt_ur1}

666没招了

find the table

666666更是阴的没边,这玩意为什么不放在misc,比宝可梦图腾都逆天

提示是审查元素,打开网页管理员模式,ctrl+shift+c选中审查元素这一段文字,能找到一段数字

再根据提示的元素去化学元素周期表对应的找

flag{doyoulikesnow}

babyrsa

额终于是真baby了

from Crypto.Util.number import *
from gmpy2 import*
e = 65537
p = 104046835712664064779194734974271185635538927889880611929931939711001301561682270177931622974642789920918902563361293345434055764293612446888383912807143394009019803471816448923969637980671221111117965227402429634935481868701166522350570364727873283332371986860194245739423508566783663380619142431820861051179
q = 140171048074107988605773731671018901813928130582422889797732071529733091703843710859282267763783461738242958098610949120354497987945911021170842457552182880133642711307227072133812253341129830416158450499258216967879857581565380890788395068130033931180395926482431150295880926480086317733457392573931410220501
c = 4772758911204771028049020670778336799568778930072841084057809867608022732611295305096052430641881550781141776498904005589873830973301898523644744951545345404578466176725030290421649344936952480254902939417215148205735730754808467351639943474816280980230447097444682489223054499524197909719857300597157406075069204315022703894466226179507627070835428226086509767746759353822302809385047763292891543697277097068406512924796409393289982738071019047393972959228919115821862868057003145401072581115989680686073663259771587445250687060240991265143919857962047718344017741878925867800431556311785625469001771370852474292194
phi = (p-1)*(q-1)
d = invert(e,phi)
m = pow(c,d,p*q)
print(long_to_bytes(m))

flag{b4by_R5A}

easyrsa1

比上一题多一个去factordb.com分解n的步骤,其余同上

from Crypto.Util.number import *
from gmpy2 import*
e = 65537
n = 1455925529734358105461406532259911790807347616464991065301847
c = 69380371057914246192606760686152233225659503366319332065009
p = 1201147059438530786835365194567
q = 1212112637077862917192191913841
phi = (p-1)*(q-1)
d = invert(e,phi)
m = pow(c,d,n)
print(long_to_bytes(m))

flag{fact0r_sma11_N}

easyrsa2

n1,n2共用素数q

from Crypto.Util.number import *
from gmpy2 import*
e = 65537
n1 = 23686563925537577753047229040754282953352221724154495390687358877775380147605152455537988563490716943872517593212858326146811511103311865753018329109314623702207073882884251372553225986112006827111351501044972239272200616871716325265416115038890805114829315111950319183189591283821793237999044427887934536835813526748759612963103377803089900662509399569819785571492828112437312659229879806168758843603248823629821851053775458651933952183988482163950039248487270453888288427540305542824179951734412044985364866532124803746008139763081886781361488304666575456680411806505094963425401175510416864929601220556158569443747
c1 = 1627484142237897613944607828268981193911417408064824540711945192035649088104133038147400224070588410335190662682231189997580084680424209495303078061205122848904648319219646588720994019249279863462981015329483724747823991513714172478886306703290044871781158393304147301058706003793357846922086994952763485999282741595204008663847963539422096343391464527068599046946279309037212859931303335507455146001390326550668531665493245293839009832468668390820282664984066399051403227990068032226382222173478078505888238749583237980643698405005689247922901342204142833875409505180847943212126302482358445768662608278731750064815

e = 65537
n2 = 22257605320525584078180889073523223973924192984353847137164605186956629675938929585386392327672065524338176402496414014083816446508860530887742583338880317478862512306633061601510404960095143941320847160562050524072860211772522478494742213643890027443992183362678970426046765630946644339093149139143388752794932806956589884503569175226850419271095336798456238899009883100793515744579945854481430194879360765346236418019384644095257242811629393164402498261066077339304875212250897918420427814000142751282805980632089867108525335488018940091698609890995252413007073725850396076272027183422297684667565712022199054289711
c2 = 2742600695441836559469553702831098375948641915409106976157840377978123912007398753623461112659796209918866985480471911393362797753624479537646802510420415039461832118018849030580675249817576926858363541683135777239322002741820145944286109172066259843766755795255913189902403644721138554935991439893850589677849639263080528599197595705927535430942463184891689410078059090474682694886420022230657661157993875931600932763824618773420077273617106297660195179922018875399174346863404710420166497017196424586116535915712965147141775026549870636328195690774259990189286665844641289108474834973710730426105047318959307995062

q = gcd(n1,n2)
p = n1//q
phi = (p-1)*(q-1)
d = invert(e,phi)
m = pow(c1,d,n1)
print(long_to_bytes(m))

本题也可以选择直接去在线网站分解n来做

easyrsa3

停之停之,怎么第三题就共模攻击了,今天就到这吧,等我大成了再做4

from Crypto.Util.number import *
from gmpy2 import *
e1 = 797
n = 15944475431088053285580229796309956066521520107276817969079550919586650535459242543036143360865780730044733026945488511390818947440767542658956272380389388112372084760689777141392370253850735307578445988289714647332867935525010482197724228457592150184979819463711753058569520651205113690397003146105972408452854948512223702957303406577348717348753106868356995616116867724764276234391678899662774272419841876652126127684683752880568407605083606688884120054963974930757275913447908185712204577194274834368323239143008887554264746068337709465319106886618643849961551092377843184067217615903229068010117272834602469293571
c1 = 11157593264920825445770016357141996124368529899750745256684450189070288181107423044846165593218013465053839661401595417236657920874113839974471883493099846397002721270590059414981101686668721548330630468951353910564696445509556956955232059386625725883038103399028010566732074011325543650672982884236951904410141077728929261477083689095161596979213961494716637502980358298944316636829309169794324394742285175377601826473276006795072518510850734941703194417926566446980262512429590253643561098275852970461913026108090608491507300365391639081555316166526932233787566053827355349022396563769697278239577184503627244170930

e2 = 521
c2 = 6699274351853330023117840396450375948797682409595670560999898826038378040157859939888021861338431350172193961054314487476965030228381372659733197551597730394275360811462401853988404006922710039053586471244376282019487691307865741621991977539073601368892834227191286663809236586729196876277005838495318639365575638989137572792843310915220039476722684554553337116930323671829220528562573169295901496437858327730504992799753724465760161805820723578087668737581704682158991028502143744445435775458296907671407184921683317371216729214056381292474141668027801600327187443375858394577015394108813273774641427184411887546849

_, s1, s2 = gcdext(e1, e2)

m = powmod(c1, s1, n)*powmod(c2, s2, n) % n
print(long_to_bytes(m))

原理暂时没看呢,可以用随波逐流梭一下能梭出来flag

flag{sh4r3_N}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇