BMZCTF第一次公开赛MISC(上)
计划参加参加第二次公开赛,先做一下第一次公开赛的题试一试
你猜猜flag
binwalk
分析一下
zip
文件,改后缀后需要密码才能打开
执行你猜猜flag.exe
9个大爷,9个密码,试一下发现压缩包密码是第四个大爷的
加压缩后得到了这几个文件
flag
在mdb
文件里
snake
压缩包需要密码
注释内容是Ook编码
使用这个网站解密
解压缩后得到三个文件,其中process
是py
文件
process
加密过程,将snake.jpg
通过process.py
处理为data.jpg
根据关键加密函数写解密程序
加密函数
def data_encode(bytedata):
data = int.from_bytes(bytedata,byteorder='big')
if (data % 2 == 0):
data = (data + 1) ^ 128
else:
data = (data - 1) ^ 128
data = bytes([data])
return data
解密脚本
def decode(data,snake):
for i in data.read():
if (i%2 == 0):
i = (i +1)^128
else:
i = (i - 1)^128
i = bytes([i])
snake.write(i)
data = open('data.jpg','rb')
snake = open('snake.jpg','wb+')
decode(data,snake)
我写的这个脚本和网上的其他wp的脚本不太一样,有一点bug。。。
就是图片下部分会有一点噪声
可以参考一下另一个wp
with open('snake.jpg','wb') as snake:
with open('data.jpg','rb') as data:
for i in data.read():
if (i%2 == 0):
i = (i +1)^128
else:
i = (i - 1)^128
i = bytes([i])
snake.write(i)
参考:https://www.pythonheidong.com/blog/article/727068/c0cc8687c70f894b8a25/
使用stegsolve
可以看到一行字
上网查一下可以知道sepent
是一种加密方法
对snake.jpg
使用steghide
查找信息
找到了一个key.txt
使用steghide extract -sf snake.jpg
提取出来key.txt
根据key
使用serpent
算法对data
文件解密
使用这个网站
根据我为数不多的经验,这里w
代表的是white
,b
代表的是black
,是个二维码
上脚本
import PIL
from PIL import Image
width = height = 200
img = Image.new("RGB", (width, height))
i = 0
file = open('odt.dat', 'rb')
char = str(file.read())
for w in range(width):
for h in range(height):
if (char[i]=='w'):
img.putpixel([w,h],(255,255,255))
else:
img.putpixel([w,h],(0, 0, 0))
i = i + 1
img.save('flag.png')
file.close()
扫码
ps:没刷完。。。脚本写了好多次都报错。。。。明天再刷吧