首页 > 其他 > 详细

Vape Nation - IceCTF中的一道图片隐写

时间:2018-01-06 23:14:31      阅读:558      评论:0      收藏:0      [点我收藏+]
(一).题目介绍:

    题目是一张图片,给的提示是go green题目如下图:

技术分享图片

图片长这样的:

技术分享图片



(二).分析:

    根据提示,很大很大可能与绿色有关,于是先去除绿色,发现没啥发现,如下图:

技术分享图片


于是想到可能与绿色的最低位有关系,于是提取出来写到文本里,可能可以用来生成二维码之类的,如下:

技术分享图片

于是把这这些值作为黑白像素生成图片,生成结果如下:


技术分享图片



(三).贴上代码:

    (1).去除绿色:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from PIL import Image

#打开下载过来的图片  
png1 = Image.open("vape_nation.png")

#创建一个和现有图片大小一样的图片
png2 = Image.new("RGBA",(png1.width,png1.height))

#读取像素中的rgb值,并将绿色的值设为0
for x in range(0,png1.height):
	for y in range(0,png1.width):
		r,g,b = png1.getpixel((x,y))
		
		png2.putpixel((x, y), (r, 0, b))

png1.show()
png2.show()

     (2).提取绿色通道最低位:

#!usr/bin/env python
# -*- coding:utf-8 -*-

from PIL import Image

#打开下载过来的图片  
png1 = Image.open("vape_nation.png")

#创建一个和现有图片大小一样的图片
#png2 = Image.new("RGBA", (png1.width, png1.height))

#创建一个文件用来保存绿色通道最低位

f = open("g.txt", "w")

#读取像素中的rgb值,并将绿色的值设为0
for x in range(0,png1.height):
	for y in range(0,png1.width):
		r,g,b = png1.getpixel((x,y))
		
		#绿色通道的值对0x01进行位运算写入文件
		f.write(str(g & 1))
#显示
#png1.show()
#png2.show()
f.close()

    (3).通过绿色通道最低位,生成图片:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from PIL import Image

#打开下载过来的图片  
png1 = Image.open("vape_nation.png")

#创建一个和现有图片大小一样的图片
png2 = Image.new("RGBA",(png1.width,png1.height))

#读取像素中的rgb值,并提取出green通道的最低位的值
for x in range(0,png1.height):
	for y in range(0,png1.width):
		r,g,b = png1.getpixel((x,y))
		
		#根据最低位的值生成一个黑白的图片
		if g&1 == 1:
			png2.putpixel((x,y),(255,255,255))
		else:
			png2.putpixel((x,y),(0,0,0))

png2.show()



(四).说明:

    反推这种方法,也可以将其他内容写到图片中,从而实现信息隐藏的效果。



(五).如有不足之处,还请斧正。

Vape Nation - IceCTF中的一道图片隐写

原文:http://blog.51cto.com/daye8ku/2058211

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!