2023.10.24 SCNU SoCoding Puzzle
注意,本文章所有题目版权属于SCNU SoCoding协会
题目来源于 华南师范大学 SoCoding 软件协会 2023.10.24 的1024 Puzzle活动,现已结束
First of All
先公布一下成果哈哈哈
还算可以吧,接下来就是每一题啦
做题过程&部分题解
Problem A. Cpp
题面
1 |
|
虽然叫Cpp,但其实没有Cpp的经验也是可以做的
由 char 可知,flag为 ‘S’, ‘o’, ‘C’, ‘o’, ‘d’, ‘i’, ‘n’, ‘g’ 的Ascii编码,见下表
该图的 83 对应字符应为 S
由Tip 1,flag = 83 + 111 + 67 + 111 + 100 +105 + 110 + 103 = 790
得解 flag = 790
Problem B. in and out
题面:
1 | &!Latch,SR输入,XY互补输出, |
- 通过率仅有 16/389 的害人不浅的锁存器
- 由&!可知,该图属于与非锁存器,查询真值表
并由 “XY互补输出” 的提示可知
1 | X1Y1X2Y2X3Y3X4Y4 = 1101001 |
由 flag_is_7 的提示与 X1Y1X2Y2X3Y3X4Y4 的值,易知需要进行 二进制转七进制 的转换
得解:flag = 210
Problem D. fence
题面:
1 | 你能一次性跳过两道栅栏吗? =Q7imjwHcG1D1FzTwHcnPE7CnWy3vVk2pW9WsElHpmgmpHTXoWhGpm=fkIVMUXxMIMxXgMUX1TVTJK5aRURZ9Y5dcYZZBcxZcbJdtK4a1Z9d 题目提示:flag内容是纯数字 |
这个等号让我很难不想到 Base64 呢🤔
于是按照栅栏密码的规则进行排列
1
2=Q7imjwHcG1D1FzTwHcnPE7CnWy3vVk2pW9WsElHpmgmpHTXoWhGpm
=fkIVMUXxMIMxXgMUX1TVTJK5aRURZ9Y5dcYZZBcxZcbJdtK4a1Z9d会得到这样的结果
1
==Qf7kiImVjMwUHXcxGM1IDM1xFXzgTMwUHXc1nTPVET7JCKn5WayR3UvRVZk92Yp5Wd9cWYsZEZlBHcpxmZgcmbpJHdTtXKo4Wah1GZp9md
但通常 Base64 转换后,等号应在最后,那么我们将其从前往后写,便得到这样一串
1
dm9pZG1haW4oKXtTdHJpbmcgZmxpcHBlZEZsYWc9dW5pY29kZVRvU3RyaW5nKCJ7TEVPTn1cXHUwMTgzXFx1MDI1MGxcXHUwMjVmIik7fQ==
经过 Base64 解密后,得到了一串看起来像是代码的伪代码
1
voidmain(){String flippedFlag=unicodeToString("{LEON}\\u0183\\u0250l\\u025f");}
看到这个u打头,好!果断认定为Unicode编码,进行 Unicode 转换后
进行重新排序就会得到这么个东西
1
{LEON}ƃɐlɟ
好像 flag 倒过来了捏,转一转吧!
LEON倒过来了,什么意思…
百度一下,好吧,我宣布二次元获胜
得解:flag = 11037
Problem E. 是黑芙还是白芙
题面:
经典的图片隐写题
由 “黑芙”,“白芙” 的题面,可知要对图像进行处理
拿出祖传的 Stegsolve 来进行处理,可得
不是,这二维码也太小了吧,将图片放大后再进行相同处理,可得
通过 草料 进行解码,可得
1
佛又曰:输迦啰栗苏摩阿啰数埵帝嚧诃菩他数罚输悉迦孕无嚧孕怛迦埵遮怛烁阿伊穆漫
佛曰嘛,这我熟!!!👻,利用 与佛论道 转换后
得解 flag = succ3ss
Problem F. Minecraft
题面:
Galaxy 已经整整 3600 秒没玩过 Minecraft 了!但他现在还得去出 1024 的题目,痛苦挣扎之后,他决定用麦块出一道题,所以他打开了他的 Java 1.16+
很明显这个 b 玩起游戏来就把题目忘得一干二净,最后只能是卡着 ddl 交了个不知道算什么东西的文件……
就这也想难倒我这个 Minecraft 老玩家?下载文件并解压后得到一个 .mca 文件
很容易知道这是Minecraft地图内的区块文件,或者也可以通过百度知道
跟据题面,下载Minecraft 1.16+ 的版本,并创建地图,并将 r.0.0.mca 用下载的文件覆盖
打开地图在四周查看就可以看见被覆盖的区块,讲台上有一本书
做一个最优解问题(我这么难的部分都解出来了你居然还在里面塞题 QwQ )
还算简单,暂且原谅你
最优解为 80 + 29 +27 = 136 ( 用时58s ) ,得解:flag = 136
Problem H. flag.py
题面:
这是一道寻找flag的题目,但出题者在设计它前绞尽脑汁,仍然灵感枯竭。为了赶DDL,出题者只好临时写了一个py脚本,选手只需 要输入正确的密钥,就能获得flag:
flag.py
- 哈!.py 这不专业对口了嘛😍
- 打开后提示说要输入Key,源代码都有了为什么不直接找呢
- 居然直接定义了一个全是字符的字符集…,连之前显示的都是通过索引一个一个排出来的,可恶,好狠的人
- 于是我一个个将它们 print 出来,并进行修改,得到了这么个代码
- 虽然还不能直接看见 flag ,但通过研究代码我们可以知道,我们需要的 Key 应该是 1145141919810(好臭的数…),重新打开并输入 Key ,我靠甚至不愿写一个停留显示…好吧,用 Pycharm 的IDE打开,再输入 Key
- 得解:flag = 0v0
Problem I. 咕咕
题面:
这里的图片实际上是超链接,但我还不会用 Markdown 写这个语法,在此将链接贴出
解压谜题包,得到两个文件
解压 咕咕.zip 却发现要密码!看来只能从 咕咕.png 下手了
Stegsolve 查看无果,好像只能用16进制打开来入手了
果然,在末尾找到了这个
1
zip's password:AK_1024_AC_AKCUP
很显然,这是压缩包的密码
输入
AK_1024_AC_AKCUP
来解压打开 flag.xlsx ,不用多说,单元格被锁定,且根据提示,我们新建一个 Sheet ,然后利用 Excel 文件的引用功能得到有内容的单元格
那我们就像这样做
啊哈!抓到你了!
得解:flag = Socoding_1024
Problem J. 宇宙讯息
题面:
1 | 宇宙中传来了一段讯息… |
好好好,你连 . 和 - 都不愿意打…
利用Word文档强大的替换功能,可以得到这样的一串摩斯密码
1
-.... --... -.... ----. --... ....- -.... ---.. --... ..... -.... ..--- ..--- . -.... ...-- -.... ..-. -.... -.. ..--- ..-. --... ----- --... ..--- -.... ----. --... -.... -.... .---- --... ....- -.... ..... -.... .---- -.... ...-- ....- ...-- -.... . --... ....-
经过翻译后得到
1
6769746875622e636f6d2f707269766174656163436e74
看到有数字和e之类的字母,我又想到了 Unicode 编码,于是进行分隔
1
67 69 74 68 75 62 2e 63 6f 6d 2f 70 72 69 76 61 74 65 61 63 43 6e 74
并对照 对照表 进行查询,得到一串网址,
是程序员都爱用的Github1
github.com/privateacCnt
进入网址,中间走了好多弯路我就跳过了,总之可以在 Labels 里面发现一个网址
1
https://github.com/privateacCnt/issue-tracker/files/13111671/Multi-part.Archive.Pack.zip
下载后解压该压缩包
这个 .z01 已经很明显知道是分卷压缩了,而且压缩包名 Multi-part.Archive.Pack 也作了明显的提示
更改文件名及后缀,解压可得一个 .psd 文件,好好好,又要我去下 PhotoShop …
好像左下角蒙版那有不一样的地方
但是PhotoShop怎么调我不会,反正捣鼓捣鼓就整出来了个这
得解:flag = y0u_did_it
Problem K. 洋葱
题面:
剥洋葱呗,看起来得有3层
下载压缩包,并尝试解压,可恶要密码!这就是第一层了吗,不过好像有提示
1
password: 63 32 39 6a 62 32 52 70 62 6d 63 3d
显然这又是 Unicode 编码…
Unicode 解码咯,解得
1
c29jb2Rpbmc=
干嘛…还套一层 Base64 是吧
还是用 Base64 进行解码,得
这是不是可以蒙出来得到一个 .exe (可执行文件),让我康康!
???要我反编译!???彳亍,咱迎难而上
这里我们使用 ghidra 进行反编译
不得不说这软件挺帅的创建一个项目,并使用 ghidra 的 CodeBroswer 功能来浏览源代码
浅浅地导入一下
使用右侧点击定位源代码的位置
根据提示 The flag is above me in source code. 的提示,浏览该代码所在位置上方的代码
熟悉的 Unicode 又出现了
1
0x48 0x65 0x6c 0x6c 0x 6f 0x2c 0x77 0x6f 0x72 0x6c 0x64 0x21
Unicode 解码叭,解得
1
Hello,world!
得解:flag = Hello,world!
结束语
至此,我的解题已经到此结束,虽然仍旧有两道题的遗憾,但也无妨,我的代码人生,从 Hello, world 开始,却不会以 Hello, world 结束
祝自己,1024,程序员节,快乐