码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-01-06 23:20:33      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:usr   odi   1.5   二维码   roc   结果   water   .com   color   

(一).题目介绍:

    题目是一张图片,给的提示是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中的一道图片隐写

标签:usr   odi   1.5   二维码   roc   结果   water   .com   color   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!