CTFshow 密码学签到-crypto14 保姆级教程

密码学签到


1
2
密文是:
}wohs.ftc{galf

倒叙排列解出密码 flag{ctf.show}

crypto2


打开文档发现长这样

image-20240704153322375

推断为JsFuck

1
2
JSFuck是基于JavaScript原子部分的深奥和教育性编程风格。它仅仅使用六个不同的字符来编写和执行代码。
分别是:{ } [ ] + !

F12谷歌浏览器打开控制台输入即可解密

image-20240704153448065

crypto3


打开文件 发现一堆颜文字

image-20240704153727935

发现是AAEncode编码

1
2
aaEncode 是一种简单的 JavaScript 加密/混淆工具,可以将 JavaScript 代码转换成一系列看似无意义的颜文字字符。它采用了基于 ASCII 的双重编码方法,使得代码难以被解读。
aaEncode 的工作原理非常简单,它将原始的 JavaScript 代码进行转换,将其中的特殊字符、函数名和变量名等信息进行替换和编码,生成一段新的代码。

解密方式一 打开F12控制台 输入即可解密

image-20240704153952555

解密方式二 使用AAEncode在线解密工具

image-20240704154027392

crypto4


1
2
3
题目
p=447685307 q=2037 e=17
提交flag{d}

Python代码(CTF_Show Copy)

执行即可得到答案

1
2
3
4
5
6
7
p = 447685307 
q= 2037
e =17

n = (p-1)*(q-1)
d = (n+1)//e
print (d)

crypto5


1
2
3
题目
p=447685307 q=2037 e=17 c=704796792
提交flag{m}

使用RSA-Tool进行求d

注意 E为十六进制 所以是 11

image-20240707201805482

使用python的Pow函数

在Python中,pow(c, d, n)函数是一个内置函数,用于计算cd次幂对n取模的结果。换句话说,它计算的是(c**d) % n的值。这个函数特别有用,特别是在密码学和编程竞赛中,因为它允许你在不直接计算大数幂的情况下,快速得到一个数的幂对另一个数的模。

1
2
3
4
c = 704796792
d = 53616899001
n = 911934970359
print(pow(c,d,n))

image-20240707201727422

得出m = 904332399012

crypto6


1
2
3
4
5
6
7
题目如下
密钥为 加密方式 名称,区分大小写

密文:
U2FsdGVkX19mGsGlfI3nciNVpWZZRqZO2PYjJ1ZQuRqoiknyHSWeQv8ol0uRZP94MqeD2xz+
密钥:
加密方式名称

查看加密方式

U2FsdGVkX1开头的可能是rabbit,AES,DES,此题为Rabbit加密

进行解密即可

image-20240707202304547

crypto7


打开题目 如下

image-20240707202530404

猜测使用的Okk加密方式 解密即可

image-20240707202649361

crypto8


1
2
3
4
5
6
7
8
9
10
11
12
13
题目如下:

口出F伸中指

+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.<
++++[ ->+++ +<]>+ +++.< +++++ +++[- >---- ----< ]>--. .--.- -.-.- --.-.
+++++ +..-- -..<+ +++++ +[->+ +++++ +<]>+ +.<++ ++++[ ->--- ---<] >----
----- .---- -.<++ ++++[ ->+++ +++<] >++++ +++++ +++.< +++++ ++[-> -----
--<]> .++.- ----. <++++ +++[- >++++ +++<] >+++. --.<+ +++++ [->-- ----<
]>--- ----- ---.+ .<+++ +++[- >++++ ++<]> +++++ +++++ ++.<+ +++++ [->--
----< ]>--- ----- ---.- .++++ .<+++ +++[- >++++ ++<]> +++++ +++.< +++++
+[->- ----- <]>-- ----- ---.- ----- .++++ +++++ .---- ----. <++++ ++[->
+++++ +<]>+ +++++ +++++ +.<++ +++[- >++++ +<]>+ ++.<

使用Baifuck密码解密即可

bainfuck密码 特征:BrainFuck 语言只有八种符号,所有的操作都由这八种符号 (> < + - . , [ ]) 的组合来完成

image-20240707202848996

crypto9


打开压缩包发现有密码

image-20240707203149159

使用Ziperello暴力破解压缩包密码

image-20250703102733839

得到密码为4132

image-20250703102806430

解压出内容如下

image-20250703103124823

文件夹名称为serpent,推测为serpent加密

使用 http://serpent.online-domain-tools.com/ 进行解密

image-20250703103919803

删掉空格提交即可

crypto10


1
2
3
题目如下

=E7=94=A8=E4=BD=A0=E9=82=A3=E7=81=AB=E7=83=AD=E7=9A=84=E5=98=B4=E5=94=87=E8=AE=A9=E6=88=91=E5=9C=A8=E5=8D=88=E5=A4=9C=E9=87=8C=E6=97=A0=E5=B0=BD=E7=9A=84=E9=94=80=E9=AD=82

发现是Quoted-Printable编码 解码即可

任何一个8位的字节值可编码为3个字符:一个等号”=”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值.例如,ASCII码换页符(十进制值为12)可以表示为”=0C”, 等号”=”(十进制值为61)必须表示为”=3D”. 除了可打印ASCII字符与换行符以外,所有字符必须表示为这种格式.

所有可打印ASCII字符(十进制值的范围为33到126)可用ASCII字符编码来直接表示, 但是等号”=”(十进制值为61)不可以这样直接表示.ASCII的水平制表符(tab)与空格符, 十进制为9和32, 如果不出现在行尾则可以用其ASCII字符编码直接表示。如果这两个字符出现在行尾,必须QP编码表示为”=09″ (tab)或”=20″ (space).

如果数据中包含有意义的行结束标志,必须转换为ASCII回车(CR)换行(LF)序列,既不能用原来的ASCII字符也不能用QP编码的”=”转义字符序列。 相反,如果字节值13与10有其它的不是行结束的含义,它们必须QP编码为=0D与=0A.

quoted-printable编码的数据的每行长度不能超过76个字符. 为满足此要求又不改变被编码文本,在QP编码结果的每行末尾加上软换行(soft line break). 即在每行末尾加上一个”=”, 但并不会出现在解码得到的文本中.

image-20240707203635849

crypto11


1
2
题目如下
密文:a8db1d82db78ed452ba0882fb9554fc

使用穷举找到md5缺失的一位

a8db1d82db78ed452ba0882fb9554fc(31 位)

正确的 MD5 应该是数字和字母的组合,并且是 16 位或者 32 位。

a8db1d82db78ed452ba0882fb9554fc_(0 ~ f)

a8db1d82db78ed452ba0882fb9554fc9

一眼看出来是md5加密 彩虹表解密即可

image-20240707204053145

crypto0


1
2
3
题目如下

gmbh{ifmmp_dug}

看出来很像凯撒密码

枚举解密即可

image-20240707214920470

crypto12


1
2
3
题目如下

uozt{Zgyzhv_xlwv_uiln_xguhsld}

判断为埃特巴什码 解密即可(记得大小写)

埃特巴什码的特征是所有字母表的字母都被颠倒,如a-z、b-y,本题的前四个字母uozt-flag,符合这个特征,所以就找个网站解开就好了 网站

image-20240707215115526

crypto13


压缩包解压内容如下 文件特别长 末尾为= 推测为base64编码

image-20250703150805139

使用Python解码即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import base64
def base(s):
try:
s = base64.b32decode(s)
s = base(s)
except:
try:
s = base64.b64decode(s)
s = base(s)
except:
return s
return s
f = open('base.txt')

text = f.read()

print(base(text))

crypto14


1
2
3
题目如下:

感谢@星河皆灿烂提供的题目 00110011 00110011 00100000 00110100 00110101 00100000 00110101 00110000 00100000 00110010 01100110 00100000 00110011 00110011 00100000 00110101 00110110 00100000 00110100 01100101 00100000 00110100 00110110 00100000 00110100 00110110 00100000 00110110 01100100 00100000 00110100 01100101 00100000 00110100 00110101 00100000 00110100 00110001 00100000 00110110 01100101 00100000 00110110 01100011 00100000 00110100 00111000 00100000 00110100 00110100 00100000 00110011 00110101 00100000 00110110 00110100 00100000 00110100 00110011 00100000 00110100 01100100 00100000 00110110 01100100 00100000 00110101 00110110 00100000 00110100 00111000 00100000 00110100 00110100 00100000 00110011 00110101 00100000 00110110 00110001 00100000 00110110 00110100 00100000 00110011 00111001 00100000 00110111 00110101 00100000 00110100 00110111 00100000 00110000 01100001

0和1 一眼二进制解码 转换成十六进制 得到

0x3333203435203530203266203333203536203465203436203436203664203465203435203431203665203663203438203434203335203634203433203464203664203536203438203434203335203631203634203339203735203437203061

在线网站为 https://www.lzltool.cn/Tools/BinToHex

image-20250703152931493

将十六进制转化为文本

image-20250703160012118

再一次转换得到3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG

image-20250703160035169

对数据进行‌字符映射 填充处理 Python脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import base64

def decode_custom_base64(encoded_str):
# 定义base64字符集
t = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

# 字符位移处理
l = ""
for i in encoded_str:
l += t[(t.index(i)-30)%64]

# 补全base64长度
if len(l)%4 != 0:
l += "="*(4-(len(l)%4))

# base64解码
try:
flag = base64.b64decode(l).decode('utf-8')
return flag
except Exception as e:
return f"解码失败: {str(e)}"

# 示例用法
if __name__ == "__main__":
# 这是原代码中的输入字符串
s = '3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG'
result = decode_custom_base64(s)
print("解码结果:", result)

打印得到Flag

image-20250703162316475