easy! 23333!

逆序的zip

image-0301115218323

1
2
3
4
5
with open('data','rb') as fr:
data = fr.read()
with open('data.zip','wb') as fw:
fw.write(data[::-1])

得到一段字符

image-0301115310960

解零宽

image-0301115407478

flag{maybe_you_kn0w_the_Unicode_Steganography}

你也很困惑吗?

分析文件结构,由于后缀是zip,其头为504b0304,可以看出是按位进行异或运算

image-0301115439809

根据最后的数据和数据总量,由于最后一次的原始数据0x00经过异或运算后得到0x92,也就是146,而0x1FF891256进行模运算后,恰好得到146

可以知道原始数据是按照(1-256)%256的按位异或运算得来

1
2
3
4
5
6
7
8
with open('flag.zip','rb') as fr:
origin_data = fr.read()
i = 1
with open('out.zip','wb') as fw:
for v in origin_data:
fw.write((v^i).to_bytes(1,byteorder='big'))
i+=1
i %= 256

得到压缩包内容

image-0301115536014

两张图片宽高都一样,像素异或

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from PIL import Image

img1 = Image.open('rox.png')
img2 = Image.open('xor.png')
x = 3000
y = 1875

img = Image.new(img1.mode,(x,y))
for i in range(x):
for j in range(y):
p1 = img1.getpixel((i,j))
p2 = img2.getpixel((i,j))
tmp = []
for _ in range(3):
tmp.append(p1[_]^p2[_])
p = tuple(tmp)
img.putpixel((i,j),p)
img.save(f"out.png")

得到一个图片,与rox.png高度相似

image-301115605639

盲水印得到flagflag{AC4E331C-A2D0-CA2C-93D6-B9E22F19A373}

数字游戏

在线解数独6185793217986498235415632727314893876476495213543219823856

image-301115635724

数独图片提示对角线,左上右下+右上左下得到654917276261618641,可以解出flag.zip

查看key.txt得到两个列表,这两个列表长度都为25,且有数字7,而25*25的二维码的定位符长度恰好为7

image-0301115718294

实际上是Nonograms数图谜题
将数据填入自动生成

image-301115749077

扫码得到Take1tEasy,解压得到flagflag{c6ebcf84bcd54bac0803086a4630f673}

这是隐写哦

播放音频时,初始几秒存在噪音,读取采样点数据查看,发现01串匹配png文件头

image-0301115829863

提取时,只需要提取低位数据即可,进行与运算

image-301115846049

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import wave
with wave.open("flag.wav","rb")as r,open("pic.png", 'wb') as w:
fms = r.readframes(r.getnframes())
fms = list(fms)[:]
print(len(fms))
chunk =0
output_byte = bytearray()
while True:
try:
byte1 = fms[0 + 8 *chunk] & 1
byte2 = fms[1 + 8 *chunk] & 1
byte3 = fms[2 + 8 *chunk] & 1
byte4 = fms[3 + 8 *chunk] & 1
byte5 = fms[4 + 8 *chunk] & 1
byte6 = fms[5 + 8 *chunk] & 1
byte7 = fms[6 + 8 *chunk] & 1
byte8 = fms[7 + 8 *chunk] & 1
output_byte.append((byte1 <<7)|(byte2 <<6)|(byte3 << 5)|(byte4 <<4)|(byte5 << 3)| (byte6 << 2)| (byte7 << 1) | byte8)
chunk += 1
except:
break
w.write(output_byte)

得到图片,翻转一下,webdings字体

image-301115928904

对照翻译即可

image-0301115948522

结果为flag{8d9ad0457c1a8b603978085b0bffcf93}