首页 > 其他分享 >[BUUCTF]洞拐洞拐洞洞拐

[BUUCTF]洞拐洞拐洞洞拐

时间:2023-01-15 00:24:06浏览次数:74  
标签:BUUCTF 洞洞 音频 0.5 sys import wav data

[BUUCTF] 洞拐洞拐洞洞拐

问题链接:https://buuoj.cn/challenges#洞拐洞拐洞洞拐

问题附件是一张图片。

一. 图片分析

查看图片,发现是由有规律的黑白像素构成的PNG图片,用Python脚本尝试以黑色为1,白色为0分别按行读取,发现00xxxxxx00.......的规律,按照char 型读取,发现都是可打印字符,读取及转换代码如下:

#使用:.\hb黑白像素块10.py 2239f085-4e8c-425b-9e8e-793c982c42f5.png
#author:CHTXRT
from PIL import Image
import sys

img = Image.open(sys.argv[1])
temp = ''
n = 0
for x in range(320):
    for y in range(320):
        n+=1
        if(img.getpixel((x,y))==(255,255,255)):
            temp += '0'
        else:
            temp += '1'
        if(n==8):
            n = 0
            print(chr(int(temp,2)),end='')
            temp = ''
img.close()    

得到结果:

52494646FC18000057415645666D742010000000010001000A000000140000000200100064617461D8........(以下省略n行)

二. 音频分析

上边那串数据看起来像个文件,把它扔到编辑器里面,发现 .wav文件头。

改名2333.wav 保存,用Audacity 打开如图所示:

是个单声道音频(important),观察音频,列出部分音阶:

-0.5 -0.5 0.5 -0.5 0 -0.25 -0.5 -0.25 1.0 -0.5 -0.75 ......(以后省略n项)

发现每段只有 8 种可能:-0.75 -0.5 -0.25 0.0 0.25 0.5 0.75 1.0

盲猜一波八进制,转换前半部分得到 115132127107 ,如果按3个拆分,可以得到 77 90 87 71 ,都属于Ascii 可打印字符,用Python 脚本进行转换,代码如下:

#使用:.\wv音频处理.py 2333.wav
#author: CHTXRT
import sys
import wave
import struct

wav = wave.open(sys.argv[1],'r')
frame = wav.getnframes()
data = wav.readframes(frame)
h = [0]*(len(data)//2)
for i in range(len(data)//2):
    h[i] = (struct.unpack('<h',data[i*2:i*2+2]))[0]
hmax = 32767
temp = ''
for i in range(0,len(h),10):
    temp += str(round(h[i]/hmax*4)+3)
    if(len(temp)==3):
        print(chr(int(temp,8)),end='')
        temp = ''
#其中 wave 转换采用的相关 wav 格式知识见下文第四节。

得到一段数据如下:

MZWGCZ33G44GGNRTHE3DEMZSGQ4TQMZQMY2WCNRZGZSDCOBYHBRGMMZUMFSWIMZSGVRTQY3DGIZWIZDBO5SDKML2PJYXUMRTGMZTGYLBPU

三. 编码分析

上边那段文字看起来像段密文,如果是做题做多了或者熟悉Base系列的同学可能会一眼盯真,看出前四个字正是flag的 Base32 编码,不熟悉的同学可以使用相关枚举脚本查看(懒得写了,以后可能补),解密明文如下:

flag{78c639623249830f5a696d1888bf34aed325c8cc23ddawd51zzqz23333aa}

四. wav 分析

本节作为补充知识,勉强算是我在编写上述脚本时学习的记录吧。

对于 wav 文件来说,它的音频由许多采样点构成,每个采样点占用 2 或 4 个字节(单声道音频就是 2 字节,双声道就是 4 个字节,高八位是左声道,第八位是右声道),每个声道的采样数据是一个短整数(int_8),同时我们还应该着重注意的是,wav 文件的数据是小端存储的,所以我们应该先读后四位,再读前四位 [1]。

#使用:.\wv音频处理.py 2333.wav
#author: CHTXRT
import sys
import wave
import struct

wav = wave.open(sys.argv[1],'r')
frame = wav.getnframes()
data = wav.readframes(frame)
h = [0]*(len(data)//2)
for i in range(len(data)//2):
    h[i] = (struct.unpack('<h',data[i*2:i*2+2]))[0]  #[1]  unpack方法中的第一个参数中,‘<’代表小端存储读取
hmax = 32767
temp = ''
for i in range(0,len(h),10):
    temp += str(round(h[i]/hmax*4)+3)
    if(len(temp)==3):
        print(chr(int(temp,8)),end='')
        temp = ''

以上内容仅供参考,水平不高,大佬见笑。

标签:BUUCTF,洞洞,音频,0.5,sys,import,wav,data
From: https://www.cnblogs.com/chtxrt/p/17052883.html

相关文章

  • BUUCTF N种方法解决
    N种方法解决 注意:得到的flag请包上flag{}提交打开文件包发现exe打不开,我也不知道为什么,直觉直接扔到010editor,展示的内容为:  一看,索的一声,base64编码好哦!!!直......
  • BUUCTF 乌镇峰会种图
    乌镇峰会种图1乌镇互联网大会召开了,各国巨头汇聚一堂,他们的照片里隐藏着什么信息呢?(答案格式:flag{答案},只需提交答案)注意:得到的flag请包上flag{}提交 吐槽:这道题真的......
  • BUUCTF MISC 大白 1
    大白 1题目描述:看不到图?是不是屏幕太小了注意:得到的flag请包上flag{}提交 有个png图像,直接上010editor!!可是大白只有上半身,所以我们需要修改高度!  一定要点......
  • BUUCTF 新年快乐
    这题主要考查查壳与去壳首先用Die查看文件信息可以看到文件是32位的且有一个UPX壳,那接下来就是脱壳操作放入ida反编译得到main函数伪代码int__cdeclmain(intarg......
  • buuctf-preg_replace的e模式造成命令执行
    [BJDCTF2020]ZJCTF,不过如此打开后是正常的代码审计首先第一眼看到的就是file_get_contents而且还对$text有要求,直接上伪协议data://text/plain,Ihaveadream,同时按照......
  • buuctf-ssrf+php伪协议嵌套
    [BSidesCF2020]Hadabadday【ssrf+伪协议的嵌套】进入或可以点击WOOFERS和MEOWERS获取狗和猫的图片,同时发现地址栏出现category分别等于WOOFERS和MEOWERS两种值之后......
  • buuctf-web方向--ssrf+sql+dirscan
    [网鼎杯2018]Fakebook首先,扫描该网站利用dirsearch进行扫描获取robot.txt,从中发现源码备份/user.php.bak下载后可读取源码<?phpclassUserInfo{public$name......
  • BUUCTF | [[GXYCTF2019]BabyUpload
    知识点文件类型绕过......
  • BUUCTF-PWN-第六页writep(32题)
    今天期末考试终于完了,中间还......
  • buuctf 一眼就解密 看我回旋踢
    Base64 是一种基于64个可打印字符来表示二进制数据的表示方法,由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符。Base64 常用于在通常处理文本数据的场合,表示......