.wav异或提取png 提取blue通道数值并转换写成zip文件(2022DASCTF x SU 三月春季挑战赛 书鱼的秘密)

2022DASCTF x SU 三月春季挑战赛 书鱼的秘密
题目wp参考来源:
2022DASCTF x SU 三月春季挑战赛wp–WHT战队

一、.wav异或提取png

从data之后的第二个 k 之后开始,每隔10个字节,有一个字节的数据,其余的都是填充,混淆之类的数据。

把前几个字节提取出来与 233 异或。发现最终结果是png字节流文件尾的逆序。
在这里插入图片描述
在这里插入图片描述
编写脚本,将这些数据提取出来,异或,然后逆序重新写入成png

from binascii import *

data = ''
with open('书鱼的多重文件.wav', 'rb') as f:
	with open('flag.png', 'wb') as f1:
		for idx in range(0x9e, len(f.read()), 10):
			f.seek(idx)
			data += '{:02x}'.format(ord(f.read(1)) ^ 233)
		data = data[::-1]
		for i in range(0, len(data), 2):
			hex_data = data[i:i+2][::-1]
			f1.write(unhexlify(hex_data))

得到的png图片无法正常显示,binwalk分析发现,文件前部分都是无效数据,png图片被附加在了这些无效数据之后,foremost分离即可

二、提取blue通道数值并转换写成zip文件

在这里插入图片描述
Stegsolve的Data Extract查看并不像隐写了文件数据,猜测应该是对颜色动了手脚,使用 PS 打开,发现图片的前两行像素确实颜色一场,查看blue通道的数值,发现是 50 的十进制。继续提取前几个像素的blue数值,发现是 50 4B 03 04 的zip文件头。
在这里插入图片描述
编写脚本提取blue通道数值并转换写成zip文件

from PIL import Image
from binascii import *


img = Image.open('flag.png')
width, height = img.size
with open('flag.zip', 'wb') as f:
	for h in range(2):
		for w in range(width):
			blue = '{:02x}'.format(img.getpixel((w, h))[2])
			f.write(unhexlify(blue)

三、输入法九键+国际区号解密码

在这里插入图片描述
输入法九键226232是 Canada ,加拿大

在这里插入图片描述
国际手机号码开头,区号:

https://cwlwxr.github.io/s3n62u57_/

在这里插入图片描述
发现这些国家的区号代码,都有一至三四位数字,对应右边的数字,猜测右边的数字就是这些国家地区的区号代码下标,即得到:

226232	1	=>	1
	Canada
23442647826	1	=>	9
	Afghanistan
528842	3	=>	1
	Latvia
5893626874	3	=>	2
	Luxembourg
46342	2	=>	1
	India
6443742	1	=>	2
	Nigeria
473323	2	=>	0
	Greece
24462	1-2	=>	86
	China
6626	2	=>	6
	Oman
35426884	3	=>	3
	Djibouti
3782867425 484632	2	=>	4
	Equatorial Guinea
2654842    3	=>	1
	Bolivia
2376832    0-3	=>		-440
	Bermuda
52726      1	=>	8
	Japan
1912120866341-440
>>> import hashlib
>>> hashlib.md5('1912120866341-4408'.encode()).hexdigest()
'4d1a3568b2a81c7d958892bf100b3f15

DASCTF{4d1a3568b2a81c7d958892bf100b3f15}
posted @ 2022-03-28 21:15  Hardworking666  阅读(49)  评论(0编辑  收藏  举报  来源