首页 > 其他分享 >【隐写】开局一张图,啥也看不出

【隐写】开局一张图,啥也看不出

时间:2023-06-06 18:04:34浏览次数:33  
标签:开局 combineImage img 隐写 jpg height width loadImage 看不出


最近遇到一个CTF题目,上面就一张图片是什么?啥都看不出来。今天来看一下CTF图片隐写题目,在图片里面隐藏一些不为人知的flag呢?

本次实验的地址为:《CTF Stegano练习之隐写6》。

首先来看题目。在实验主机上的C:\Stegano\6目录下提供了pic1.jpg以及pic2.jpg两个文件,请对这两文件进行分析,找到一个由两个英文单词组成的字符串Flag。

这两张图看起来都感觉都差不多全是黑白像素点,怎么去找flag呢?

这里有一个神器StegSolve,使用StegSolve提取Flag打开桌面上的StegSolve,然后选择菜单项“File”、“Open”打开pic1.jpg,然后选择菜单项“Analyse”、“Image Combiner”选择pic2.jpg文件,默认的XOR操作就可以看到Flag了,如图所示:

【隐写】开局一张图,啥也看不出_python

经过简单的分析,我们发现两个图片的尺寸都是300*300,而且文件大小都是71.6KB,所以就不可能存在某一个文件中隐藏了额外的数据的情况了。那么我们可以对两个文件进行结合分析,即将两个文件的像素RGB值进行XOR、ADD、SUB等操作,看看是否能看到有用的信息。而StegSolve可以十分方便的实现这些操作。

但是使用工具也有一点不好,就是工作的扩展性几乎为零,不能进行批量的自动化处理,而对于自己编写的脚本,自然可以十分方便的进行扩展,可以根据实际需求进行各种定制,并进行批量的自动化处理等。

对于这类题目强烈推荐使用Python的PIL库,脚本“C:\Stegano\6\xorImg.py”的源代码如下:

#!/usr/bin/env python

# – coding:utf-8 –

from PIL import Image

def loadImage(filename):

img = Image.open(filename)

width, height = img.size

img = img.convert(“RGB”)

pixel = img.load()

return width, height, pixel

def combineImage(file1, file2, file3):

w1, h1, p1 = loadImage(file1)

w2, h2, p2 = loadImage(file2)

width = min(w1, w2)

height = min(h1, h2)

img = Image.new(“RGB”, (width, height))

pix = img.load()

for y in xrange(0, height):

for x in xrange(0, width):

r1, g1, b1 = p1[x, y]

r2, g2, b2 = p2[x, y]

pix[x, y] = r1^r2, g1^g2, b1^b2

img.save(file3)

if name == “main”:

combineImage(“pic1.jpg”, “pic2.jpg”, “pic3.jpg”)

双击运行这个python脚本,就可以得到处理结果pic3.jpg,打开该图片就可以看到Flag字符串了,为AZADI TOWER。

脚本的代码比较简单,大致就是使用loadImage函数得到图片的长度、宽度、像素矩阵,然后在函数combineImage中对两个矩阵的像素点进行异或运算,并保存到第三张图片中。注意当两张图片的尺寸不一样的时候,我们进行了额外的处理,即只取最小的长度和宽度。

但是你这里只有XOR脚本,没有其他的。

下面继续来写一个通用的脚本,我们可以对该脚本进行修改,增加其可扩展的灵活性,通过定义一个运算函数实现通用的处理功能,比如我们可以定义xor、or、and三个操作的函数,就可以得到三个不同的处理结果了。脚本“C:\Stegano\6\combineImg.py”的源代码如下:

#!/usr/bin/env python

# – coding:utf-8 –

from PIL import Image

def xorFun(x, y):

return x^y

def orFun(x, y):

return x|y

def andFun(x, y):

return x&y

def loadImage(filename):

img = Image.open(filename)

width, height = img.size

img = img.convert(“RGB”)

pixel = img.load()

return width, height, pixel

def combineImage(file1, file2, file3, func):

w1, h1, p1 = loadImage(file1)

w2, h2, p2 = loadImage(file2)

width = min(w1, w2)

height = min(h1, h2)

img = Image.new(“RGB”, (width, height))

pix = img.load()

for y in xrange(0, height):

for x in xrange(0, width):

r1, g1, b1 = p1[x, y]

r2, g2, b2 = p2[x, y]

