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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vape Nation - IceCTF中的一道图片隐写相关的知识,希望对你有一定的参考价值。

(一).题目介绍:

    题目是一张图片,给的提示是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中的一道图片隐写的主要内容,如果未能解决你的问题,请参考以下文章

icectf修复图片解答

CodeForces - 744A Hongcow Builds A Nation

IceCTF Corrupt Transmission

IceCTF

[视频]来自佛山的Vape——Sandbox沙盒

Codeforces 745C:Hongcow Builds A Nation(并查集)