CTFshow crypto篇(持续更新)

crypto1

把提示倒过来就好了

crypto2

JSFuck密码

jsfuck源于一门编程语言brainfuck,其主要的思想就是只使用8种特定的符号来编写代码。而jsfuck也是沿用了这个思想,它仅仅使用6种符号来编写代码。它们分别是(、)、+、[、]、!。

法一工具:

CTF在线工具-在线JSfuck加密|在线JSfuck解密|JSfuck|JSfuck原理|JSfuck算法

JSFuck - 在线加解密

法二:

火狐控制台打开方式:

  1. 快捷键F12Fn+F12

  2. 火狐:右上角的菜单–>更多工具–>web开发者工具–>控制台

按下 Enter 即可添加新行,按 Ctrl+Enter 运行。

JSFuck、jjencode和aaencode都是基于JavaScript的编码或加密方法。

1、JSFuck是一种基于JavaScript的编程风格,使用六个不同的字符(!~.)来编写代码,旨在简化JavaScript代码并使其易于阅读。它采用了一种基于字符替换的编码方式,将常见的JavaScript操作符和关键字替换为简化的字符组合。通过使用JSFuck,可以将复杂的JavaScript代码转换成简单易懂的字符序列,方便代码的阅读和传输。

2、jjencode和aaencode则是将JavaScript代码转换为其他形式的方法。

jjencode可以将JavaScript代码转换为仅包含符号的字符串,类似于Base64编码,但使用的符号不同。

编码前:

alert("Hello, JavaScript" )

编码后:

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())();

而aaencode则将JavaScript代码转换为常用的网络表情符号,这种加密方式也被称为颜文字js加密。这两种方法都可以用于隐藏JavaScript代码的真实含义,增加代码的保密性和安全性。

在控制台jsfuck、jjencode、aaencode可以被很轻易的还原:
第一步:首先打开谷歌浏览器,进入浏览器控制台。
第二步:去掉最后一行末尾的(),复制加密后的代码;
第三步:在console控制台粘贴你第二步复制的代码;
第四步:回车,达到便能得到解密后的代码。

crypto3

显示为乱码

右键另存为

得到一堆颜文字

控制台解码

crypto4

题目

p=447685307 q=2037 e=17

判断用base10

e=17 =》hex为11

输入数据解出d

RSA —— 经典的非对称加密算法

(作者将发布另一篇文章来详细介绍与学习RSA算法)

crypto5

题目:

p=447685307 q=2037 e=17 c=704796792

p、q  =》n(n=p*q) =》 n=911934970359

         =》d =》 d=53616899001

用pow函数m=pow(c,d,n)

在数学和计算机科学中,m=pow(c,d,n) 是一个模幂运算的表示方法,其中 pow 表示幂运算,c 是基数,d 是指数,n 是模数。这个运算的含义是计算 (c^d) % n 的结果,即将 c 的 d 次方对 n 取模。

模幂运算在密码学和计算机科学中有多种应用,包括但不限于以下方面:

  1. 快速幂算法:模幂运算是一种高效的算法,用于快速计算大数的幂次方并对模数取余。通过使用模幂运算,可以避免直接计算大数的幂次方,从而减少计算时间和空间复杂度。
  2. RSA公钥密码系统:在RSA公钥密码系统中,模幂运算被用于实现加密和解密操作。具体来说,加密过程中使用公钥对消息进行加密,即计算 c^e % n;解密过程中使用私钥对密文进行解密,即计算 c^d % n
  3. 离散对数问题:模幂运算与离散对数问题密切相关。在求解离散对数问题时,可以使用模幂运算来高效地计算幂次方并对模数取余,从而加速求解过程。

解得 m=904332399012

crypto6

打开后为乱码 另存为txt

题目:

密文:
U2FsdGVkX19mGsGlfI3nciNVpWZZRqZO2PYjJ1ZQuRqoiknyHSWeQv8ol0uRZP94
MqeD2xz+
密钥:
加密方式名称

Rabbit加密

特点:Rabbit加密开头部分通常为U2FsdGVkX1 (AES、DES、RC4、Rabbit、Triple DES、3DES 这些算法都可以引入密钥,密文特征与Base64类似,明显区别是秘文里+比较多,并且经常有/)

工具:

在线Rabbit加密 | Rabbit解密- 在线工具

flag{a8db1d82db78ed452ba0882fb9554fc9}

crypto7

Ook!解码

Ook是一种简单的二进制编码方式,通常用于无线通信系统。它通过将二进制数据以“000”、“001”、“010”、“011”、“100”、“101”、“110”和“111”的形式表示,从而将二进制数据以一系列的“Ook”码进行编码。

解码Ook编码的原理是将这些编码还原为二进制数据。具体的解码步骤取决于所使用的Ook编码方案。一般来说,解码器会根据Ook编码的规则,将每个“Ook”码还原为相应的二进制位,并将这些位组合成原始的二进制数据。

在计算机科学中,Ook解码算法通常采用查表法或状态机等实现方式。查表法是一种简单快速的方法,通过预先建立一个包含所有可能的Ook码和对应的二进制位的映射表,解码器可以直接查表得到相应的二进制位。状态机方法则通过定义一组状态和状态转移规则,根据输入的Ook码序列逐步转移状态,最终得到解码后的二进制数据。

需要注意的是,不同的Ook编码方案可能具有不同的编码规则和解码算法。因此,在实际应用中,需要根据所使用的Ook编码方案选择合适的解码算法,以确保正确还原原始的二进制数据。

工具Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]

crypto8

Brainfuck