pix[x, y] = func(r1,r2), func(g1,g2), func(b1,b2)

img.save(file3)

if name == “main”:

combineImage(“pic1.jpg”, “pic2.jpg”, “xor.jpg”, xorFun)

combineImage(“pic1.jpg”, “pic2.jpg”, “or.jpg”, orFun)

combineImage(“pic1.jpg”, “pic2.jpg”, “and.jpg”, andFun)

这个题目不仅仅要会代码,重要的是从题目中找出隐写信息。因为题目有一定难度,才导致CTF比赛这么有竞争力。


标签:开局,combineImage,img,隐写,jpg,height,width,loadImage,看不出
From: https://blog.51cto.com/u_14601424/6426666

相关文章

  • 几个隐写题目的总结
    在几个比赛中以及网上汇总了几个隐写题目,都是关于图片的,所以为了以后的比赛可以写出一些脚本来备用,弥补stegsolve等隐写工具的不足。第一个题目题目是如图所示一个图片一堆杂色,隐隐约约好像有字,看了看元数据里没啥东西,binwalk也没隐藏啥东西,改了改高度也没隐藏的信息,用Stegsolve看......
  • CTFer成长记录——杂项专题·隐写
    一、题目链接https://ctf.show/challenges#萌新%20隐写2-82二、题意解释一个加密的压缩包,这里可能是伪加密或者需要暴力破解,题目提示:那么需要用工具进行暴力破解。三、解法步骤在知道需要暴力破解后,可以选择使用archpr这个工具。打开该工具,在工具中打开flag.zip压缩文件。......
  • CTF-MISC-流量隐写(持续更新)
    1.认证方式了解题目来源:NSSCTF    可以看到有token值,这是jwt的数据结构 ......
  • DASCTF Apr.2023 X SU战队2023开局之战 pwn
    DASCTFApr.2023XSU战队2023开局之战pwnfour漏洞是2.23的sspleak和未初始化漏洞主要的难点就是分析程序而且题中有一些干扰选项保护程序分析主函数有4个选项1:是干扰的选项(因为会关闭标准错位流,那就没法打sspleak)2:这个函数中有一个未初始化漏洞3:就是在这个函数......
  • web: pdf_converter | DASCTF Apr.2023 X SU战队2023开局之战
    题目内容这道题是给源码的,是个thinkphp项目,可以直接看看控制器就一个pdf方法,用了dompdf库,然后把用户传入的content写到pdf中。既然这么明显,那就搜索dompdf漏洞知识点首先看到:https://ghostasky.github.io/2022/03/19/dompdf/首先看到这里说,如果传入自定义的c......
  • 文件隐写
    零宽度字符隐写零宽度字符是一些不可见、不可打印的字符,在页面中用于调整字符的显示格式。零宽度字符本质上是unicode编码。零宽度字符隐写:需要加密的内容转换为二进制,然后将二进制转换成一系列的零宽度字符,这样加密的内容就被隐藏了(普通文本编辑器不显示零宽度字符)。常见零宽......
  • 从0开始学杂项 第四期:隐写分析(3) GIF 图片隐写
    Misc学习(四)-隐写分析:GIF图片隐写在上一期,我主要讲了讲自己对于隐写分析中的PNG图片隐写的一些浅薄理解,这一期我们继续对隐写分析的学习,学习的是图片隐写中的GIF图片隐写。顺便一提,杂项里的隐写方式很多很杂,有些时候甚至是出题者自己设计的隐写算法,我只能先写一些简单的......
  • CTF 萌新隐写(1)
    题目一描述喜欢用生日做密码。有一个zip文件。思路及解答生日做密码,生日格式有很多种,最简单的是纯数字,八位数字直接爆破。得到口令:19981000打开文件得出flag:flag{brute_force}题目一描述只有一个zip文件思路及解答解压后是一个word文档,打开文档发现是然后什么也没有......
  • 从0开始学杂项 第三期:隐写分析(2) PNG图片隐写
    Misc学习(三)-隐写分析:PNG图片隐写在上一期,我主要讲了讲自己对于隐写分析、信息搜集和直接附加的一些浅薄理解,这一期我们继续对隐写分析的学习,开始讲隐写分析最喜欢考的一项——图片隐写,我们首先学习的是图片隐写中最基础的PNG图片隐写。(此文并非教学,我只是在这里记下我的笔......
  • 【语音隐写】基于小波变换实现音频数字水印嵌入提取附Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......