MISC
[Round 1] whatmusic
拿到题目,一个password和加密的压缩包
查看password的文件尾
这里会发现是png文件的文件头,逆序输出,并保存为1.png。得到一个图片,
进行CRC爆破,发现宽高被修改,之后拿到压缩包密码,解密后拿到flag文件。
这时根据题目whatmusic可判断为是音频文件
查看hint1:
桑德拉的女儿lyra。
这时可以去github搜lyra,搜到开源项目。可以将文件解密成音频文件。
(羊城杯和ISCC都可以找到例题)
[Round 1] SinCosTan
这里可以发现是一个wav音频文件
不过这题跟歌没什么关系,可以看到这是png图片的文件头
尝试提取数据
我们查找png文件头文件尾、zip文件头文件尾对应的ASCII数据
拿到俩个png图片和一个zip文件
zip文件中是一个hint.txt(我们需要修复一下zip文件)
很明显的零宽度隐写
那么这里我们拿到俩张一模一样的图片,还拿到了种子seed=114514,很明显能想到盲水印
python bwmforpy3.py decode 1.png 2.png 5.png --seed=114514
盲水印拿到flag
[Round 2] 滴答滴
使用010打开文件可以发现全部都是 00 和 FF,一般来说这是可以用于表示电平信号
看到这个要想到信号是什么编码,判断出是曼切斯特编码。脚本如下:
def read_from_file(filename):
# 从文件中读取二进制数据
with open(filename, 'rb') as file:
return file.read()
def manchester_to_binary(manchester_data):
# 将曼切斯特编码的数据转换回二进制字符串
binary_str = ''
i = 0
while i < len(manchester_data):
if manchester_data[i] == 0 and manchester_data[i+1] ==255:
binary_str += '0'
elif manchester_data[i] == 255 and manchester_data[i+1] == 0:
binary_str += '1'
i += 2 # 每次处理两个字节
return binary_str
def binary_to_char(binary_str):
# 将二进制字符串转换回ASCII字符
return ''.join([chr(int(binary_str[i:i+8], 2)) for i in range(0, len(binary_str), 8)])
# 示例使用
filename = "attachment" # 输入文件名
manchester_data = read_from_file(filename)
binary_str = manchester_to_binary(manchester_data)
print(binary_str)
ascii_str = binary_to_char(binary_str)
print(f"解码后的ASCII字符串: {ascii_str}")
# 这个脚本的使用要求是文件的十六进制数据为电平内容
[Round 2] 听~
DeepSound发现隐藏压缩包