我们在杂项隐写题目中通常涉及到将被隐藏的数据转换成图像以获取最终的Flag。最终生成的图像可能是包含Flag文本的图像,也可能是一张二维码。
二维码
简单的带flag的图片
那么,我们如何借助Python将隐写数据还原成图像呢?
要处理图像,我们首先要导入图像处理的模块,Python关于图像处理的第三方模块有很多,这里我们选择Pillow
Python图像库PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。而现在其名称已经换成了Pillow。
可以通过pip安装Pillow
pip install pillow
Pillow的基本用法如下
- Image.open(file) #打开图像文件
- Image.new(format, size) #用指定格式创建图像
-
im.save(outfile, format, options…) #根据一定的格式和选项保存图像
-
im.load() #返回该图像的像素对象
-
im.show() #显示图像
好了现在你已经学会了Python处理图像的基本操作,现在请将以下数据转换成图像:
哈,这是一道比赛题目解出的隐写数据,很明显,这是个二维码,至于为什么,自己想。
这些01和后面的无关数据以" l "这个字符分隔,所以代码编写如下
from PIL import Image
#python不能读取二进制文件,要先转成utf-8编码文本,再用utf-8编码打开
with open('data.txt',encoding='utf-8') as data:
strdata=data.read()
validdata=strdata.split('l')[0]
width=int((len(validdata))**0.5)
im=Image.new('RGB',(width,width))
pixs=im.load()
index=0
for i in range(width):
for j in range(width):
if validdata[index]=='1':
color=(0,0,0)
else:
color=(255,255,255)
pixs[i,j]=color
index+=1
im.show()
于是,我们就可以得到一张二维码↓
等下,这二维码好像有点不太对,但是没有关西,ps调整一下就能扫了。
OK,这就是本篇文章的所有内容了,如果有那些地方看不懂,欢迎线下讨论(好像新注册的公众号的问不能留言的说)
原文始发于微信公众号(渭南师院网络信息安全社):[CTF/MISC]如何使用Python生成图像以还原隐写内容
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论