Brainfuck是一种极小化的计算机语言,按照"Turing complete(完整图灵机)"思想设计的语言,它的主 要设计思路是:用最小的概念实现一种“简单的语言。

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

crypto9

压缩包加密了

尝试用010查看 但发现只读无法修改

只能爆破密码

密码为4132

解压得到以未知文件

根据压缩包名字serpent推测用serpent解密

Serpent加密

Serpent是一种对称加密算法,被设计用于替代DES(Data Encryption Standard)算法。与DES相比,Serpent算法具有更强的安全性,因为它采用了更复杂的加密技术和更多的密钥选项。

Serpent算法的设计目标是提供比DES更高的安全性,同时保持与DES相似的性能。它使用了一个32轮的替换-置换网络,输入和输出均为128位的数据块。Serpent算法还使用了多个S-盒(Substitution box)来实现加密过程,这些S-盒可以实现不同的加密操作,从而增加了算法的复杂性和安全性。

在Serpent算法中,密钥的长度可以是128位、192位或256位,这比DES算法的56位密钥长度更长,提供了更好的安全性。Serpent算法还采用了线性变换和混淆技术,以确保加密过程的安全性。

总的来说,Serpent算法是一种相对较新的对称加密算法,被设计用于替代DES算法。它具有更高的安全性和更强的加密技术,可以用于保护敏感数据的机密性和完整性。

crypto10

Quoted-printable

我们在做接收邮件时,有些邮件的Content-Transfer-Encoding类型为quoted-printable

Quoted-printable 可译为“可打印字符引用编码”、“使用可打印字符的编码”,邮件接收时会显示乱码

它是多用途互联网邮件扩展(MIME) 一种实现方式。其中MIME是一个互联网标准,它扩展了电子邮件标准,致力于使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。目前http协议中,很多采用MIME框架!quoted-printable 就是说用一些可打印常用字符,表示一个字节(8位)中所有非打印字符方法!

工具:Quoted-Printable编码解码在线转换工具-ME2在线工具

crypto11

a8db1d82db78ed452ba0882fb9554fc(31 位)

MD5加密

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

MD5编码是由数字与字母组成,因此看到位数以及字母组成形式的字符可以迅速判断可能是MD5编码。

目前看到了字母和数字的密文 可能是base/MD5/Rabbit加密等

随便补一位

crypto0

凯撒密码

凯撒密码就是一种字母之间以设置好的偏移量进行偏移的加密方式

解码关键:判断偏移量

(特殊变异凯撒 eg:

题目:

gmbh{ifmmp_dug}

推测是凯撒密码

gmbh对应flag

g与f相差一位

crypto12

题目:

uozt{Zgyzhv_xlwv_uiln_xguhsld}

埃特巴什

简单介绍一下:埃特巴什码(Atbash Cipher)其实可以视为下面要介绍的简单替换密码的特例,其原理为:它使用字母表中的最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。在罗马字母表中,它是这样出现的:

明文:A B C D  E F G H  I  J K  L M N O P Q R S T  U V W X Y Z

密文:Z Y X W V U T  S R Q P O N M L K  J  I  H G F E  D C B A 

uozt对应flag,u-f,o-l,z-a,t-g,符合埃特巴什码规则。

a对应要大写A

crypto13

base家族

用python脚本暴力破解base家族

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

base64偏移

题目: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

为二进制

转为十六进制   二进制与十六进制互转 - 在线工具 (toolhelper.cn)

再转字符   16进制转换,16进制转换文本字符串,在线16进制转换 | 在线工具 (sojson.com)

再hex解码 

得到   3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG

原以为是base64解码但无果

根据提示

flag"使用base64加密后的字符串是 ZmxhZw==
前面的ZmxhZ不管flag后面是什么都不会改变。
我们对比一下前四个字符,"Zmxh"和"3EP/"在base64表中查一下,Z和3差了30,m和E差了30。

将3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG 在ascii码中向后减30

s= '3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG'
t = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
l=""
for i in s:
    l += t[(t.index(i)-30)%64]

if len(l)%4!=0:
    l=l+"="*(4-(len(l)%4))
print(l)

萌新_密码5

题目:

由田中 由田井 羊夫 由田人 由中人 羊羊 由由王 由田中 由由大 由田工 由由由 由由羊 由中大

当铺密码

该加密算法是根据当前汉字有多少笔画出头,对应的明文就是数字几。

解得为102 108 97 103 123 99 116 102 115 104 111 119 125

十进制解码

贝斯多少呢

base62

题目:

8nCDq36gzGn8hf4M2HJUsn4aYcYRBSJwj4aE0hbgpzHb4aHcH1zzC9C3IL

base64解码失败且不含=+/

考虑base62

直接解码不行

考虑明文分段(在Base62编码中,明文分段前不能解码的原因主要是因为Base62编码是一种将任意长度的二进制数据转换为特定长度的十六进制数据的编码方式。如果原始的明文长度超过了Base62编码所能表示的范围,或者明文中包含非法字符,那么直接进行解码将会失败或产生错误的结果。)

具体分段长度要自己尝试

所以分为

8nCDq36gzGn

8hf4M2HJUsn

4aYcYRBSJwj 

4aE0hbgpzHb

4aHcH1zzC9C

3IL

得到

flag{6a5  eb2_i5_u  5ua11y_u  5ed_f0r_  5h0rt_ur  1}

拼在一起

find the table

审查元素与元素周期表加密

9 57 64 8 39 8 92 3 19 99 102 74 

对应

flagdoyoulikesnow

flag{doyoulikesnow}

(rsa篇请看作者更新的另一篇文章)

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值