Bugku CTF 密码学刷题
- 前言
- 一、抄错的字符
- 二、/.-
- 三、聪明的小羊
- 四、ok
- 五、[+-<>]
- 六、把猪困在猪圈里
- 七、你喜欢下棋吗
- 八、小山丘的秘密
- 九、EN-气泡
- 十、你以为是md5吗
- 十一、Math&English
- 十二、easy_crypto
- 十三、黄道十二官
- 十四、一段新闻
- 十五、7+1+0
- 十六、这是个盲兔子,竟然在唱歌!
- 总结
前言
密码学可以分为古典密码学和现代密码学。古典密码学主要由单表替代、多表替代等加密方法组成,现代密码学则主要包含对称加密、非对称加密、哈希、数字签名等内容。我呢,更偏爱古典密码哈哈哈,趁着课少,赶快刷题,冲鸭!!!
这里自夸一下嗷,我写的wp还是非常详细的,每一题我也都配上了解题思路和超链接,方便大家直接拿到flag,当然了做一题肯定是要拿下它的,理解后积累的知识才是最宝贵的,加油!
一、抄错的字符
题目描述:
额其实这题挺麻烦的,思考了一会,主要是一个个列举他的换算大小写字母及数字,优先级:数字 > 小写字母 > 大写字母,然后将枚举出来的字符进行解密直接上脚本:
//python3
import base64
s = "QWIHBLGZZXJSXZNVBZW="
dic = {'I': '1', 'B': '6', 'S':'5','G': '9','Z':'2'}
res = ''
def check(s):
f = True
s = str(s)
for i in range(len(s)):
if ((s[i] in list('_+=')) or s[i].isdigit() or s[i].isalpha()):
continue
else:
f = False
break
return f
def strcon_decode(s,i):
global res
if(i==4):
ss = ''.join(s)
sss = base64.b64decode(ss)
sss = str(sss)[2:-1]
if check(sss):
# print(ss+' decode: ' + sss)
ss = res + sss
res = ss
return True
else:
return False
else:
if s[i] in dic.keys():
ss = s[i]
s[i] = dic[s[i]]
f = strcon_decode(s,i+1)
s[i] = ss
if f:
return True
s[i] = s[i].lower()
f = strcon_decode(s,i+1)
s[i] = s[i].upper()
if f:
return f
return strcon_decode(s,i+1)
for i in range((len(s)//4)):
ss = s[i*4:(i+1)*4]
# print(ss+' decode: ')
ss = list(ss)
strcon_decode(ss,0)
print(res)
二、/.-
一看就是莫斯密码嘛
直接解密
flag虽然出来了,但是需要调整一下,把前后的%u7b
分别换成 “{” “}” 然后剩下的大写字母换成小写字母即可。
三、聪明的小羊
描述里已经讲了,栅栏,这题可以叫做一眼就解密!哈哈
四、ok
同样的,Ook,嗷,这题也是一眼就解密
在线解密,把txt文件的密文复制进去,然后Ook! to Text即可
https://tool.bugku.com/brainfuck/
五、[±<>]
同上一题,一眼就解密嗷!
在线解密,把给的题目描述复制进去,然后Brainfuck to Text即可
https://tool.bugku.com/brainfuck/
六、把猪困在猪圈里
下载题目,得到一个txt文件,一堆乱码???以我多次做题的题感,应该是base64转图片!
好嘞,得到了猪圈密码!
直接对照猪圈密码的解码图解密了
一个个对照过去就是flag了!记得加flag格式哦☺
七、你喜欢下棋吗
比起前面几题,这题的难度上升了不少嗷
首先打开下载的文件,一个txt文件和一个加密的txt文件,我一步步做下去,跟着提示走。
你喜欢下棋吗?
解压密码为小写
4423244324433534315412244543
提示1:下棋,是不是棋盘密码呢
提示2:看眼密文都是数字且都是1到5
ok,应该是棋盘密码了
根据棋盘密码的加密算法我们可以得到密文
除了手动解密也有在线解密网站呀
thisispolybius
敲击码在线解密
ok,这解出来的密文就是加密txt文件的密码了
然后我们打开这个txt文件
根据提示,他说是一种5bit的编码
这个我也不知道,哈哈哈,看了wp后才知道这个是 博多码 ,这个也是有在线解密网站的
拿到了flag了,转成小写即可。
八、小山丘的秘密
下载文件后给了一个txt文件和一张图片
先看描述,hill有什么秘密呢
这里的hill就是希尔(hill)密码,直接在线解密吧 希尔密码flag.txt 中给出A=1,一般的希尔密码是A=0,B=1, C=2 …所以字母表需要修改,现在的字母表为Z=0 , A=1 , B=2…
所以把z放在第一位
希尔密码还需要密钥,密钥肯定就在图片中,图片看上去4和9的位置看上去像是缺了棋子,那么将它看作0,那么此处位置为 z ,其他位置如图所示,得到密钥
得到密钥啦!
然后参数都拿到手了,就解密啦!
九、EN-气泡
下载得到一个txt文件
这题刚看到我也不知道是啥加密,后来听了师傅说的是一种BubbleBubble加密算法,直接在线解密就好了。
一共是三次加密!!!
BubbleBubble加密算法 第三次即可拿到flag
脚本也有呀:
//python3
from bubblepy import BubbleBabble
#导入包bubblepy
str='xivak-notuk-cupad-tarek-zesuk-zupid-taryk-zesak-cined-tetuk-nasuk-zoryd-tirak-zysek-zaryd-tyrik-nisyk-nenad-tituk-nysil-hepyd-tovak-zutik-cepyd-toral-husol-henud-titak-hesak-nyrud-tarik-netak-zapad-tupek-hysek-zuned-tytyk-zisuk-hyped-tymik-hysel-hepad-tomak-zysil-nunad-tytak-nirik-copud-tevok-zasyk-nypud-tyruk-niryk-henyd-tityk-zyral-nyred-taryk-zesek-corid-tipek-zysek-nunad-tytal-hitul-hepod-tovik-zurek-hupyd-tavil-hesuk-zined-tetuk-zatel-hopod-tevul-haruk-cupod-tavuk-zesol-ninid-tetok-nasyl-hopid-teryl-nusol-heped-tovuk-hasil-nenod-titek-zyryl-hiped-tivyk-cosok-zorud-tirel-hyrel-hinid-tetok-hirek-zyped-tyrel-hitul-nyrad-tarak-hotok-cuvux'
#str是待解密字符
Str=BubbleBabble()
print(Str.decode(str))
套娃三次即可拿到flag
十、你以为是md5吗
下载文件得到一个txt文件
bci177a7a9c7udf69c248647b4dfc6fd84o
根据提示,那就查一下md5的构成嗷
en…那就根据这个把给的密文删改一下
得到bc177a7a9c7df69c248647b4dfc6fd84
然后直接md5解密一下
66666666哈哈哈哈
这个就是flag了吧,有趣!
十一、Math&English
呕吼,数学与英语
下载文件得到一个txt文件,打开一看竟然是
我已经算好了,哈哈哈
然后得到一组数字21 33 1 22 3 44 54 5 1 35 54 3 35 41 52 13
然后就没有然后了…好吧我啥也看不出来了
看了眼wp,原来是元音密码,学到了!元音密码表:
根据这个我们一 一对照就可以拿到flag了!
十二、easy_crypto
题目说是简单的密码,下载得到一个txt文件
这个我做过(超大声!)
是摩尔斯电码!
flag的%u7b %u7d
改成flag的括号即可
确实如题目所说嗷,简单的密码
十三、黄道十二官
这题好麻烦,大佬提示跟黄道十二宫杀手有关,搜索相关信息,需要用到AZdecrypt软件。
先抄录下来吧
%..@*>@?==%88%5
.@%#@@90-7$^=*@
17.(>()1@##-$40
~.*6?#%#8#=75+1
(*@*1%#>;0@5)%?
%*^=)&>=1%.+7&#
8681(+8*@@(.@@@
#*=#$3*#%.#%%.3
.*+7.7+@===+)61
第一部分,第一个字符H,随后再向下移动一格,在向左移动两个,得到第二个字符+,以此类推。
然后用脚本来搞吧
//python
_sec = ""
with open(r"黄道十二宫杀手密码Zodiac Killer.txt", "r") as f:
_sec = f.read()
assert len(_sec) > 0
_sec_lines = _sec.split("\n")
_line_num = len(_sec_lines)
_line_ch_cnt = len(_sec_lines[0])
_tmp = ""
for _i in range(_line_ch_cnt):
for _j in range(0, _line_num):
_tmp += _sec_lines[_j][(2 * _j + _i) % _line_ch_cnt]
_reformat_ = []
for _i in range(_line_num):
_reformat_.append(_tmp[_i * _line_ch_cnt:(_i + 1) * _line_ch_cnt])
for _key in _reformat_:
print("".join(_key))
得到
%%>%;.@3*.#(#0+
@#+.@)8@7@*7@@1
#5&8=.*9@=)#6#7
>0#7%%8$+@-#5?*
13@?7-+(^(*==$$
1*=+#==^4~@)8%=
%=0.*&*.+8*1*1>
@#)8@76%=@%6%..
?#1(%15@(#>%...
扔进AZdecrypt进行解码:
Score: 22983.43 IOC: 0.0654 Multiplicity: 0.1925 Seconds: 0.11
Repeats: LETH KILL ILL LL IS (2) AN (2) RE OR AS TH OU TO OP PE
PC-cycles: 136
II KILLED A LOT OF PEOPLE THERE ARE ENOUGH
SLAVES TO WORK FOR I I HOPE YOU CAN DECRYPT
IT AS SOON AS POSSIBLE THIS IS FLAG ALPHAN
ANKE OTHERWISE I WILL CONTINUE TO KILLL
然后去FLAG后的单词就是flag了flag{alphananke}
小写哦
十四、一段新闻
下载后得到一个压缩包,是一个txt文件,题目和新颖,看了提示才知道是隐藏字符加密
就是这里鼠标拖动的地方有颜色的这里,是隐藏掉了
直接上网站,解密
原来是社会主义核心价值观解码啊
ok,拿到flag
十五、7+1+0
下载题目得到txt文件,打开后发现短短一行密文
4nXna/V7t2LpdLI44mn0fQ==
看到==我以为是base64,解出来的东西也是无语子
这里省略一大段时间
然后就就就去看了wp
然后就偷来了脚本
import base64
miwen = '4nXna/V7t2LpdLI44mn0fQ=='
mingwen = base64.b64decode(miwen)
print(mingwen)
for i in mingwen:
# print(type(i))
print(i, end=" ")
print()
j = 1
for i in mingwen:
# print(type(i))
if(j % 2 == 1):
print(chr(i-128), end="")
else:
print(chr(i), end="")
j += 1
拿到flag
十六、这是个盲兔子,竟然在唱歌!
下载得到一个txt文件
这个应该是盲文吧,看题目提示也是,盲兔子…
直接上网站
然后是兔子解密
然后题目就没提示了嗷,但是看这个应该是音符解密了
okk,拿到了flag。
总结
这次的题目好有意思啊,难度中等,但是趣味性挺高的,还是要继续努力加油冲冲冲!!!
写wp也是再次巩固做过的题目,所以我觉得收货满满,大家也要一起加油呀!