当前位置: 首页 > article >正文

[羊城杯 2024]hiden

一顿解压之后发现有两个文件:


尝试了Rot47解密,得到一个看起来挺像一回事的解码结果:


再将得到的解码结果试试Rot13解密,成功得到正确的解码结果:

import wave 

with open('flag.txt', 'rb') as f:
    txt_data = f.read()
    file_len = len(txt_data)
    txt_data = file_len.to_bytes(3, byteorder = 'little') + txt_data

with wave.open("test.wav", "rb") as f:
    attrib = f.getparams()    
    wav_data = bytearray( f.readframes(-1) )

for index in range(len(txt_data)):
    wav_data[index * 4] = txt_data[index]
    
with wave.open("hiden.wav", "wb") as f:
    f.setparams(attrib) 
    f.writeframes(wav_data)

让AI写一个python脚本反推出flag.txt文件:

import wave

# 打开含有隐藏信息的WAV文件进行读取
with wave.open("hiden.wav", "rb") as f:
    # 获取音频文件参数
    attrib = f.getparams()
    # 读取所有帧
    wav_data = bytearray(f.readframes(-1))

# 从wav_data中提取文本数据长度(前3个字节),并转换为整数
file_len = int.from_bytes(wav_data[0:3], byteorder='little')

# 提取出实际的文本数据,根据之前编码时的规则,每个字节间隔3个样本位置存储
txt_data = bytes([wav_data[index * 4] for index in range(file_len)])

# 将提取出来的数据写入到新的文本文件中
with open('extracted_flag.txt', 'wb') as f:
    f.write(txt_data)

print("隐藏的文本已提取到 'extract_flag.txt' 文件中。")

但是还原的flag.txt只有部分flag,我换成chatgpt-4o mini得出的python脚本反推出来的结果还是一样:

(tip:这一题我当初是做出来了的,但是复现的时候AI不给力了)


下面是正确的python代码:

import wave
 
# 打开含有隐藏数据的Wave文件
with wave.open("hiden.wav", "rb") as wf:
    # 获取音频文件的参数
    params = wf.getparams()
    # 读取音频文件的所有帧数据
    wav_data = bytearray(wf.readframes(-1))
 
# 初始化一个空字节列表来存储提取出的文本数据
extracted_data = []
 
# 由于原始代码中每四个字节的第一个字节被用于存储文本文件的一个字节
# 我们只需提取这些字节即可
for index in range(0, len(wav_data), 4):
    extracted_data.append(wav_data[index])
 
# 将提取出的字节流转换为字节对象
txt_data = bytes(extracted_data)
 
# 提取文件长度
file_len = int.from_bytes(txt_data[:3], byteorder='little')
 
# 去除文件长度标识符
txt_data = txt_data[3:]
 
# 根据文件长度截断数据
txt_data = txt_data[:file_len]
 
# 将提取出的数据写入新的文本文件
with open("recovered_flag.txt", "wb") as f:
    f.write(txt_data)
 
print("Data extraction completed. The recovered text file is saved as 'recovered_flag.txt'.")

得到flag:

DASCTF{12jkl-456m78-90n1234}


http://www.kler.cn/a/461899.html

相关文章:

  • java实验4 反射机制
  • 07-ArcGIS For JavaScript--隐藏参数qualitySettings(memory和lod控制)
  • Java编程规约:集合处理
  • vue学习第一阶段
  • C语言——字符函数和内存函数
  • leetcode题目(3)
  • IC验证面试常问问题
  • Lua : Coroutine(协程)
  • Linux(16)——安装和更新 RPM 软件包
  • 详细说明嵌入式linux中bootcmd与bootargs差异
  • leetcode hot 100 前k个高平元素
  • 线程同步——使用场景区分
  • 【每日学点鸿蒙知识】grid里面的item支持拖动问题、WebView回调问题、获取页面名称、弹幕效果实现、修改App输出路径 |
  • 基础14 C++申请内存的各种方法
  • 自动化测试的心得
  • Singleton: WebRTC中ThreadManager中的单例模式
  • [创业之路-231]:《华为闭环战略管理》-5-企业组织架构、业务架构、技术架构、产品架构等它们有哪些不同的地方,又有哪些是相同的?
  • 数据库的使用09:使用SSMS工具将SQLsever数据导出到Excel
  • 【架构-38】如何选择通信协议和数据格式
  • 视频智能翻译
  • Java List 源码解析——从基础到深度剖析
  • Postman[2] 入门——界面介绍
  • 赛博周刊·2024年度工具精选(图片设计类)
  • 基于STM32的智能床垫控制系统的Proteus仿真
  • 直流开关电源技术及应用二
  • 麒麟信安云在长沙某银行的应用入选“云建设与应用领航计划(2024)”,打造湖湘金融云化升级优质范本