[PearlCTF2024] SoundScape WriteUp by MiguoQAQ

SoundScape

在这里插入图片描述

在这里插入图片描述

我是第四个做出来的!耶!

👇以下为WriteUp👇

给了三个音频,说音频就是图片,看看音频们

在这里插入图片描述

全都是这样的格式,肯定是高低对应10没错了,而且数量如此之多,猜测是文件的二进制值

但为什么有三个这样的文件呢?

在这里插入图片描述

文件的名字经过搜索并没有什么特别的,但是大写的首字母是RGB,思路变得清晰起来了!

接下来就是拿到数据和脚本运算了

在这里插入图片描述

经过比较Audacity内的信息,发现wav文件并没有被压缩破坏,还是很有灵性的~导出16进制,把7F改成1,把00改成0就可以得到二进制了,其他两个文件同理。

把得到的0101……信息存储到txt文件里,命名为Raine1.txt等等

因为得到的01二进制数据有1769472位,每8位转换成一个2位的16进制数,所以得到的数据对应的有221184个,分离因数可以猜出图片大小

接下来就是写脚本环节!

import numpy as np
import matplotlib.pyplot as plt

def convert_binary_to_hex(binary_string):
    decimal_value = int(binary_string, 2)
    hex_string = format(decimal_value, '02X')
    return hex_string

def main():
    with open('Raine1.txt', 'r') as file1, open('Gideon1.txt', 'r') as file2, open('Beryl1.txt', 'r') as file3:
        binary1 = file1.read()
        binary2 = file2.read()
        binary3 = file3.read()

        hex_colors = []
        for i in range(0, len(binary1), 8):
            r = convert_binary_to_hex(binary1[i:i+8])
            g = convert_binary_to_hex(binary2[i:i+8])
            b = convert_binary_to_hex(binary3[i:i+8])
            hex_colors.append((r+g+b))
            #print(hex_colors)
			#这里可以打印出来一些RGB像素数据来判断进制转换是否正确
			
    # 将16进制颜色转换为RGB格式
    rgb_colors = [tuple(int(hex[i:i + 2], 16) for i in (0, 2, 4)) for hex in hex_colors]

    # 创建一个数组以存储像素值
    image_array = np.array([rgb_colors], dtype=np.uint8)

    # 调整数组形状以匹配图像尺寸
    #这里我发现的图片尺寸是384*576
    image_array = image_array.reshape(384, 576, 3)

    # 绘制图像
    plt.imshow(image_array)
    plt.axis('off')

    # 保存图像为文件
    plt.savefig('output_image.png')


if __name__ == "__main__":
    main()

运行一下,就可以得到图片力

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值