Bugku CTF 密码学刷题

  • 前言
  • 一、抄错的字符
  • 二、/.-
  • 三、聪明的小羊
  • 四、ok
  • 五、[+-<>]
  • 六、把猪困在猪圈里
  • 七、你喜欢下棋吗
  • 八、小山丘的秘密
  • 九、EN-气泡
  • 十、你以为是md5吗
  • 十一、Math&English
  • 十二、easy_crypto
  • 十三、黄道十二官
  • 十四、一段新闻
  • 十五、7+1+0
  • 十六、这是个盲兔子,竟然在唱歌!
  • 总结


前言


          密码学可以分为古典密码学和现代密码学。古典密码学主要由单表替代、多表替代等加密方法组成,现代密码学则主要包含对称加密、非对称加密、哈希、数字签名等内容。我呢,更偏爱古典密码哈哈哈,趁着课少,赶快刷题,冲鸭!!!

这里自夸一下嗷,我写的wp还是非常详细的,每一题我也都配上了解题思路和超链接,方便大家直接拿到flag,当然了做一题肯定是要拿下它的,理解后积累的知识才是最宝贵的,加油!


一、抄错的字符

题目描述:

ctf 密码学 python ctf 密码学的题_python

额其实这题挺麻烦的,思考了一会,主要是一个个列举他的换算大小写字母及数字,优先级:数字 > 小写字母 > 大写字母,然后将枚举出来的字符进行解密直接上脚本:

//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)

二、/.-

ctf 密码学 python ctf 密码学的题_下载文件_02

一看就是莫斯密码嘛

直接解密

ctf 密码学 python ctf 密码学的题_概率论_03

flag虽然出来了,但是需要调整一下,把前后的%u7b分别换成 “{” “}” 然后剩下的大写字母换成小写字母即可。

三、聪明的小羊

ctf 密码学 python ctf 密码学的题_下载文件_04


描述里已经讲了,栅栏,这题可以叫做一眼就解密!哈哈

栅栏密码在线加密解密

ctf 密码学 python ctf 密码学的题_txt文件_05

四、ok

ctf 密码学 python ctf 密码学的题_下载文件_06

同样的,Ook,嗷,这题也是一眼就解密

在线解密,把txt文件的密文复制进去,然后Ook! to Text即可

https://tool.bugku.com/brainfuck/

ctf 密码学 python ctf 密码学的题_python_07

五、[±<>]

ctf 密码学 python ctf 密码学的题_txt文件_08

同上一题,一眼就解密嗷!

在线解密,把给的题目描述复制进去,然后Brainfuck to Text即可

https://tool.bugku.com/brainfuck/

ctf 密码学 python ctf 密码学的题_下载文件_09

六、把猪困在猪圈里

ctf 密码学 python ctf 密码学的题_下载文件_10

下载题目,得到一个txt文件,一堆乱码???以我多次做题的题感,应该是base64转图片!

ctf 密码学 python ctf 密码学的题_概率论_11

好嘞,得到了猪圈密码!

直接对照猪圈密码的解码图解密了

ctf 密码学 python ctf 密码学的题_python_12


ctf 密码学 python ctf 密码学的题_txt文件_13


一个个对照过去就是flag了!记得加flag格式哦☺

七、你喜欢下棋吗

ctf 密码学 python ctf 密码学的题_python_14


比起前面几题,这题的难度上升了不少嗷

首先打开下载的文件,一个txt文件和一个加密的txt文件,我一步步做下去,跟着提示走。

你喜欢下棋吗?
解压密码为小写
4423244324433534315412244543

提示1:下棋,是不是棋盘密码呢
提示2:看眼密文都是数字且都是1到5
ok,应该是棋盘密码了

ctf 密码学 python ctf 密码学的题_ctf 密码学 python_15

根据棋盘密码的加密算法我们可以得到密文

除了手动解密也有在线解密网站呀

thisispolybius敲击码在线解密

ctf 密码学 python ctf 密码学的题_python_16


ok,这解出来的密文就是加密txt文件的密码了

然后我们打开这个txt文件

ctf 密码学 python ctf 密码学的题_txt文件_17


根据提示,他说是一种5bit的编码

这个我也不知道,哈哈哈,看了wp后才知道这个是 博多码 ,这个也是有在线解密网站的

博多码解码网址

ctf 密码学 python ctf 密码学的题_下载文件_18

拿到了flag了,转成小写即可。

八、小山丘的秘密

ctf 密码学 python ctf 密码学的题_ctf 密码学 python_19

下载文件后给了一个txt文件和一张图片

先看描述,hill有什么秘密呢

这里的hill就是希尔(hill)密码,直接在线解密吧 希尔密码flag.txt 中给出A=1,一般的希尔密码是A=0,B=1, C=2 …所以字母表需要修改,现在的字母表为Z=0 , A=1 , B=2…

