一键解码工具:随波逐流(下载地址http://www.1o1o.xyz/ctfsoft.html)
单表替换:http://quipqiup.com/
信息化时代的步伐
题目:也许中国可以早早进入信息化时代,但是被清政府拒绝了。附件中是数十年后一位伟人说的话的密文。请翻译出明文(答案为一串中文!) 注意:得到的 flag 请包上 flag{} 提交
题目附件下载:
606046152623600817831216121621196386
解题思路:
不知道是什么编码,扔到 随波逐流里面看看
得到一个有效的解码:计算机要从娃娃抓起
中文电报码是由4个阿拉伯数字代表一个汉字的汉字电报码,又称四位数汉字电报码。
凯撒?替换?呵呵!
题目:MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO} 注意:得到的 flag 请包上 flag{} 提交, flag{小写字母}
解题思路:
推测是凯撒,但是直接偏移,得到的字符串中字母不对
逻辑上,MTHJ->flag,尝试直接单表替换https://www.quipqiup.com/
一般第一个就是flag,得到flag{substitutioncipherdecryptionisalwayseasyjustlikeapieceofcake}
萌萌哒的八戒
题目:萌萌哒的八戒原来曾经是猪村的村长,从远古时期,猪村就有一种神秘的代码。请从附件中找出代码,看看萌萌哒的猪八戒到底想说啥 注意:得到的 flag 请包上 flag{} 提交
题目附件下载:一张bajie.jpg的图片
解题思路:图片下方发现有一行符号,检索发现是猪圈密码
参考链接https://www.naokr.com/article/283
根据对照表,进行加密解密,得到 whenthepigwanttoeat
权限获得第一步
题目:你猜这是什么东西,记得破解后把其中的密码给我。答案为非常规形式。 注意:得到的 flag 请包上 flag{} 提交
附件内容:
Administrator:500:806EDC27AA52E314AAD3B435B51404EE:F4AD50F57683D4260DFD48AA351A17A8:::
解题思路:
推测是对32位哈希进行MD5解密
传统知识+古典密码
题目:
题目附件下载:
小明某一天收到一封密信,信中写了几个不同的年份
辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。
信的背面还写有“+甲子”,请解出这段密文。
key值:CTF{XXX}
解题思路:应该是 干支纪年
对照密文是:28,30,23,8,17,10,16,30,对照“+甲子”就是+60(因为+1没有什么意义)
c = [28,30,23,8,17,10,16,30]
m = ""
for i in c:
m += chr(i + 60)
print(m)
#XZSDMFLZ
得到的字符串交不上去,继续解密,根据题目里的古典密码推测可能是栅栏密码或者凯撒密码之类的。
都尝试了一下,没有找到明显的信息,查了一下,应该是哪一届的比赛答案,应该和比赛名称之类的相关
栅栏密码中:
对4栏结果进行凯撒解密有:
正好对应 双鱼(shuangyu)
传感器
上一题里面多了附件:
5555555595555A65556AA696AA6666666955
这是某压力传感器无线数据包解调后但未解码的报文(hex)
已知其ID为0xFED31F,请继续将报文完整解码,提交hex。
提示1:曼联
解题思路:根据提示联想到曼彻斯特编码
方式一,使用工具:
得到明文:FFFFFED31F645055F9
工具下载地址:http://www.pc6.com/softview/SoftView_606143.html
当密文中只含5,6,9,A时,可以肯定是曼切斯特编码。 因为四位二进制数进行转换时:
0101正好代表十六进制的5
0110正好代表十六进制的6
1001正好代表十六进制的9
1010正好代表十六进制的A
方式二,逐步解密:
解密思路:
5555555595555A65556AA696AA6666666955
转为二进制,得到:
01010101 01010101 01010101 01010101 10010101 01010101 01011010 01100101 01010101 01101010 10100110 10010110 10101010 01100110 01100110 01100110 01101001 01010101
根据01->1,10->0。可得到:
0101->11
0110->10
1010->00
1001->01
解码得到:
11111111 11111111 01111111 11001011 11111000 00100110 00001010 10101010 10011111
对比ID并不重合,根据八位倒序传输协议将二进制每八位reverse,转hex即可得到FFFFFED31F645055F9
txt = '5555555595555A65556AA696AA6666666955'
plain =''
for i in txt:
plain += bin(int(i,16))[2:].zfill(4)
temp = ''
for i in range(0,len(plain),2):
temp += plain[i+1]#根据01->1,10->0来简化操作
flag = ''
for i in range(0,len(temp),8):#根据八位倒序传输协议将二进制每八位反转
flag += hex(eval('0b'+temp[i:i+8][::-1]))[2:]
print(flag)
#fffffed31f645055f9
RSA1
题目附件下载:
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
是dp dq泄露题,
解密代码:
from gmpy2 import*
from libnum import*
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
I = invert(q,p) #求p的逆元
mp = pow(c,dp,p) #求幂取模运算
mq = pow(c,dq,q) #求幂取模运算
m = (((mp-mq)*I)%p)*q+mq #求明文公式
print(n2s(int(m))) #转为字符串
世上无难事
题目:
以下是某国现任总统外发的一段指令,经过一种奇异的加密方式,毫无规律,看来只能分析了。请将这段语句还原成通顺语句,并从中找到key作为答案提交,答案是32位,包含小写字母。 注意:得到的 flag 请包上 flag{} 提交
VIZZB IFIUOJBWO NVXAP OBC XZZ UKHVN IFIUOJBWO HB XVIXW XAW VXFI X QIXN VBD KQ IFIUOJBWO WBKAH NBWXO VBD XJBCN NKG QLKEIU DI XUI VIUI DKNV QNCWIANQ XN DXPIMKIZW VKHV QEVBBZ KA XUZKAHNBA FKUHKAKX XAW DI VXFI HBN QNCWIANQ NCAKAH KA MUBG XZZ XEUBQQ XGIUKEX MUBG PKAWIUHXUNIA NVUBCHV 12NV HUXWI XAW DI XUI SCQN QB HZXW NVXN XZZ EBCZW SBKA CQ NBWXO XAW DI DXAN NB NVXAP DXPIMKIZW MBU JIKAH QCEV XA BCNQNXAWKAH VBQN HKFI OBCUQIZFIQ X JKH UBCAW BM XLLZXCQI XAW NVI PIO KQ 640I11012805M211J0XJ24MM02X1IW09
解题思路:替换密码,使用在线工具http://quipqiup.com/
根据题目答案是32位字母,应该是最后一节字符串640I11012805M211J0XJ24MM02X1IW09,那往前对比,PIO=key,KQ=is
得到爆破结果
flag{640e11012805f211b0ab24ff02a1ed09}
old-fashion
题目:
Os drnuzearyuwn, y jtkjzoztzoes douwlr oj y ilzwex eq lsdexosa kn pwodw tsozj eq ufyoszlbz yrl rlufydlx pozw douwlrzlbz, ydderxosa ze y rlatfyr jnjzli; mjy gfbmw vla xy wbfnsy symmyew (mjy vrwm qrvvrf), hlbew rd symmyew, mebhsymw rd symmyew, vbomgeyw rd mjy lxrzy, lfk wr dremj. Mjy eyqybzye kyqbhjyew mjy myom xa hyedrevbfn lf bfzyewy wgxwmbmgmbrf. Wr mjy dsln bw f1_2jyf-k3_jg1-vb-vl_l
解题思路:
推测是替换密码,在quipquip上试试 bw=is
Unencode
题目:
89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM]
解题思路:
放在随波逐流里面能解
[AFCTF2018]Morse
题目:
-..../.----/-..../-..../-..../...--/--.../....-/-..../-..../--.../-.../...--/.----/--.../...--/..---/--.../--.../....-/...../..-./--.../...--/...--/-----/...../..-./...--/...--/...--/....-/...--/...../--.../----./--.../-..
解密思路:
使用在线工具https://tooltt.com/morse/解摩斯密码
提交结果失败,继续解密,试试base
RSA3
题目:
c1=22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
n=22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
e1=11187289
c2=18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2=9647291
解密思路:共模攻击
e1和e2不互质,根据扩展欧几里得算法得到因子(s1,s2),解密m = pow(c1, x, n) * pow(c2, y, n) % n
from gmpy2 import *
from Crypto.Util.number import *
c1=22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
n=22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
e1=11187289
c2=18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2=9647291
g, s1, s2 = gcdext(e1, e2)
m = pow(c1, s1, n) * pow(c2, s2, n) % n
print(long_to_bytes(m))
#flag{49d91077a1abcb14f1a9d546c80be9ef}
RSA2
题目:
e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
解题思路:dp泄露题,进行爆破
e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
import gmpy2
for 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)
if (len(hex(m)[2:]) % 2 == 1):
continue
print('--------------')
print(m)
print(hex(m)[2:])
print(bytes.fromhex(hex(m)[2:]))
#flag{wow_leaking_dp_breaks_rsa?_98924743502}
还原大师
题目:
我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB???08???51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。 注意:得到的 flag 请包上 flag{} 提交
解题思路:哈希碰撞
'''
待解密字符串 "TASC?O3RJMV?WDJKX?ZM" ?处是大写字母
待碰撞md5-hash值 "E903???4DAB????08?????51?80??8A?"
要求:找到完整的原字符串
'''
import hashlib
for i in range(65,91):
for j in range(65, 91):
for k in range(65, 91):
Str = "TASC"+chr(i)+"O3RJMV"+chr(j)+"WDJKX"+chr(k)+"ZM"
md5obj = hashlib.md5()
md5obj.update(Str.encode("utf-8"))
hexmd5=md5obj.hexdigest()
if hexmd5[0:4].upper() == "E903":
print("字符串为:"+Str)
print("md5为:"+hexmd5.upper())
# 字符串为:TASCJO3RJMVKWDJKXLZM
# md5为:E9032994DABAC08080091151380478A2
异性相吸
题目:
最近出现了一个奇葩观点,说性别都不一样,怎么能谈恋爱?为了证明这个观点错误,请大家证明异性是相吸的。 注意:得到的 flag 请包上 flag{} 提交
密文.txt:
ἇ̀Ј唒ဃ塔屋䩘卖剄䐃堂ن䝔嘅均ቄ䩝ᬔ
key.txt:
asadsasdasdasdasdasdasdasdasdasdqwesqf
解题思路:
异性,在计算机最熟悉的一对相异的东西就是二进制的0和1。先将密文和key都转为二进制,然后进行异或运算,根据结果转出字符。
#获取密文的二进制
c = "00000111 00011111 00000000 00000011 00001000 00000100 00010010 01010101 00000011 00010000 01010100 01011000 01001011 01011100 01011000 01001010 01010110 01010011 01000100 01010010 00000011 01000100 00000010 01011000 01000110 00000110 01010100 01000111 00000101 01010110 01000111 01010111 01000100 00010010 01011101 01001010 00010100 00011011"
c_bin = c.replace(" ","")
print("密文二进制:"+c_bin)
#key字符转为二进制
key_ascii = "asadsasdasdasdasdasdasdasdasdasdqwesqf"
# key_bin = bin(ord(key_ascii))[2:]#转换为二进制并去掉前缀 '0b'
key_bin = ''.join(format(ord(char),'08b') for char in key_ascii)
print("key二进制:"+key_bin)
#对两串二进制进行异或
c_bin = int(c_bin,2)
key_bin =int(key_bin,2)
m = c_bin ^ key_bin
print(m)
#将计算结果转换为16进制
m_hex = hex(m)[2:]
# print(m_hex)
#将计算结果转为ascii
byte_data = bytes.fromhex(m_hex)# 使用 bytes.fromhex() 将十六进制字符串转换为 bytes 对象
ascii_string = byte_data.decode('ascii')# 将 bytes 对象解码为 ASCII 字符串
print("转换后的 ASCII 字符串:", ascii_string)
#转换后的 ASCII 字符串: flag{ea1bc0988992276b7f95b54a7435e89e}
RSA
附件下载下来是flag.enc和pub.key
解题思路:
考察对公钥文件的处理
#对pub.key和flag.enc处理
from Crypto.PublicKey import RSA
with open("pub.key","rb") as file: #提取n,e
key = file.read()
pub = RSA.importKey(key)
n = pub.n
e = pub.e
with open("./flag.enc","rb") as file: #提取密文
c = file.read()
#根据n,e计算p,q,d
print("n=",n)
print("e=",e)
p = 285960468890451637935629440372639283459 #分解n得到p,q
q = 304008741604601924494328155975272418463
import gmpy2
d = gmpy2.invert(e,(p-1)*(q-1))
print("d=",d)
#生成私钥,进行解密
import rsa
priv = rsa.PrivateKey(n,e,d,p,q)
m = rsa.decrypt(c,priv).decode() #decode()将bytes类型转化为str
print(m)
#flag{decrypt_256}
RSAROLL
题目.txt:
RSA roll!roll!roll!
Only number and a-z
(don't use editor
which MS provide)
data.txt:
{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
解题思路:
提示为rsa加密,在data中第一行{920139713,19}为公钥,下面的为密文
根据n=920139713,e=19分解计算p,q,d,然后对密文解密
n = 920139713
e = 19
#分解n得到p,q
p = 18443
q = 49891
import gmpy2
d = gmpy2.invert(e,(p-1)*(q-1))
m = []
with open("data.txt") as file:
for i in file:
m.append(chr(pow(int(i),d,n)))
print(m)
flag = ''.join(m)
print(flag)
#flag{13212je2ue28fy71w8u87y31r78eu1e2}