注意,本文章所有题目版权属于SCNU SoCoding协会

题目来源于 华南师范大学 SoCoding 软件协会 2023.10.24 的1024 Puzzle活动,现已结束

因为挺喜欢网安的,所以CTF类的“游戏”自然要参与参与,水平不行剩两道题没做,不过还行吧,接下来就是些做题及思考过程

First of All

先公布一下成果哈哈哈

还算可以吧,接下来就是每一题啦

做题过程&部分题解

Problem A. Cpp

题面

1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
using namespace std;
int main()
{
char flag[] = { 'S','o','C','o','d','i','n','g' };
//Tip1: flag=S(flag),其中,S(n)是求和函数
//Tip2: flag是一串数字
}
  1. 虽然叫Cpp,但其实没有Cpp的经验也是可以做的

  2. 由 char 可知,flag为 ‘S’, ‘o’, ‘C’, ‘o’, ‘d’, ‘i’, ‘n’, ‘g’ 的Ascii编码,见下表

    图源51wenda

    该图的 83 对应字符应为 S

  3. 由Tip 1,flag = 83 + 111 + 67 + 111 + 100 +105 + 110 + 103 = 790

  4. 得解 flag = 790

Problem B. in and out

​ 题面:

1
2
&!Latch,SR输入,XY互补输出, 
flag_is_7:X1Y1X2Y2X3Y3X4Y4
  1. 通过率仅有 16/389 的害人不浅的锁存器
  2. 由&!可知,该图属于与非锁存器,查询真值表图源CSDN并由 “XY互补输出” 的提示可知
1
X1Y1X2Y2X3Y3X4Y4 = 1101001
  1. flag_is_7 的提示与 X1Y1X2Y2X3Y3X4Y4 的值,易知需要进行 二进制转七进制 的转换

    image-20231103210158311得解:flag = 210

Problem D. fence

​ 题面:

1
你能一次性跳过两道栅栏吗? =Q7imjwHcG1D1FzTwHcnPE7CnWy3vVk2pW9WsElHpmgmpHTXoWhGpm=fkIVMUXxMIMxXgMUX1TVTJK5aRURZ9Y5dcYZZBcxZcbJdtK4a1Z9d 题目提示:flag内容是纯数字
  1. 这个等号让我很难不想到 Base64 呢🤔

    1. 于是按照栅栏密码的规则进行排列

      1
      2
      =Q7imjwHcG1D1FzTwHcnPE7CnWy3vVk2pW9WsElHpmgmpHTXoWhGpm
      =fkIVMUXxMIMxXgMUX1TVTJK5aRURZ9Y5dcYZZBcxZcbJdtK4a1Z9d

      会得到这样的结果

      1
      ==Qf7kiImVjMwUHXcxGM1IDM1xFXzgTMwUHXc1nTPVET7JCKn5WayR3UvRVZk92Yp5Wd9cWYsZEZlBHcpxmZgcmbpJHdTtXKo4Wah1GZp9md
    2. 但通常 Base64 转换后,等号应在最后,那么我们将其从前往后写,便得到这样一串

      1
      dm9pZG1haW4oKXtTdHJpbmcgZmxpcHBlZEZsYWc9dW5pY29kZVRvU3RyaW5nKCJ7TEVPTn1cXHUwMTgzXFx1MDI1MGxcXHUwMjVmIik7fQ==
    3. 经过 Base64 解密后,得到了一串看起来像是代码的伪代码image-20231103205045361

      1
      voidmain(){String flippedFlag=unicodeToString("{LEON}\\u0183\\u0250l\\u025f");}
    4. 看到这个u打头,好!果断认定为Unicode编码,进行 Unicode 转换后image-20231103205225279

      进行重新排序就会得到这么个东西

      1
      {LEON}ƃɐlɟ
    5. 好像 flag 倒过来了捏,转一转吧!image-20231103205624212

      LEON倒过来了,什么意思…

    6. 百度一下,好吧,我宣布二次元获胜image-20231103205748011

    7. 得解:flag = 11037

Problem E. 是黑芙还是白芙