所以把z放在第一位

ctf 密码学 python ctf 密码学的题_python_20

希尔密码还需要密钥,密钥肯定就在图片中,图片看上去4和9的位置看上去像是缺了棋子,那么将它看作0,那么此处位置为 z ,其他位置如图所示,得到密钥

ctf 密码学 python ctf 密码学的题_下载文件_21


得到密钥啦!

然后参数都拿到手了,就解密啦!

ctf 密码学 python ctf 密码学的题_txt文件_22

九、EN-气泡

ctf 密码学 python ctf 密码学的题_下载文件_23

下载得到一个txt文件

ctf 密码学 python ctf 密码学的题_下载文件_24

这题刚看到我也不知道是啥加密,后来听了师傅说的是一种BubbleBubble加密算法,直接在线解密就好了。

一共是三次加密!!!

BubbleBubble加密算法 第三次即可拿到flag

ctf 密码学 python ctf 密码学的题_下载文件_25

脚本也有呀:

//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吗

ctf 密码学 python ctf 密码学的题_python_26

下载文件得到一个txt文件

bci177a7a9c7udf69c248647b4dfc6fd84o

根据提示,那就查一下md5的构成嗷

ctf 密码学 python ctf 密码学的题_txt文件_27


en…那就根据这个把给的密文删改一下

得到bc177a7a9c7df69c248647b4dfc6fd84 然后直接md5解密一下

ctf 密码学 python ctf 密码学的题_ctf 密码学 python_28


66666666哈哈哈哈

这个就是flag了吧,有趣!

十一、Math&English

ctf 密码学 python ctf 密码学的题_python_29


呕吼,数学与英语

下载文件得到一个txt文件,打开一看竟然是

ctf 密码学 python ctf 密码学的题_下载文件_30


我已经算好了,哈哈哈

然后得到一组数字21 33 1 22 3 44 54 5 1 35 54 3 35 41 52 13 然后就没有然后了…好吧我啥也看不出来了

看了眼wp,原来是元音密码,学到了!元音密码表:

ctf 密码学 python ctf 密码学的题_概率论_31

根据这个我们一 一对照就可以拿到flag了!

十二、easy_crypto

ctf 密码学 python ctf 密码学的题_ctf 密码学 python_32

题目说是简单的密码,下载得到一个txt文件

ctf 密码学 python ctf 密码学的题_python_33


这个我做过(超大声!)

摩尔斯电码

ctf 密码学 python ctf 密码学的题_ctf 密码学 python_34

flag的%u7b %u7d改成flag的括号即可

确实如题目所说嗷,简单的密码

十三、黄道十二官

ctf 密码学 python ctf 密码学的题_txt文件_35

这题好麻烦,大佬提示跟黄道十二宫杀手有关,搜索相关信息,需要用到AZdecrypt软件。

ctf 密码学 python ctf 密码学的题_下载文件_36

先抄录下来吧

%..@*>@?==%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进行解码:

AZdecrypt下载

ctf 密码学 python ctf 密码学的题_txt文件_37

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}小写哦

十四、一段新闻

ctf 密码学 python ctf 密码学的题_ctf 密码学 python_38


下载后得到一个压缩包,是一个txt文件,题目和新颖,看了提示才知道是隐藏字符加密

就是这里鼠标拖动的地方有颜色的这里,是隐藏掉了

ctf 密码学 python ctf 密码学的题_txt文件_39


直接上网站,解密

隐藏字符加密

ctf 密码学 python ctf 密码学的题_概率论_40

原来是社会主义核心价值观解码啊

社会主义核心价值观编码器

ctf 密码学 python ctf 密码学的题_txt文件_41


ok,拿到flag

十五、7+1+0

ctf 密码学 python ctf 密码学的题_ctf 密码学 python_42

下载题目得到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

ctf 密码学 python ctf 密码学的题_下载文件_43

十六、这是个盲兔子,竟然在唱歌!

ctf 密码学 python ctf 密码学的题_下载文件_44

下载得到一个txt文件

ctf 密码学 python ctf 密码学的题_下载文件_45

这个应该是盲文吧,看题目提示也是,盲兔子…

直接上网站

盲文解密

ctf 密码学 python ctf 密码学的题_下载文件_46

然后是兔子解密

ctf 密码学 python ctf 密码学的题_概率论_47


然后题目就没提示了嗷,但是看这个应该是音符解密

ctf 密码学 python ctf 密码学的题_txt文件_48

okk,拿到了flag。


总结

这次的题目好有意思啊,难度中等,但是趣味性挺高的,还是要继续努力加油冲冲冲!!!

写wp也是再次巩固做过的题目,所以我觉得收货满满,大家也要一起加油呀!

ctf 密码学 python ctf 密码学的题_下载文件_49