[BUUCTF] 洞拐洞拐洞洞拐

博客围绕问题附件图片展开分析。先用Python脚本对图片黑白像素按规律读取转换;音频分析中,将数据保存为.wav文件,观察音阶并转换为可打印字符;编码分析识别出密文为Base32编码并解密;还补充了wav文件的采样点、字节占用及存储方式等知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题链接: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 = ''

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

03-11
<think>好的,用户想要查找关于BUUCTF网络安全挑战赛的题目和解决方案。首先,我需要回顾用户提供的引用内容,看看是否有相关的信息。 引用[1]提到了注册账号、选择挑战场景、学习相关知识等步骤,但并没有具体题目或解决方案。引用[2]讨论了不同赛题类型的侧重点,比如PWN、Reverse、Crypto等,这对理解题目类型有帮助。引用[3]则是一个具体的Misc题目解析,涉及到NTFS数据流的处理,这可以作为解决方案的一个例子。 接下来,我需要根据这些信息,整理出BUUCTF常见的题目类型和对应的解决思路。例如,Web类可能需要SQL注入或XSS的知识,Crypto可能需要数学算法,Misc则可能涉及隐写术或数据恢复。然后,需要提供具体的解题步骤示例,比如引用[3]中的NTFS数据流题目,使用WinRAR和特定工具解决。 同时,用户可能希望了解如何系统地准备和解决这些题目,所以需要分步骤说明,比如注册、学习、解题方法等。另外,生成的相关问题要覆盖题目类型、学习资源、解题工具和比赛策略等方面,确保全面帮助用户。 最后,确保回答符合格式要求,使用正确的LaTeX语法,结构清晰,引用标识正确添加。还要检查是否有遗漏的信息,比如是否需要更多例子或更详细的步骤,确保用户能根据回答顺利找到题目解决方案。</think>### BUUCTF网络安全挑战赛题目类型与解决方案 BUUCTF网络安全竞赛题目覆盖Web安全、密码学、逆向工程(PWN/Reverse)、隐写术(Misc)等领域。以下是常见题型及解决思路: --- #### 一、Web类题目 **典型题目**:SQL注入、XSS攻击、文件上传漏 **解决方案示例**: 1. 使用工具$sqlmap$自动化检测注入点[^1] 2. 构造Payload绕过过滤,例如:`admin' OR 1=1 -- ` 3. 利用浏览器开发者工具分析HTTP请求与响应 --- #### 二、Crypto类题目 **典型题目**:RSA加密、哈希碰撞、古典密码破译 **关键公式**: - RSA解密公式:$$m = c^d \mod n$$ **解决步骤**: 1. 分解公钥中的$n$值获取素数$p,q$ 2. 通过$d \equiv e^{-1} \mod \phi(n)$计算私钥 --- #### 三、Misc类题目 **案例参考**:[ACTF新生赛2020] NTFS数据流 **解决步骤**[^3]: 1. 使用$WinRAR$解压题目文件 2. 通过$NtfsStreamEditor2$工具提取隐藏数据流 3. 分析提取文件中的Flag信息 ```python # 示例:隐写术常用工具链 import binwalk binwalk.scan('target_file', signature=True) # 检测文件隐藏内容 ``` --- #### 四、Reverse/PWN类题目 **典型题目**:缓冲区溢出、Shellcode注入 **工具链**: - $GDB$调试器分析程序崩溃点 - $pwntools$编写自动化攻击脚本 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值