问题链接: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 sysimg = Image.open(sys.argv[1])
temp = ''
n = 0
for x in range(320):for y in range(320):n+=1if(img.getpixel((x,y))==(255,255,255)):temp += '0'else:temp += '1'if(n==8):n = 0print(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 structwav = 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 structwav = 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] 洞拐洞拐洞洞拐相关推荐

  1. 多陪陪聊/大橘树洞/夏日小野猫/糖恋树洞/听花开树洞/花语树洞/灯色阑珊处/橘色灯罩/暖聊小镇 陪聊陪玩公众号开发 未加密源代码

    源码介绍 公司自主开发,源码未加密带注释,可直接搭建使用,前端使用的是vue2.0后端使用php7.2,带公众号模板消息推送,源码带注释未加密 结构清晰合理支持二次开发. 演示公中号:花纹猫 界面截图

  2. 寻亲32年后找回被拐儿子!全国打拐第一数据库立功,为0-14岁儿童预存DNA信息...

    来源:大数据文摘 作者:笪洁琼 经过32年漫长等待,5月18日,李静芝终于见到了她被拐走的儿子嘉嘉. 嘉嘉在2岁的时候被人贩子抱走,直到32年后才与李静芝相见.为了寻找嘉嘉,李静芝从28岁找到60岁, ...

  3. mysql分组后为0也显示_寻亲32年后找回被拐儿子!全国打拐第一数据库立功,为0-14岁儿童预存DNA信息...

    大数据文摘出品 作者:笪洁琼 经过32年漫长等待,5月18日,李静芝终于见到了她被拐走的儿子嘉嘉. 嘉嘉在2岁的时候被人贩子抱走,直到32年后才与李静芝相见.为了寻找嘉嘉,李静芝从28岁找到60岁,不 ...

  4. 【友小盟看世界】数据向善:寻亲32年后找回被拐儿子!全国打拐第一数据库立功...

    经过32年漫长等待,5月18日,李静芝终于见到了她被拐走的儿子嘉嘉. 嘉嘉在2岁的时候被人贩子抱走,直到32年后才与李静芝相见.为了寻找嘉嘉,李静芝从28岁找到60岁,不惜走遍大半个中国,至少印了几十 ...

  5. 【社会实践】红旗渠:青年洞

    "闪闪红星"社会实践团队活动简报 --2019年11月10日 第二天,河南工业大学闪闪红星社会实践团队来到了红旗渠总干渠主要工程之一的青年洞. 下车后,首先映入眼帘的就是青年洞主入 ...

  6. UDP打洞程序包的源码

    C#实现UDP打洞 转自:http://hi.baidu.com/sdfiyon/blog/item/63a6e039155e02f23a87ceb1.html 下面是UDP打洞程序包的源码: //W ...

  7. 班尼机器人怎么拆_博鼎建筑科技外墙错台打磨机器人和外墙螺杆洞封堵机器人—自升造楼平台1+N执行器...

    继上期的混凝土整平机和智能喷淋养护系统,本期给大家介绍的是实际应用在自升造楼平台外墙环轨车上的外墙错台打磨机器人和外墙螺杆洞封堵机器人. 外墙错台打磨机器人 传统外墙错台处理,需要人工拿凿具对外墙面错 ...

  8. P2P打洞原理(二十二)

    一.P2P打洞原理 1.打洞解决了什么问题? 我们平常使用的一般都为私有ip,但是私有ip之间是不能直接通信的,如果要进行通信只能通过公网上的服务器进行数据的转发,难道我们每次发送数据都要经过公网上的 ...

  9. Unity中图片挖洞

    游戏中常见的对图片挖洞方法的一种实现 直接上原理: 用一张与目标图大小一样的贴图,填充其alpha通道,将需要挖洞的区域的alpha值设置为>0的值,在shader里处理alpha>0的区 ...

最新文章

  1. SQL SERVER数据库中的数据类型 转
  2. mysql导出数据表 .xls_mysql数据库导出xls-自定义
  3. .NET core3.0 使用Jwt保护api
  4. ASP.NET Core 进程内(InProcess)托管(6)《从零开始学ASP.NET CORE MVC》:
  5. Web worker总结
  6. arm汇编语言调用C函数之参数传递
  7. Linux dirname、basename 指令
  8. 2022最全知识点——RF接口自动化框架项目实战
  9. JDE 开发-部分系统函数
  10. 本科计算机考研统计学,统计学考研考什么科目
  11. Oracle 11gR2 dataguard 介绍
  12. git将本地文件push到阿里云Code:出现Permission denied (publickey)错误
  13. Java基础——使用json所要用到的jar包下载
  14. MYSQL语句按中文拼音排序
  15. mysql 8 commen table expression 树查询
  16. SpeechSynthesisUtterance文字转语音播报
  17. linux 通过命令行打印本机IP
  18. 老用户WAU以及老用户周活跃度
  19. linux使用usb打印机驱动精灵,Qomo Linux上的“驱动精灵”
  20. 新南预科计算机学什么,留学生亲述新南威尔士大学学习心得

热门文章

  1. 计算机考研面试有英语听力吗,考研复试前如何准备英语听力和口语
  2. 与繁重的工作一起修行
  3. U3V实现——CYUSB3014之GPIF总结
  4. telegram协议构架能实现朋友圈或者新浪微博功能么?
  5. WIFI:802.11协议帧格式
  6. Redis持久化、备份:RDB和AOF
  7. 简述igp和egp_路由协议的常见分类——GGP、EGP和IGP介绍
  8. 为什么Google是人工智能发展的主要动力?
  9. 计算机原始图片大全,怎么判定图片是否PS过?又该如何找到原始图片?
  10. matlab shading 的用法说明