全部解析可以在春秋伽玛的公众号上看到

这里仅是本人写的部分wp

1.See anything in these pics?

拿到一个zip和二维码

二维码拖进这个网站扫一下 QR Code Decoder | QR Code Scanner

得到5FIVE,解压zip,拿到一张图片

因为提示我们不止一张图片,于是我们foremost一下

又得到一个图片

图片拖进随波逐流直接出了,原来是宽高改了

屏幕截图 2025-01-17 145430

2.简单算术

拿到ysxdg/m@]mjkz@vl@zlf>b

提示我们想想异或

拖进随波逐流,暴力解密xor,keylength选2以上的,然后筛选有flag的,直接出了

屏幕截图 2025-01-17 150108

3.简单镜像提取

还是比较简单的

拿到一个压缩包然后得到一个流量

我话不多说直接foremost得到一个img,点不开

然后我又foremost这个img就能拿到一个zip和一个xls

点开这个xls就能看到flag了

屏幕截图 2025-01-17 151245

4.压力大,写个脚本吧

点开这个压缩包就明白了,意思是有100个zip,password是旁边这个txt经过base64解码后的,需要我们写脚本爆破他。

脚本

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

def extract_nested_zips_with_base64_password(initial_zip_path):
"""
解压嵌套压缩包,密码存储在对应的 `password_xx.txt` 文件中,并经过 Base64 解码。
文件解压到当前目录。

参数:
- initial_zip_path (str): 初始压缩包的路径。
"""
current_zip_path = initial_zip_path

while True:
# 获取当前压缩包的编号
base_name = os.path.splitext(os.path.basename(current_zip_path))[0]
zip_number = base_name.split('_')[-1] # 提取编号部分
password_file = f"password_{zip_number}.txt" # 对应的密码文件名

# 检查密码文件是否存在
if not os.path.exists(password_file):
print(f"未找到密码文件: {password_file},无法继续解压 {current_zip_path}")
break

# 读取密码并进行 Base64 解码
try:
with open(password_file, 'r', encoding='utf-8') as pf:
encoded_password = pf.read().strip()
password = base64.b64decode(encoded_password).decode('utf-8') # 解码 Base64 密码
except Exception as e:
print(f"处理密码文件 {password_file} 时出错: {e}")
break

# 解压当前压缩包
try:
with zipfile.ZipFile(current_zip_path, 'r') as zip_ref:
files = zip_ref.namelist()
if not files:
print(f"{current_zip_path} 是空压缩包。")
break

# 筛选出下一个压缩包,忽略非 `.zip` 文件(如密码文件)
next_zip_path = None
for file_name in files:
zip_ref.extract(file_name, os.getcwd(), pwd=bytes(password, 'utf-8'))
print(f"{password}")

# 如果是 `.zip` 文件,记录路径以便继续解压
if file_name.endswith('.zip'):
next_zip_path = os.path.join(os.getcwd(), file_name)

except RuntimeError as e:
print(f"解压 {current_zip_path} 时密码错误或其他问题: {e}")
break
except zipfile.BadZipFile as e:
print(f"{current_zip_path} 不是有效的压缩包: {e}")
break

# 如果没有下一个 `.zip` 文件,说明解压结束
if not next_zip_path:
print(f"解压完成。最终文件存储在当前目录")
break
current_zip_path = next_zip_path # 更新路径,继续解压下一个 `.zip` 文件


# 参数设置
initial_zip_path = 'zip_99.zip' # 初始压缩包名称

# 执行函数
extract_nested_zips_with_base64_password(initial_zip_path)

然后把得到一个flag-hint.txt是PASSWORD+PASSWORD.png

我们需要把所有密码连起来,去重,然后010得到一个png

就能得到flag了

5.音频的秘密

得到的音频提示是deepsound

我们使用deepsound2.2,发现需要密码(注意这里不能用deepsound2.0)

密码提示是弱密码,经尝试是123

然后得到一个flag.zip

由于是store压缩方式,所以尝试明文攻击

屏幕截图 2025-01-19 183159

然后得到了flag.png,lsb提取一下即可

屏幕截图 2025-01-19 183239

6.Infinity

题目给了一个png,可以foremost一下得到一个压缩包,点开发现还是一个压缩包,再点开还是一个压缩包,可以看出来是多层压缩包要写个脚本循环解压。

脚本

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
import os
import zipfile
import tarfile
import py7zr

# 记录每层压缩包名字的列表
compressed_files = []

def extract_archive(archive_path):
global compressed_files
# 用于存储待解压的文件队列
to_extract = [archive_path]
# 用于记录已经解压过的文件
extracted = set()

while to_extract:
file_path = to_extract.pop(0)
if file_path in extracted:
continue
# 记录当前压缩包的名字
compressed_files.append(file_path)
extracted.add(file_path)
file_extension = os.path.splitext(file_path)[1].lower()

if file_extension == '.zip':
# 解压zip文件
try:
with zipfile.ZipFile(file_path, 'r') as zip_ref:
zip_ref.extractall(os.path.dirname(file_path))
except zipfile.BadZipFile:
print(f"文件 {file_path} 不是有效的 ZIP 文件或已损坏。")
elif file_extension == '.7z':
# 解压7z文件
try:
with py7zr.SevenZipFile(file_path, mode='r') as z:
z.extractall(os.path.dirname(file_path))
except py7zr.Bad7zFile:
print(f"文件 {file_path} 不是有效的 7z 文件或已损坏。")
elif file_extension in ['.tar', '.tar.gz', '.tar.bz2']:
# 解压tar文件
try:
with tarfile.open(file_path, 'r') as tar_ref:
tar_ref.extractall(os.path.dirname(file_path), filter='data')
except tarfile.ReadError:
print(f"文件 {file_path} 不是有效的 tar 文件或已损坏。")
else:
print(f"不支持的文件格式: {file_path}")
continue

# 查找新生成的压缩包并添加到待解压队列
for root, dirs, files in os.walk(os.path.dirname(file_path)):
for file in files:
new_file_path = os.path.join(root, file)
new_extension = os.path.splitext(new_file_path)[1].lower()
if new_extension in ['.zip', '.7z', '.tar', '.tar.gz', '.tar.bz2']:
to_extract.append(new_file_path)

if __name__ == "__main__":
# 输入要解压的压缩包路径
archive_path = input("请输入压缩包的路径: ")
if os.path.exists(archive_path):
extract_archive(archive_path)
print("每层压缩包的名字:")
for file in compressed_files:
print(file)
else:
print("输入的路径不存在,请检查后重新输入。")

最后解压出来一个SeCr3t.txt

内容是 Inf1nityIsS0CoOL

然后将得到的文件名字由内而外(即倒过来)连起来,这里可以用cyberchef的reverse

由于题目提示:BASE58-Ripple、SM4-ECB

屏幕截图 2025-01-24 112458

这里SM4的key就是之前的内容

将保存下来的内容010一下得到png,就能得到这样一个png

无标题1

然后二维码扫一下就可以了,网站: QR Code Decoder | QR Code Scanner

屏幕截图 2025-01-24 112942

出了