CIVC信息安全挑战赛初赛
MISC
easy! 23333!
逆序的zip
with open('data','rb') as fr:
data = fr.read()
with open('data.zip','wb') as fw:
fw.write(data[::-1])
得到一段零宽字符
解零宽
结果为flag{maybe_you_kn0w_the_Unicode_Steganography}
你也很困惑吗?
分析文件结构,由于后缀是zip
,其头为504b0304
,可以看出是按位进行异或
运算
根据最后的数据和数据总量,由于最后一次的原始数据0x00
经过异或运算后得到0x92
,也就是146
,而0x1FF891
对256
进行模运算后,恰好得到146
因此可以知道原始数据是按照(1-256)%256
的按位异或运算得来
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
得到压缩包内容
两张图片宽高都一样,像素异或
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
高度相似
盲水印
得到flagflag{AC4E331C-A2D0-CA2C-93D6-B9E22F19A373}
数字游戏
在线解数独6185793217986498235415632727314893876476495213543219823856
数独图片提示对角线
左上右下+右上左下得到654917276261618641
,可以解出flag.zip
查看key.txt
得到两个列表,这两个列表长度都为25,且有数字7,而25*25的二维码的定位符长度恰好为7
实际上是Nonograms数图谜题
将数据填入自动生成
扫码得到Take1tEasy
解压得到flagflag{c6ebcf84bcd54bac0803086a4630f673}
这是隐写哦
播放音频时,初始几秒存在噪音,读取采样点数据查看,发现01串匹配png
文件头
提取时,只需要提取低位数据即可,进行与运算
import wave
with wave.open('flag.wav', 'rb') as wav:
params = wav.getparams()
frames = bytearray(wav.readframes(params.nframes))
binary_text = ''
print(frames[0:8])
for frame in frames:
bit = frame & 0x01
binary_text += str(bit)
with open('flag.png','wb') as fw:
for i in range(0, len(binary_text), 8):
byte = binary_text[i:i+8]
b = int(byte,2)
fw.write(b.to_bytes(1,byteorder='big'))
得到图片,翻转一下,webdings字体
对照翻译即可
结果为flag{8d9ad0457c1a8b603978085b0bffcf93}