极客大挑战 2021
By Harry0709 Equinox
Matrix - 01 战队
Misc
In the Air
在会场打开手机WiFi就可以得到flag 【 救 命 我 手 机 要 没 电 了 】
easysend
按照对应操作完成即可得到 flag
今天有被破防吗?
经过对 txt 里的数据分析可以得到一张图片 :
经过非常非常仔细的观察后,可以发现上面有部分字母,我们通过 QQ 的截图进行拼凑。 ( QQ 打 钱 )
就可以得到 flag
注:
可以通过 Kali 带的拼图功能完成,需要安装相应的库,相关链接 CTF~ImageMagick+gaps=自动拼图-CSDN博客
【 要 不 是 我 的 Kali 装 不 上 库 ,而 且 我 忘 记 带 鼠 标 了 ,谁 会 用 QQ 啊 ( b u s h i )】
easycreat
我们根据hint要求部署一个合约,到网上找相应教程进行对应操作就可以了,学习链接:
https://blog.csdn.net/chyabc123456hh/article/details/106950687?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-5.no_search_link&spm=1001.2101.3001.4242.4
这是什么命令
我们打开题目发现下面有一行 Linux 下的指令我们来简单分析一下:
首先题目中显示 cat flag.png
这个的意思是打开flag.png
,接下来的连续两个Base64
应该是对这个图片进行两次的Base 64
加密,以|
进行分割,之后以一个tac
对字符进行编号,sort -k 2
则是对第二列的值进行排序,之后得到了一个flag.txt。
之后以一个rm -f
删除了flag.png
,并用一个nohub php -S
开启一个本地的2333端口,将这个txt
挂载在 /dev/null
这个端口上。
说实话挺好玩的,不是吗?
这个题目拿到手后是一个加密word
文档,根据压缩包的注释我们知道有一个8位长度的密码,但是我们不管他,直接爆破(网站:https://rixler.password-find.com/?utm_source=WPRM&utm_medium=IDS_TEXT_STRONG&utm_campaign=rixler
)冲它就完事了。之后拿到手的是一个有大片空白的文档 :
看到一大片空白,我们不难想到SNOW
隐写,那么我们可以通过SNOW.EXE
直接对其进行解密。
PANDORA PARADOXXX
有一说一这个题目挺烦人的,一共对压缩包进行了 4 层加密,第一层是一个伪加密,第二层是一个 6 位字母密码,利用字典可以跑出来,第三层是一个 6 位的数字密码,同样利用字典可以跑出来,最后一层是一个字母密码再次爆破就可以得到Flag
。
SAG Character
又是一个费眼睛的题目~~( 快 暴 打 S R )~~,最开始得到这张图,与MC
有关,于是我首先想到的是导入自定义皮肤的功能,将图片导入发现不行,于是开始转向内部方块带有这个符号的,在附魔台我们可以发现相同的符号,于是到百度去找对应翻译语言。
在经过翻译之后就可以得到下面的句子 :
1 |
|
每日一溜
用wireshark
打开,发现有很多数据包,我们通过ctrl+f
查找常用文件的后缀名,发现png
格式下有一张图片,我们以原始数据保存,用010去掉数据包头尾,头删到‰之前,仅保留png的数据,打开得到一张图片,猜测又是一个图片隐写,binwalk
先分析一下,没有东西,拖入010Editor
中发现存在rar
的标识,于是我们转换图片为rar
,发现里面后两个Base64
编码的数据,第一个按标准的Base 64
求解发现无法得到对应的数据( 解出来乱码 ),但是在第二个Base 64
上发现解出来像是一个Base 64
的码表,因此我们猜测第一个是一个换表的Base 64
,按照解出来的码表对第一个Base 64
进行解密便可以得到对应的Flag
。
Re
Re0
打开ida搜索字符串就可以得到flag
调试
打开Ida,对里面程序进行分析,在start
函数里我们发现 v3 赋值给 v5出现了问题,我们跳转到对应的区域,我们先分析 v4 赋值的过程,可以看到有一个跳转指令,我们尝试着改成 jz ,再运行看看。
可以看到程序已经发生了改变:
这个时候我们经过动调可以,观察发现这个程序是一个自解密程序,我们再Linux下进行调试就可以得到flag。
如下图:
刘壮桌面美化大师
直接在字符串里面查找就可以得到 flag 了
买Activity
( 又 是 一 个 安 卓 逆 向 ,我 要 学 废 了 )
我们借用 jeb 来进行安卓的逆向,打开对应 apk 文件,在茫茫包中发现 Decode 的身影,此时的心难以言表。
观察一下发现是不是少了一个最重要的 v0 ,v0 的数据是什么呢?在安卓的 so 文件里面我们可以看到有两个字符串,根据 stringfromnative
我们猜测这两个字符串便是传给 v0 的值。
有了数据,也有了解码的方式,我们编写一个脚本来帮助我们解题:
1 |
|
分别的运行结果是 ['S', 'C', 'T', '1', '_', 'c', '1', 'i', 'y', 'i', '_', '3', 'l', 'y', 'E', 'p', 'r', 'e', '!']
['Y', '{', 'h', 's', '4', 't', 'V', 't', '_', 'S', 'R', 'a', '1', '_', 'x', '0', 't', 'd', '}']
我们通过简易的分析可以发现这个是一个栅栏加密,长度为 2,我们将这两个数据放入在线网站进行解密就可以得到我们需要的 flag 了。
注:
与某位SR的交流过程
我的方法不是很推荐,建议有兴趣的可以去了解一下 ( 其 他 方 法 我 不 会 呀 )
easypyc
拿到程序一看,图标有点像一个 Python 打包生成的一个程序 :
看了看名字有一个 pyc 那肯定就是 Python 打包的一个程序了。那么我们接下要做的便是对这个 exe 进行拆分得到 pyc 文件
拆分学习链接:Pyinstaller打包的exe之一键反编译py脚本与防反编译
在拆分后我们可以得到一个不带后缀的一个 easypyc 文件,我们补上后缀,到对应网站在线反编译 pyc 成 py 可以得到如下的 Python 代码:
1 |
|
我们进行简单的修改来测试数据内容以及结构(以下是我的部分测试):
1 |
|
我写的有点乱,毕竟我的 VSCode 调试不起只能这个样子来伪调试一下,我们简易的分析可以知道这个程序是在 Rc4 的基础上多了一部分的数组操作。我们根据对应操作进行逆向回去( C + + 代码如下 ) :
1 |
|
运行代码之后我们便可以得到对应的 flag。
new_language
我们根据提示拿到对应题目的信息可以知道这个是一个 C# 的反编译,我们安装对应程序 dnSpy 将程序拖入便可以得到对应的反编译代码,我们找到对应的主函数进行分析 :
通过简单的分析,我们可以看到程序对输入的字符转换成 int 类型,并通过异或和与运算进行了乱序的排列并与 arry2 里面的数据进行比较,我们逆向回去的的话需要将原来的数据所在的位置找到,再对其进行分析代码如下 :
1 |
|
运行程序便可以得到对应的 flag 。
珍惜生命
我们拿到手的是一份 pyc 我们对其进行反编译成 py :
1 |
|
经过简单的分析我们看到 key(长度为 8 )是这个题目的解题关键,我们看到 try 函数里都是对 key 的每一位进行运算后的数据进行拼接,最后的数据与 “Syclover” 进行比较,如果相同则继续执行。在最后一个的 for i in range(46):
便是对输入的 S 与 key 一起异或得到的 flag 的每一位脚本如下:
解 key 我们采用 z3-solver 来进行求解:
1 |
|
可以得到 key 的值为 :
接下来我们对 flag 进行求解 :
1 |
|
运行上述脚本便可以得到 flag
RE 1
这个题目感觉就十分的简单了,整体上就是一个 Base64 加上了一个异或。
我们利用Lazy IDA
提取对应data
里的数据 :
然后简单的写一个脚本进行解密 :
1 |
|
之后我们将得到的字符串用 Python
带的Base64
库直接decode
就可以得到 Flag 。
Win 32
和RE 1 一样直接是一个Base 64
的题目,这个题目被修改过,我们可以直接在Strings
里提取到Base 64
加密后的数据 :
标准 Base64
加密过程 :
于是我们直接拿着那串数据进行Base 64
解码就可以得到 Flag。
Brute_force
这个题目又是一个新语言( GO 语言 )的逆向题目,我们还是将程序拖入IDA
中进行分析,其中有一个非常显眼的 main_main
,可以看到如下界面 :
乍一看不知道程序在干些什么,但是我们细看可以发现在函数里面有着MD5
的提示,与此同时在main_main
上面的 if 语句里面好像有一个 24 ,此时我们猜测这个 24 便是我们输入Flag
的长度。但是如果这个时候你开始动调是不是会发现有一个问题,在你启动IDA
动态调试后的一瞬间,程序闪了一下就结束了,即使你打了断点也还是闪了一下就结束了,你也可以试试看拿cmd
打开,你会发现有一行提示:
这个时候我们需要打开IDA
里面的Debugger
在里面找到对应的 Process options
,并打开下面的Use source-level debugging
(点一下就可以了,点完后没有什么反应的):
我们在 Process options
里对应位置填入我们的 24 位测试数据:
之后我们在函数main_encode
和main_unnamed630
里打上断点开始调试,观察里面的数据变化过程,你会发现在栈里多出来一个数据 :
仔细观察会发现这一串数据在某个位置可以分成两个部分,这两个部分是一样的,我们提出其中一半进行MD5
解密你会发现这个加密后的数据是我们输入的ABCD
我们大概就可以猜测出这个程序是将我们的输入数据进行拆分,每 4 个一组,一共 24 个数据,那么刚刚好 6 组,也验证了我们猜测 Flag
的长度是 24 ,我们继续调试,之后可以发现在内存里是把我们Flag
已经提前写入了 :
我们需要的就是动态调试得到对应MD5
的顺序,然后再对其分别解密,脚本如下 :
1 |
|
可以分别解出来对应的数据为3_sl r0g@ 7h3_ rm_1 g0_p gned
再根据动调出的MD5
进行排序,可以得到输入为7h3_g0_pr0g@rm_13_slgned
,但是这个就是Flag
吗显然不是,我们再观察main_main
,切换到汇编层的结构图 :
这个时候我们加上对应格式便是我们所要的Flag
WASM
整个题目就是找不到工具硬开生坚果~~(WABT就是下载不了)~~,在网上找了半天终于发现有一个易语言写的提取 .o 文件的工具了(太难了)。
题目整体上就是一个异或(题目提示)我们只需要找到对应位置的是数据进行异或处理就可以了。
解题脚本如下 :(爆破YYDS)
1 |
|
猜拳
这个题目又是一个Win 32
太难了,没有开发经验的菜鸡 Re 手选择再次硬着头皮去看了看,一看符号表还被去掉了,直接给搞破防了…
程序有一个防调试,需要自己set ip
改流程。
这个就是反调试的一个函数,用于表示当前是否处于反调试的状态,正常运行时,该函数返回FALSE
,打开调试运行时,该函数返回TRUE
。
将eax
的比较值改为 1 ,那么就可以跳过反调试了。
跳过这个反调试时你会发现,在下面的某处汇编出现了一个神奇的Congratulations
,我们对其转换伪代码可以看到是一个switch()
函数,通过对题目分析可以知道这个是一个自解密程序,在你按下按钮的时候经过一个switch()
函数进行对输入处理,完成不同的消息处理,但是我们却永远赢不了 SR ( 可恶的 SR 竟然后出 ),这是因为程序会对我们的输入进行操作更改流程也就是这个switch()
函数所完成的功能,因而我们只需要更改对应的流程,到我们的case :303
就可以到达Congratulation
处,进而拿到对应Flag
。
have_a_tea
三点了,饮茶先啦,看到题目一猜就是一个Tea
加密,反手再一猜又是一个魔改题目,同样的还是先拿去分析一下,是一个 64 位的无壳程序,直接拖入 IDA 64
进行分析。我们可以直接看到有一个fork
,因而怀疑子进程会有些东西 :
在动态调试时可以看到程序的入口(main)与我们的标准elf文件的格式不同,下面有许多的偏移地址,需要我们利用U
和C
进行修复,之后我们可以看到在第三个调用函数处便是我们想要的主函数,我们进入该函数可以看到fork
创建的子进程的过程,也就是题目hint中给的子进程有什么东西,因而我们进入子进程进行观察 :
可以明先看到一个去了符号表的函数和下面的比较,那么v4里的数据就是在加密后得到的,我们进入加密函数进行分析 :
进入每一个函数分析一下可以知道第一个enc1
是对输入的数据进行处理,将数据进行每 4 个一组进行组合成一个 16 进制的数据,(比如 数据是 61 62 63 64
,那么转换后的数据是0x64636261
),之后的enc2
是用于改变v17
,v18
值的。
一定分析之后可以知道这个题是在Tea
加密的基础上加了一个异或,对数据先在Tea
加密前对其异或后再进行Tea
加密。
之中v1
9恰好是长度为 4 的一串 16 进制数据,我们同时也发现在每次Tea
加密时都会将v19
传入,对此我们可以擦测出v19
就是key
,同时我们分析也可以知道异或的值并不是一成不变的,在每次加密之后的新数就会成为下一次异或的数据,也就是比较函数处的加密后的值,此时我们就可以编写脚本进行求解。
1 |
|
PWN
Check in
题目拖进 IDA 可以明显的发现这个是一个随机数运算生成器,利用随机数生成运算的两个数字和运算符号,我们就只需要利用getline
来捕获对应的数字和运算符号,再通过evall
函数进行运算就可以得到对应的shell
,脚本如下 :
1 |
|
恋爱小游戏
题目中附带有源码,经过分析可得不论输入什么都可以拿到shell,我们连上主机查看目录
可以看到有一个flag文件,我们利用 cat flag.txt
打开便可以得到 flag
恋爱小游戏 2.0
拿到程序后我们拿ExeinfoPe.exe
进行分析可以知道这个是一个64位的.elf
文件,我们拖入IDA反汇编进行查看:
一看便会发现你输入好像没有任何的用处,但是我们可以打开栈表查看一下数据的存储结构:
可以看出来buf与s2的数据结构是捆绑在一个栈上面的,由此我们可以联想到栈溢出的攻击方式,我们通过输入超过 24 位长度的buf
来占用 s2 的存储栈,进而实现栈溢出的攻击方式。
我们编写一个 Exp 进行对我们的输入输出进行控制,万万不可直接 nc ,在Linux下的输入会被判回车(我栽在了这个坑不压于 3 个小时),直接 nc 会出现你的输入在Linux下多加入了一个回车:
这个时候就体现 Exp 的好处在于可以传入数据而不使用回车( 千万别用 sendline ,sendline是以回车(\n)结尾的 ),我们写一下Exp,如下:
1 |
|
拿到Linux下终端打开于是就可以得到 flag。
Web
Dark
URL 后缀是 .onion ,我们利用洋葱路由,访问该URL
查看源码,得到flag
welcome2021
通过访问页面查看源码需要用 WELCOME 请求来请求此网页,但是我只了解过get和post请求方式,但是可以利用burpsuite 抓包,GET 改 WELCOME , 得到 f1111aaaggg9.php
,继续用bp更改,在 repeater 板块得到 flag
babysql
通过简单的post注入语句 ' or 1=1#
,得到 uname=admin&pwd=123456 ,输入并登录,将报文保存,利用 sqlmap 猜解 python sqlmap.py “路径” --dbs 看到有个flag库
python sqlmap.py “路径” -D flag --tables 看到有个fllag表 python sqlmap.py “路径” -T fllag -D flag --columns 看到有个 flllllg 字段 python sqlmap.py “路径” --dump -C flllllg -T fllag -D flag 得到 flag
蜜雪冰城甜蜜蜜
通过改一改前端点一点就可以得到 flag 啦
babyphp
我们进入网页查看源代码会发现有一个robots
:
利用仅有的爬虫知识还是知道这个的我们进入robots.txt
界面 :
之后我们利用hint
给的链接进行学习如何读取根目录文件,我们构造对应的伪协议,进行读取就可以得到Flag
雷克雅未克
在bp抓包结果中插入第一行,并将经纬度改为第二行,再发包就可以得到flag
我们会得到以下东西 :
直接复制发送到控制台就可以得到对应的Flag
validation
不会验证码跳过的某个 Web 手选择了直接输出 1000 次验证码拿到 Flag 。( 太 难 了 )
Crypto
三个也可以
附件:
1 |
|
分析:
n同样可以是三个大素数的乘积。题目中给到我们的是n和c,getPrime(100)意思是获取100bits 内的素数。分解第一串数字的质因数得到
821285845529489288911031313917 * 967244547191154261539598250343 * 1005682191548299165290460437397
编出解密程序:
得到的数转16进制转字符,SYC{now_you_solve_it}
Classical Music
附件:
1 |
|
题目:ineinembaechleinhelledaschossinfrohereil
分析:
本精德一眼看出题目是德语,查询得到舒伯特名曲《鳟鱼》。维吉尼亚密码解密(题目就是密钥)得到
1 |
|
Superposition under the starry sky
题目:PRNG(伪随机数)
附件:
1 |
|
分析:
同余线性方程组求解。线性同余方法(LCG)是一种产生伪随机数的方法。
公式2:a=((Xn+2-Xn+1)(Xn+1-Xn)-1)%n
证明过程:
再用a,output序列,n求出b
根据output序列第一个反推出初始seed
1 |
|
附:python中byte 与 int 的转换(示例):
1 |
|
Radom
附件:
1 |
|
分析:
1)在求解时走了很多弯路,但还是附上笔记:
根据队友的指导,在Pychome中下载了Z3包,帮助我求解异或位移方程。z3是一种有效的解方程工具。
学习z3库
在Python中使用Z3模块,我们的所求结果一般有以下几种数据类型:
Int #整型
Bool #布尔型
Array #数组
BitVec ( ‘a’,8 ) #char型
其中BitVec可以是特定大小的数据类型,不一定是8,例如C语言中的int型可以用BitVec(‘a’,32)表示
设未知数的方法 :
可以使用 ‘Int’ , ‘Real’ , ‘BitVec’ 等声明一个整数或实数变量,也可以申明一个变量数组
例如:x = Int(‘x’) #这个int不是c/c++中的那个,而仅仅只代表整数
1 |
|
初始化序列:
1 |
|
基本使用语法
Solver()
Solver()命令会创建一个通用求解器,创建后我们可以添加我们的约束条件,进行下一步的求解
add()
add()命令用来添加约束条件,通常在solver()命令之后,添加的约束条件通常是一个逻辑等式
check()
该函数通常用来判断在添加完约束条件后,来检测解的情况,有解的时候会回显sat,无解的时候会回显unsat
model()
在存在解的时候,该函数会将每个限制条件所对应的解集的交集,进而得出正解。
常用求解步骤:
创建约束求解器
1 |
|
添加约束条件(这一步是z3求解的关键)
1 |
|
判断解是否存在
1 |
|
求解
1 |
|
加密过程的实质只有两步:
1)产生随机二进制字符串rand。具体做法是:
1.获得l。
将flag字符串转换成long。这里插一个python中byte 与 int 的转换(示例):
1 |
|
再由十进制转二进制,计算二进制数的长度,把他赋给l。
然后进行选择操作:
1 |
|
从后面可以看到,l = 10。
2.产生rand字符串。
for循环重复l次操作:
产生32位(也就是整型,<=2^32-1)的随机数pro,把它添加到Rand数组中。然后,把pro转换为二进制字符串,对其进行zfill(32)操作:
原字符串右对齐,前面填充0,得到32位长度的字符串。
添加到空字符串rand后面。
所以,最后得到的Rand数组有10个元素,而rand字符串就是长度为10*32=320的二进制字符串。
2)加密。具体做法是:
**1.对Rand数组中的每个元素进行change函数的变换。**变换过程是:
1 |
|
最终得到的就是题目下方的Rand数组,以及其中的10个数。这个数组对解题非常关键!
**2.加密。**将flag字符串转换成long,再由十进制转二进制。进行zfill操作(还记得是怎么做的吗?)得到和rand的长度相等(=320)的二进制字符串s。这样,含有flag的字符串s就和含有随机数的字符串rand长度相等了。
对字符串中相同位置(s[i],rand[i])的二进制数字进行异或^运算,所得到的二进制数字添加到空字符串c的后面,所得到的c就是密文了。
这张图是上面文字的流程图版,结合起来就能理解它的加密原理了。
现在手头有的条件有三个:加密原理、含有随机数(密钥)的数组Rand、密文c
理解了加密原理,解密的思路就很清晰了:
1)既然知道Rand中的随机数变换法则和最终结果,那就可以通过解方程来反求随机数pro。将pro转换为二进制,zfill操作后依次连接起来,就可以得到二进制字符串rand。又根据异或的特殊性质:
a^b^b = a
c是由rand和s异或得到的,那么再把c和rand异或就能得到s。有了s,自然就有flag了。
遇到问题
我编写了求解pro的方程:
1 |
|
代入第一个数据389902299,成功得到第一个pro:[number = 587391287]
但代入第二个、第三个……最后一个数据,全都无解!
2)正确的解法
**引例:**shift = 3,length = 8
1 |
|
观察结果,不难发现,result的前shift位和value的前shift位是相同的。这是因为异或时shifted的前shift位全部是0。因此我们能得到mask满足前shift位和value相同,后面全为0
该怎么得到这个数呢?根据逻辑运算符的法则,当result与一个前shift位为1,后面全为0的数做&按位与运算(这个数记作p),就能得到mask(前提是二者长度相等)。其中p是由0xffffffff<<(length-shift)来的
1 |
|
有了value的前shift位数mask,根据移位规则,就能得到shifted的前2 * shift位(记作mask2),又由异或规则,value的前2*shift位value1就等于
value1 = mask2^result
重复循环知道n次shift的值>=length,此时得到的数就是原来的值value了!
这张图是上面文字的形象表示,结合起来就能理解解密过程了
根据相同的道理,可以推导出左移时候的情况。结合在一起,就能编写出最终的解密代码:
1 |
|
最终得到的x用long_to_bytes,得到SYC{1s-rand0m-or-not-That-i5-a-qu3stion}
松本眞、西村拓士,我是你们的破壁人!!!
step by step
附件:
1 |
|
分析:
1)提示分析:
题目中提供了提示连接。在链接文章中,作者给出了二次同余方程的解法,来解决两种方程:
$$
x^2≡n(mod p)
$$
$$
x^2≡n(mod p^n)
$$
2)附件分析:
加密过程其实就是对一串二进制字符进行变换。变换的法则是:
$$
((3^(i+2x)modn)x^2)modn=c
$$
其中i=0或1,是原文;n=pq(p,q为素数);x是随机数,且满足与n互质;c是密文。从附件也可以看出,有167个密文元素,就是说原文的长度是167。
3)综合分析及解题:
解题过程从两方面开展。
1.二次同余方程的求解、解数
学习资源:
1.信息安全数学基础(上海交大,b站课程)
2.计算勒让德符号(legendre symbol)代码实现(含运行结果)_橙子的坚果奶盖的博客-CSDN博客(https://blog.csdn.net/weixin_46447549/article/details/114372252)
3.勒让德符号和雅可比符号_Kagamigawa Noelle-CSDN博客_雅可比符号(https://blog.csdn.net/happy_single/article/details/106125155)
4.二次同余式解数的判定(https://zhidao.baidu.com/question/509006719.html)
5.百度百科:勒让德符号、雅可比符号
对于方程
$$
x^2≡y(modn),n=p*q
$$
其等价于方程组
$$
x^2≡y(modp)
$$
$$
x^2≡y(modq)
$$
对判定方程是否有解、有多少个解的问题,统称为方程的解数。
对模数为素数的二次同余方程解数的判定,通常使用Legendre(勒让德)符号。
勒让德符号有其快速计算方法。
我编写了大整数求勒让德符号的程序(python):
1 |
|
雅可比符号是对勒让德符号的扩展。雅可比符号能解决模数n是合数的情况。对于题目的n=p*q,这是一个很大的帮助。
雅可比符号是这样定义的:
$$
J p (x) =
+1,x ∈ QR p
$$
$$
−1,x / ∈ QR p .
$$
2.学习GM(Goldwasser-Micali)加密算法
https://www.csa.iisc.ac.in/~arpita/Cryptography15/CT7.pdf
这篇论文详细解释了GM加密算法的理论基础、加密解密算法以及算法复杂度的证明。
论文中对判断模n二次剩余有如下定理:
设y满足
$$
y=yq§
$$
$$
y=yp§
$$
有唯一的解(也即中国剩余定理),则y是模N的二次剩余当且仅当yp是p的二次剩余且yq是q的二次剩余。
证明从略。
算法1:产生N
算法2:加密
算法3:解密
编出解密程序(省去赋值):
1 |
|
结果:b’SYC{run_to_the_light}’
baby house of rsa
0 super baby
给出e,n,c,d,求m.
代码:(省去赋值)
1 |
|
结果:b’8848’
1 very baby
已知n=a1* a2 *a3 *a4,求m
代码(省去赋值):
1 |
|
结果:b’114514’
2 beyond baby
n=a1^4,对应的phi=a1^4-a1^3
代码:
1 |
|
结果:b’226’
3 infinity baby
给出e,n,c,p,q,求m
代码:
1 |
|
结果:b’1919810’
连起来得到flag.zip密钥。SYC{RSA_is_really_easy}
easy house of Classic Crypto
附件:
五段密文,以不同形式加密。
T0s=
base64编码,解码得到“OK”
4e6577
十六进制转文本,解码得到“New”
-.-- — …-
摩尔斯密码,解密得到“you”
ABABAABBABABBBABABBA
培根密码,解密得到“know”
jung vf pynffvp pelcgb
凯撒密码,偏移量13,解密得到“what is classic crypto”
连起来得到flag.zip密钥。
SYC{Meaningless_crypto}