CTF【每日一题20160610】

图片中的英语

一恒河沙中有三千世界,一张图里也可以有很多东西。

不多说了,答案是这个图片包含的那句英文的所有单词的首字母。

首字母中的首字母要大写,答案格式是wctf{一坨首字母}

加油吧少年!看好你哦~

CTF【每日一题20160610】_第1张图片


-----------------------------------------------题目与答案的分界线-----------------------------------------

分析

这个题应该也是考察隐写术的破解

png图片的文件头一般为

 

文件类型

文件头标识(HEX

文件描述

PNG

89 50 4E

PNG

89 50 4E 47

png

89 50 4E 47 0D 0A

PNG Image File

png

89 50 4E 47 0D 0A 1A 0A

PNG Image File

winhex打开该图片,的确前8字节为89 50 4E 47 0D 0A 1A 0A。文件中剩余的部分由3个以上的PNG的数据块(Chunk)按照特定的顺序组成,因此,一个标准的PNG文件结构应该如下:

PNG文件标志

PNG数据块

……

PNG数据块

PNG数据块(Chunk)

PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码,但规范提倡支持可选数据块。

下表就是PNG中数据块的类别,其中,关键数据块部分我们使用深色背景加以区分。

PNG文件格式中的数据块

数据块符号

数据块名称

多数据块

可选否

位置限制

IHDR

文件头数据块

第一块

cHRM

基色和白色点数据块

在PLTE和IDAT之前

gAMA

图像γ数据块

在PLTE和IDAT之前

sBIT

样本有效位数据块

在PLTE和IDAT之前

PLTE

调色板数据块

在IDAT之前

bKGD

背景颜色数据块

在PLTE之后IDAT之前

hIST

图像直方图数据块

在PLTE之后IDAT之前

tRNS

图像透明数据块

在PLTE之后IDAT之前

oFFs

(专用公共数据块)

在IDAT之前

pHYs

物理像素尺寸数据块

在IDAT之前

sCAL

(专用公共数据块)

在IDAT之前

IDAT

图像数据块

与其他IDAT连续

tIME

图像最后修改时间数据块

无限制

tEXt

文本信息数据块

无限制

zTXt

压缩文本数据块

无限制

fRAc

(专用公共数据块)

无限制

gIFg

(专用公共数据块)

无限制

gIFt

(专用公共数据块)

无限制

gIFx

(专用公共数据块)

无限制

IEND

图像结束数据

最后一个数据块

为了简单起见,我们假设在我们使用的PNG文件中,这4个数据块按以上先后顺序进行存储,并且都只出现一次。

 

PNG文件中,每个数据块由4个部分组成,如下:

名称

字节数

说明

Length (长度)

4字节

指定数据块中数据域的长度,其长度不超过(231-1)字节

Chunk Type Code (数据块类型码)

4字节

数据块类型码由ASCII字母(A-Z和a-z)组成

Chunk Data (数据块数据)

可变长度

存储按照Chunk Type Code指定的数据

CRC (循环冗余检测)

4字节

存储用来检测是否有错误的循环冗余码

 

IEND

图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。

如果我们仔细观察PNG文件,我们会发现,文件的结尾12个字符看起来总应该是这样的:

00 00 00 00 49 45 4E 44 AE 42 60 82

不难明白,由于数据块结构的定义,IEND数据块的长度总是0(00 00 00 00,除非人为加入信息),数据标识总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。

 

用winhex打开图片,找49454E44,发现一个IEND块,而后面追加了一个有趣的东西:Rar,还有flag.jpg,我猜后面加了一个rar的压缩包,里面还有个jpg文件。RAR文件头标志是:52 61 72 21。

CTF【每日一题20160610】_第2张图片

 

还可以用kali下的binwalk查一下,把图片(6.png)存到Pictures文件里,在terminal中输出binwalk6.png

CTF【每日一题20160610】_第3张图片

看到后面有RAR文件吧,那么怎么解出来?

可以用winhex,在RAR文件头标志52 61 7221处设置“begin of block”,然后在文件末尾设置”end of block”,意思是选中这些数据,点edit里的copy block into new file,文件后缀名为rar即可。

 CTF【每日一题20160610】_第4张图片

解压rar后有flag.jpg,在winhex中打开它看一下。

Jpg文件格式标志位:

jpg; jpeg

FF D8 FF

jpg; jpe; jpeg

FF D8 FF E0 00

JPG Graphic File

jpg; jpe; jpeg

FF D8 FF FE 00

JPG Graphic File

发现这个flag.jpg里面没有明文key,可能是用到更高级的隐写术。用binwalk也没发现什么。

 CTF【每日一题20160610】_第5张图片

上面说到的隐藏方式,是利用了增加数据的方式,把数据直接增加在了jpg后面。还有另一类隐藏的方法,就是利用了修改数据的方式来隐藏自己传递的信息。

一种常见的方式是利用LSB来进行隐写,LSB也就是最低有效位 (Least Significant Bit)。原理就是图片中的像数一般是由三种颜色组成,即三原色,由这三种原色可以组成其他各种颜色,例如在PNG图片的储存中,每个颜色会有8bit,LSB隐写就是修改了像数中的最低的1bit,在人眼看来是看不出来区别的,也把信息隐藏起来了。譬如我们想把’A’隐藏进来的话,如下图,就可以把A转成16进制的0x61再转成二进制的01100001,再修改为红色通道的最低位为这些二进制串。

如果是要寻找这种LSB隐藏痕迹的话,有一个工具是个神器,可以来辅助我们进行分析。Stegsolve这个软件的下载地址是

http://www.caesum.com/handbook/Stegsolve.jar

打开之后,使用Stegsolve——Analyse——Frame Browser这个可以浏览三个颜色通道中的每一位,可以在红色通道的最低位,发现一个二维码,然后可以扫描得到结果。

但是这个题,你用stegsolve还是不行。它只有1帧,看来不是叠加型的隐写术。

 

数据在隐藏的时候,我们常常是需要先分析是数据隐藏在哪里,也就是他在利用是什么做载体,之后才可以进一步的分析是加密或编码的。这也就是说我们要对一个图片的格式要有了解,才能知道哪些地方是可疑的,哪些是可以隐藏起信息的,会有冗余的成分在。举个例子吧,比如给了一个jpg的图片。除了我们之前说到的隐藏在结束符之后的信息,jpg图片还可以把信息隐藏的exif的部分。exif的信息是jpg的头部插入了数码照片的信息,比如是用什么相机拍摄的。这些信息我们也是可以控制的,用查看属性的方式可以修改一部分的信息,还可以用exif编辑器来进行编辑。Power_exif这个可以用来编辑。

 CTF【每日一题20160610】_第6张图片

但这个图,打开属性窗口,也没什么特别的。

 

总的来说,这图片怎么分析都没有收获。

最后百度一下,结果发现是大笑江湖的一句台词:May the force be with you。题目中又有提示:答案是这个图片包含的那句英文的所有单词的首字母,首字母中的首字母要大写。答案呼之欲出了~。所以做题有时候可能用的不是纯技术。

 答案:wctf{Mtfbwy}


你可能感兴趣的:(CTF)