大家好,今天来做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:使用在线工具(推荐初学者)

  1. 访问在线解码网站

    • Unicode Steganography with Zero-Width Characters

    • 零宽度字符隐写解码工具

    • 其他在线隐写分析工具

解出flag为flag{d3fcbf17f9399504}

2,聪明的小羊

提示:一只小羊翻过了2个栅栏, 密文为:fa{fe13f590lg6d46d0d0}

根据提示猜测是分两栏的栅栏密码,

栅栏密码是一种经典的transposition cipher(换位密码)它不改变明文中的字母,而是通过改变字母的排列顺序来达到加密的目的。栅栏密码的基本思想就像它的名字一样:把要加密的明文写在一道“栅栏”上,然后按另一种顺序(比如“之”字形)来读取,从而得到密文。

它主要有两种类型:

  1. 常规栅栏密码

  2. 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 基于一个非常简单的机器模型,包括:

  1. 一个内存数组(磁带):由无数个字节(初始值为0)的单元组成。

  2. 一个数据指针:初始时指向数组的第一个单元。

  3. 一个指令指针:指向当前要执行的指令。

  4. 一个输入/输出流:用于输入字节和输出字节。


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}

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