​ 题面:

  1. 经典的图片隐写题

  2. “黑芙”,“白芙” 的题面,可知要对图像进行处理

  3. 拿出祖传的 Stegsolve 来进行处理,可得image-20231103210537879

  4. 不是,这二维码也太小了吧,将图片放大后再进行相同处理,可得image-20231103210614586

  5. 通过 草料 进行解码,可得image-20231103210809626

    1
    佛又曰:输迦啰栗苏摩阿啰数埵帝嚧诃菩他数罚输悉迦孕无嚧孕怛迦埵遮怛烁阿伊穆漫
  6. 佛曰嘛,这我熟!!!👻,利用 与佛论道 转换后image-20231103211343249

  7. 得解 flag = succ3ss

Problem F. Minecraft

​ 题面:

Galaxy 已经整整 3600 秒没玩过 Minecraft 了!但他现在还得去出 1024 的题目,痛苦挣扎之后,他决定用麦块出一道题,所以他打开了他的 Java 1.16+

很明显这个 b 玩起游戏来就把题目忘得一干二净,最后只能是卡着 ddl 交了个不知道算什么东西的文件……

  1. 就这也想难倒我这个 Minecraft 老玩家?

  2. 下载文件并解压后得到一个 .mca 文件image-20231103211714103

  3. 很容易知道这是Minecraft地图内的区块文件,或者也可以通过百度知道img

  4. 跟据题面,下载Minecraft 1.16+ 的版本,并创建地图,并将 r.0.0.mca 用下载的文件覆盖image-20231103213245785

  5. 打开地图在四周查看就可以看见被覆盖的区块,讲台上有一本书

  6. 做一个最优解问题(我这么难的部分都解出来了你居然还在里面塞题 QwQ

    image-20231103212709491image-20231103212721195image-20231103212746314image-20231103212754280

    还算简单,暂且原谅你

  7. 最优解为 80 + 29 +27 = 136 ( 用时58s ) ,得解:flag = 136

Problem H. flag.py

​ 题面:

​ 这是一道寻找flag的题目,但出题者在设计它前绞尽脑汁,仍然灵感枯竭。为了赶DDL,出题者只好临时写了一个py脚本,选手只需 要输入正确的密钥,就能获得flag:

flag.py

  1. 哈!.py 这不专业对口了嘛😍
  2. 打开后提示说要输入Key,源代码都有了为什么不直接找呢image-20231103213956178
  3. 居然直接定义了一个全是字符的字符集…,连之前显示的都是通过索引一个一个排出来的,可恶,好狠的人image-20231103213953152
  4. 于是我一个个将它们 print 出来,并进行修改,得到了这么个代码image-20231103214301396
  5. 虽然还不能直接看见 flag ,但通过研究代码我们可以知道,我们需要的 Key 应该是 1145141919810(好臭的数…),重新打开并输入 Key ,我靠甚至不愿写一个停留显示…好吧,用 Pycharm 的IDE打开,再输入 Keyimage-20231103214732118
  6. 得解:flag = 0v0

Problem I. 咕咕

题面:

  1. 这里的图片实际上是超链接,但我还不会用 Markdown 写这个语法,在此将链接贴出

    谜题包

  2. 解压谜题包,得到两个文件image-20231103215542201

  3. 解压 咕咕.zip 却发现要密码!看来只能从 咕咕.png 下手了

  4. Stegsolve 查看无果,好像只能用16进制打开来入手了image-20231103215735288

    果然,在末尾找到了这个

    1
    zip's password:AK_1024_AC_AKCUP

    很显然,这是压缩包的密码

  5. 输入 AK_1024_AC_AKCUP 来解压image-20231103220010578

  6. 打开 flag.xlsx ,不用多说,单元格被锁定,且根据提示,我们新建一个 Sheet ,然后利用 Excel 文件的引用功能得到有内容的单元格image-20231103221050751

  7. 那我们就像这样做

    image-20231103220909221

    啊哈!抓到你了!

  8. 得解:flag = Socoding_1024

Problem J. 宇宙讯息

​ 题面:

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
29
30
31
32
33
34
35
宇宙中传来了一段讯息…

Loading… 3%… 42%… 86%… 100%































Dash-dot-dot-dot-dot Dash-dash-dot-dot-dot Dash-dot-dot-dot-dot Dash-dash-dash-dash-dot Dash-dash-dot-dot-dot Dot-dot-dot-dot-dash Dash-dot-dot-dot-dot Dash-dash-dash-dot-dot Dash-dash-dot-dot-dot Dot-dot-dot-dot-dot Dash-dot-dot-dot-dot Dot-dot-dash-dash-dash Dot-dot-dash-dash-dash Dot Dash-dot-dot-dot-dot Dot-dot-dot-dash-dash Dash-dot-dot-dot-dot Dot-dot-dash-dot Dash-dot-dot-dot-dot Dash-dot-dot Dot-dot-dash-dash-dash Dot-dot-dash-dot Dash-dash-dot-dot-dot Dash-dash-dash-dash-dash Dash-dash-dot-dot-dot Dot-dot-dash-dash-dash Dash-dot-dot-dot-dot Dash-dash-dash-dash-dot Dash-dash-dot-dot-dot Dash-dot-dot-dot-dot Dash-dot-dot-dot-dot Dot-dash-dash-dash-dash Dash-dash-dot-dot-dot Dot-dot-dot-dot-dash Dash-dot-dot-dot-dot Dot-dot-dot-dot-dot Dash-dot-dot-dot-dot Dot-dash-dash-dash-dash Dash-dot-dot-dot-dot Dot-dot-dot-dash-dash Dot-dot-dot-dot-dash Dot-dot-dot-dash-dash Dash-dot-dot-dot-dot Dot Dash-dash-dot-dot-dot Dot-dot-dot-dot-dash
  1. 好好好,你连 .- 都不愿意打…

  2. 利用Word文档强大的替换功能,可以得到这样的一串摩斯密码

    1
    -.... --... -.... ----. --... ....- -.... ---.. --... ..... -.... ..--- ..--- . -.... ...-- -.... ..-. -.... -.. ..--- ..-. --... ----- --... ..--- -.... ----. --... -.... -.... .---- --... ....- -.... ..... -.... .---- -.... ...-- ....- ...-- -.... . --... ....-
  3. 经过翻译后得到

    1
    6769746875622e636f6d2f707269766174656163436e74
  4. 看到有数字和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

    并对照 对照表 进行查询,得到一串网址,是程序员都爱用的Github

    1
    github.com/privateacCnt
  5. 进入网址,中间走了好多弯路我就跳过了,总之可以在 Labels 里面发现一个网址image-20231103223336232

    1
    https://github.com/privateacCnt/issue-tracker/files/13111671/Multi-part.Archive.Pack.zip
  6. 下载后解压该压缩包image-20231103222641307

    这个 .z01 已经很明显知道是分卷压缩了,而且压缩包名 Multi-part.Archive.Pack 也作了明显的提示

  7. 更改文件名及后缀,解压可得一个 .psd 文件,好好好,又要我去下 PhotoShop …image-20231103222857710

    1. 好像左下角蒙版那有不一样的地方

      但是PhotoShop怎么调我不会,反正捣鼓捣鼓就整出来了个这

    image-20231103223501782

  8. 得解:flag = y0u_did_it

Problem K. 洋葱

​ 题面:

  1. 剥洋葱呗,看起来得有3层image-20231103231130286

    flag

  2. 下载压缩包,并尝试解压,可恶要密码!这就是第一层了吗,不过好像有提示image-20231103223818549

    1
    password: 63 32 39 6a 62 32 52 70 62 6d 63 3d

    显然这又是 Unicode 编码…

  3. Unicode 解码咯,解得

    1
    c29jb2Rpbmc=

    干嘛…还套一层 Base64 是吧

  4. 还是用 Base64 进行解码,得

    image-20231103224522353

    这是不是可以蒙出来

  5. 得到一个 .exe (可执行文件),让我康康!image-20231103224712008

  6. ???要我反编译!???彳亍,咱迎难而上image-20231103224826386

    这里我们使用 ghidra 进行反编译

    image-20231103224946830

    不得不说这软件挺帅的

  7. 创建一个项目,并使用 ghidra 的 CodeBroswer 功能来浏览源代码

    image-20231103225225312

    浅浅地导入一下

  8. 使用右侧点击定位源代码的位置image-20231103225336283

  9. 根据提示 The flag is above me in source code. 的提示,浏览该代码所在位置上方的代码image-20231103230006848

    熟悉的 Unicode 又出现了

    1
    0x48 0x65 0x6c 0x6c 0x 6f 0x2c 0x77 0x6f 0x72 0x6c 0x64 0x21
  1. Unicode 解码叭,解得

    1
    Hello,world!
  2. 得解:flag = Hello,world!

结束语

至此,我的解题已经到此结束,虽然仍旧有两道题的遗憾,但也无妨,我的代码人生,从 Hello, world 开始,却不会以 Hello, world 结束

祝自己,1024,程序员节,快乐