bugku合集1
摘要:本文分享了多道CTF密码题的解题思路,这些题目涉及多种加密技术,包括零宽隐写、栅栏密码和Brainfuck相关变形等,展示了CTF竞赛中常见的密码学挑战。
大家好,今天来做bugku(ovo)
1,/.-
密文为:
..-./.-../.-/--./----.--/-../...--/..-./-.-./-.../..-./.----/--.../..-./----./...--/----./----./...../-----/....-/-----.-
这段文本乍一看似乎与摩斯密码有些相似,然而事实上用摩斯解出来的flag并不正确,所以粗暴一点直接随波逐流,
原来是隐藏(零宽)字符解码,零宽字符隐写是一种将隐藏信息嵌入到普通文本中的技术,使用不可见的Unicode字符来编码数据。
零宽字符概述
常见的零宽字符包括:
-
U+200B - 零宽度空格 (Zero Width Space)
-
U+200C - 零宽度非连接符 (Zero Width Non-Joiner)
-
U+200D - 零宽度连接符 (Zero Width Joiner)
-
U+200E - 左至右标记 (Left-to-Right Mark)
-
U+200F - 右至左标记 (Right-to-Left Mark)
-
U+FEFF - 零宽度无断空格 (Zero Width No-Break Space)
解码步骤
方法1:使用在线工具(推荐初学者)
-
访问在线解码网站:
-
Unicode Steganography with Zero-Width Characters
-
零宽度字符隐写解码工具
-
其他在线隐写分析工具
-
解出flag为flag{d3fcbf17f9399504}
2,聪明的小羊
提示:一只小羊翻过了2个栅栏, 密文为:fa{fe13f590lg6d46d0d0}
根据提示猜测是分两栏的栅栏密码,
栅栏密码是一种经典的transposition cipher(换位密码)它不改变明文中的字母,而是通过改变字母的排列顺序来达到加密的目的。栅栏密码的基本思想就像它的名字一样:把要加密的明文写在一道“栅栏”上,然后按另一种顺序(比如“之”字形)来读取,从而得到密文。
它主要有两种类型:
-
常规栅栏密码
-
W型栅栏密码
1. 常规栅栏密码(简单栅栏密码)
这种密码将明文分成若干组,然后取每组的第一、第二个字符等连接成密文。
2. W型栅栏密码(经典栅栏密码)
这是更常见、更经典的栅栏密码形式。它按照“W”或“之”字形的路径来书写和读取明文。
本题是常规栅栏密码,最后解出flag为flag{6fde4163df05d900}
3,ok
打开附件:
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook?
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook!
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook?
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook. Ook? Ook.
很明显这是ook加密
Ook加密是一种基于Ook语言的趣味加密方式,Ook语言是一种以大猩猩为主题的编程语言,实际上是Brainfuck语言的一种变体。加密过程涉及将文本转换为Brainfuck代码,然后再将Brainfuck指令替换为Ook单词对。这种方式主要用于娱乐或教育目的,并不提供高安全性。
Ook加密原理
Ook语言只有三个基本单词:Ook.、Ook?和Ook!。这些单词通过组合成对来表示Brainfuck指令。Brainfuck是一种极简的编程语言,只有8个指令,用于操作内存和输出字符。以下是Brainfuck指令到Ook的映射:
| Brainfuck指令 | Ook等价形式 |
|---|---|
> |
Ook. Ook? |
< |
Ook? Ook. |
+ |
Ook. Ook. |
- |
Ook! Ook! |
. |
Ook! Ook. |
, |
Ook. Ook! |
[ |
Ook! Ook? |
] |
Ook? Ook! |
加密文本时,需要先将文本转换为一个Brainfuck程序,该程序能够输出原始文本。然后,将每个Brainfuck指令替换为对应的Ook单词对,得到Ook加密后的代码。
回到题目,直接在线加密即可,flag为flag{0a394df55312c51a}
4,[+-<>]
密文为:+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.< ++++[ ->+++ +<]>+ +++.< +++++ +++[- >---- ----< ]>--- ----- ---.< +++++ ++[-> +++++ ++<]> +++.< +++++ +[->- ----- <]>-- ----- -.--. ----. --.++ +++++ +.<++ ++++[ ->+++ +++<] >++++ +.++. <++++ ++[-> ----- -<]>- ----- ----. -.<++ +++++ [->++ +++++ <]>+. ----. ++++. <++++ +++[- >---- ---<] >---- .+.<+ +++++ ++[-> +++++ +++<] >++++ +++++ ++.<
在上一题中我们提到过Ook加密过程涉及将文本转换为Brainfuck,而这一密文就是Brainfuck本尊
Brainfuck 由 Urban Müller 在 1993 年创建。它的核心思想是:只使用 8 个简单的指令来操作一个内存数组(通常称为“磁带”)和一个指针。
它的名字(Brainfuck,意为“大脑 fuck”)恰当地描述了程序员在试图理解和编写它时的感受。
核心概念
Brainfuck 基于一个非常简单的机器模型,包括:
-
一个内存数组(磁带):由无数个字节(初始值为0)的单元组成。
-
一个数据指针:初始时指向数组的第一个单元。
-
一个指令指针:指向当前要执行的指令。
-
一个输入/输出流:用于输入字节和输出字节。
8 个基本指令
Brainfuck 语言只由以下 8 个字符构成,所有其他字符都会被忽略(通常被视为注释)。
| 指令 | 含义 | C 语言等价操作 |
|---|---|---|
> |
指针加一 | ptr++; |
< |
指针减一 | ptr--; |
+ |
指针指向的字节的值加一 | (*ptr)++; |
- |
指针指向的字节的值减一 | (*ptr)--; |
. |
输出指针指向的单元内容(ASCII 码) | putchar(*ptr); |
, |
输入一个字节到指针指向的单元 | *ptr = getchar(); |
[ |
循环开始:如果指针指向的单元值为 0,则跳转到对应的 ] 之后 |
while (*ptr) { |
] |
循环结束:如果指针指向的单元值不为 0,则跳转到对应的 [ 之后 |
} |
回到题目,还是直接在线加密即可,flag为flag{0a394df55312c51a}
5,散乱的密文
密文:lf5{ag024c483549d7fd@@1} ,提示: 一张纸条上凌乱的写着2 1 6 5 3 4
基于对216534的观察,我们发现其中的数字2对应字符f,1对应字符l。由此推测,这六个数可能代表六个字符的排列顺序。将这六个数按照123456进行编号,并依据216534的顺序重新排列后,前六位拼接起来得到的是flga5{。众所周知ctf中最常见的头就是flag因此,我们ky调整编号顺序为215643,按照从一到六的顺序,对应的前六个字符即为flag{5。按照这一规律,我们继续对后面的六个数进行排序处理。需要注意的是,最后的两个@需要去掉。
最后得出flag为flag{52048c453d794df1}
6,这不是md5
密文为666c61677b616537333538376261353662616566357d
我们可以发现密文数字最大为9,字母最大为f。很明显的16进制(16进制使用16个不同的符号:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F。其中,A-F 代表十进制的 10-15)
然后16进制转(ascll)字符,得到:flag{ae73587ba56baef5}
更多推荐


所有评论(0)