题目地址
https://game.fengtaisec.com/#/startQuestions/7
题目分析
安全分析人员截获间谍发的秘密邮件,该邮件只有一个MP3文件,安全人员怀疑间谍通过某种private的方式将信息传递出去,尝试分析该文件,获取藏在文件中的数据?flag形式为 flag{}。
关键字 :MP3文件 private 藏在文件中的数据
联想:音频文件头中有保留子 private 字段 占一个字节 使用 010Editor打开
帧头中发现有private_bit
解题思路
把每个帧头中的private_bit的值提取出来连在一起再来处理
图中可以看到帧头size是4h ,每个h是8位,第一个帧头的起始位置为1C1B8h
private_bit位于24位,也就是第三个字节的最后一位
提取出private_bit位所在的字节内容
第一个帧头第三个字节的位置就是 第一个字节位置:1C1B8+2=1C1BA(115130)
循环步长就是414h(1044)
一直到最后一个尾帧就是87610Bh(8872203)
每提取到一个字符就转为2进制,再提取2进制数的第八位,也就是private_bit(0或1)
按照常规思路把二进制串按8位分割,转为16进制字符,再转为ascii码,最终得到flag
from binascii import *f = open('flag-woody.mp3','rb')start_bit=0x1c1b8step=0x0flag='' while True: bit=start_bit+step f.seek(bit) bin_data=bin(int(hexlify(f.read(4)),16))[2:] flag+=bin_data[23] step+=0x414 if int(str(bit),16) > len(f.read()) break for i in range(0, len(flag) ,8): flag_r=chr(int(flag[i:i+8], 2)) print(flag_r, end="")
FLAG{pr1v4t3_bi7}