文章总结: 文档记录了看雪KCTF游戏模块多道关卡的新手向解题过程。内容覆盖摩斯密码、二维码修复、盲文编码、零宽隐写、凯撒与栅栏密码等基础加密算法,以及简单的逆向分析、RSA解密和流量分析实战。作者通过工具与原理结合的方式演示解题步骤,旨在帮助新手掌握CTF常见题型套路,具有很高的入门指导价值。
综合评分: 85
文章分类: CTF,逆向分析,实战经验
看雪KCTF_Game_1-14wp(新手入门向)
原创
M0t0y
M0t0y
moonbeautSec
2026年3月15日 07:22
北京
看雪平台的KCTF_GAME模块,妥妥的新手入门指南,难度超低,基本覆盖了各大比赛签到题的套路,而且目前还在更新,入门首选。 在解题过程中,有些题目我直接用了工具秒杀,有些则是凭经验快速判断。如果你对某些细节感兴趣,或者遇到不懂的地方,建议打开搜索引擎自己探索——这也是CTFer的必备技能哦! 后续会持续更新KCTF的全方向题目,记得关注哦! 💪
闯关游戏
第一关
image-20260308104652534
-.--/---/..-/.--/../-.
一眼摩斯密码,使用斜杠 / 分隔各个字母:
| 摩斯码 | 字母 |
| — | — |
| -.-- | Y |
| --- | O |
| ..- | U |
| .-- | W |
| .. | I |
| -. | N |
摩斯电码解码得到YOUWIN
flag
YOUWIN
第二关
image-20260308104917162
找个正常的二维码,将三个角的绿色雪花替换为正常二维码的方块就行
不得不说Snipaste还是太好用了,直接截图贴图就行了
image-20260308105347261
直接就扫出来了
image-20260308105505909
flag
flag{62d0cbb2c69133b52f386701726f29c1}
第三关
image-20260308110338424
先base64解码
image-20260308110539478
得到flag,但是是错的,不过也是,题目是错误的md5
flag{b9768a37b47beb2d88e2dboe76a39bb3}
仔细观察这个MD5值:
b9768a37b47beb2d88e2dboe76a39bb3
↑
这里有一个字母 **o**,但MD5是32位十六进制数,只包含 0-9 和 a-f,不存在字母 o
将flag中的o 换成数字 0(零),得到正确flag
flag
flag{b9768a37b47beb2d88e2db0e76a39bb3}
第四关
image-20260308111202252
明显的盲文(Braille)编码题目
○ 和 ● 代表盲文中的空点和实点。盲文的基本单元是一个2×3的点阵(6个点位),每个字符由这6个点的组合表示。
○● ●○ ●○ ●● ●● ●○ ●○
●○ ○○ ○○ ○● ○○ ○○ ○●
○○ ●○ ○○ ●○ ●● ●● ○○
将三行合并,每2个字符为一列,形成盲文字符:
○●|●○|●○|●●|●●|●○|●○
●○|○○|○○|○●|○○|○○|○●
○○|●○|○○|●○|●●|●●|○○
找一张盲文对照表对应看一下就行了
得到
flag
ikanxue
第五关
image-20260308113507356
sublime text打开,一眼零宽隐写
image-20260308113720986
image-20260308113643896
flag
flag{6af971a42782115a594ba2318c0417ad}
第六关
image-20260308113847248
打开是一串二进制数据,转字符串
image-20260308113943642
然后凯撒解密即可
image-20260308114143761
flag
flag{7115f261bfd7f42a5cd7412ce86aba7e}
第七关
image-20260308114248731
题目内容
ZUNmzx4zxMNUIh0z2z=ZEIYZ032zlDXsNMZJO13WWk2YIJMNUzij
题目提示明显的栅栏
W型栏数为10时解出base64字符串
image-20260308120304809
解码得到flag
image-20260308120039280
flag
flag{5c277a43517231bb1fece8723d2d6569}
第八关
image-20260309222011633
下载附件,先查看文件信息
32位程序,无壳
image-20260309221938588
用ida pro 32 位打开
F5反编译出main函数代码
image-20260309222221784
代码逻辑非常简单
关键的只有这一句
check(Buffer, &flag, 38);
调用check函数
跟进查看一下这个函数
image-20260309222356474
将flag字符串与0x31异或,然后和a1做比较
我们将flag字符串提取出来
image-20260309222706546
在ida中按shift+e可以快速提取对应的内容
{
0x57, 0x5D, 0x50, 0x56, 0x4A, 0x03, 0x53, 0x04, 0x53, 0x08,
0x54, 0x09, 0x04, 0x00, 0x54, 0x50, 0x06, 0x03, 0x03, 0x08,
0x04, 0x02, 0x08, 0x54, 0x05, 0x02, 0x54, 0x03, 0x07, 0x09,
0x08, 0x05, 0x52, 0x05, 0x03, 0x00, 0x01, 0x4C, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
};
将flag字符串和0x31异或就能得到原文
exp
flag_len = 38
flag_c = [
0x57, 0x5D, 0x50, 0x56, 0x4A, 0x03, 0x53, 0x04, 0x53, 0x08,
0x54, 0x09, 0x04, 0x00, 0x54, 0x50, 0x06, 0x03, 0x03, 0x08,
0x04, 0x02, 0x08, 0x54, 0x05, 0x02, 0x54, 0x03, 0x07, 0x09,
0x08, 0x05, 0x52, 0x05, 0x03, 0x00, 0x01, 0x4C, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
]
flag = []
for i in range(flag_len):
flag.append(flag_c[i] ^ 0x31)
print(flag)
print(''.join(chr(x) for x in flag))
image-20260309223514654
flag
flag{2b5b9e851ea7229539e43e26894c4210}
第九关
image-20260309223617958
得到一张图片
搜了一下瓦坎达文字,没想到还真有
image-20260309224239694
直接对照找到相应的字母就行了
得到
YOUGOTIT
flag
YOUGOTIT
第十关
image-20260309224406522
打开附件,得到一串数字字符
821010841088421108841022104084210884021084210841
随波逐流秒了
image-20260309224957820
结合题目不用猜就是这个
但是不知道这里为什么错了一位,但是会拼音的应该都知道吧
KAMXUEDOTCOM
改一下
kanxuedotcom
flag
flag{kanxuedotcom}
第十一关
image-20260309225216588
根据前面的难度,盲猜这个是伪加密
伪加密没什么难度,具体就是通过010去修改压缩包二进制数据中的两个关键位置的数据,可以搜一下了解一下,初期学习还是懂原理好一点,后面就可以用工具一把梭了
用Hx0的工具zipcracker秒了
flag
flag{d9ae4d859de9b941af40f91f69b13f31}
第十二关
image-20260309230254083
p=1074058774204108249701494602945344702257295575959111855899071
q=88986629334781577655493187325102894512564116681307655782184342573939069819137
e=9540011292252897217
c=41548063605430288432470295597098485988788870848095534515875709414720207762389334011819123356492264118935214420228741427986850823373300101
题目直接把p,q,e,c都给了,稍微学过一点的都会解了
rsa的加密解密原理
加密:
假设明文为 m,需要满足:
0 <= m < n
加密公式:
c = m^e mod n
得到密文 c。
解密:
解密时用私钥 d:
m = c^d mod n
就能恢复出原始明文。
这是因为:
m^(ed) ≡ m (mod n)
而 ed ≡ 1 (mod φ(n)),所以解密可以正确还原明文。
因为题目已经直接给出了 p 和 q,所以这题其实非常直接:
- 计算模数 n
n = p * q
- 计算欧拉函数
φ(n) = (p - 1)(q - 1)
- 求私钥 d
d = e^(-1) mod φ(n)
- 解密得到明文 m
m = c^d mod n
- 把 m 转成字节,再转成字符串
exp
from Crypto.Util.number import long_to_bytes, inverse
p = 1074058774204108249701494602945344702257295575959111855899071
q = 88986629334781577655493187325102894512564116681307655782184342573939069819137
e = 9540011292252897217
c = 41548063605430288432470295597098485988788870848095534515875709414720207762389334011819123356492264118935214420228741427986850823373300101
# 1. 计算 n
n = p * q
# 2. 计算 phi(n)
phi = (p - 1) * (q - 1)
# 3. 计算私钥 d
d = inverse(e, phi)
# 4. RSA 解密
m = pow(c, d, n)
# 5. 转成明文
flag = long_to_bytes(m)
print(flag.decode())
如果不想依赖 Crypto.Util.number,也可以用 Python 内置写法:
p = 1074058774204108249701494602945344702257295575959111855899071
q = 88986629334781577655493187325102894512564116681307655782184342573939069819137
e = 9540011292252897217
c = 41548063605430288432470295597098485988788870848095534515875709414720207762389334011819123356492264118935214420228741427986850823373300101
n = p * q
phi = (p - 1) * (q - 1)
d = pow(e, -1, phi)
m = pow(c, d, n)
msg = bytes.fromhex(hex(m)[2:])
print(msg.decode())
flag
flag{81794a6521b73422e9d5c12ea5b8ccc3}
第十三关
image-20260309231422715
流量分析
直接按长度排序就得到了flag
image-20260309231534184
flag
flag{aa6d377b2906ae97a2107e1ece8f1d04}
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:moonbeautSec M0t0y
M0t0y《看雪KCTFGame1-14wp(新手入门向)》