初学看到大神总结:http://www.cnblogs.com/xishaonian/p/7633038.html

                       http://blog.csdn.net/qq_37592482/article/details/78146259

觉得很有用。

    细节例题分析http://www.cnblogs.com/k1two2/p/5170178.html

备注:                                            隐写的载体是PNG的格式,如果是像之前的jpg图片的话就是不行的,原因是jpg图片对像数进行了有损的压缩,你修改的信息可能会被压缩的过程破坏。而PNG图片虽然也有压缩,但却是无损的压缩,这样子可以保持你修改的信息得到正确的表达,不至于丢失。BMP的图片也是一样的,是没有经过压缩的,可以发现BMP图片是特别的大的,因为BMP把所有的像数都按原样储存,没有压缩的过程。

                                                            一个jpg的图片。除了我们之前说到的隐藏在结束符之后的信息,jpg图片还可以把信息隐藏的exif的部分。exif的信息是jpg的头部插入了数码照片的信息,比如是用什么相机拍摄的。这些信息我们也是可以控制的,用查看属性的方式可以修改一部分的信息,还可以用exif编辑器来进行编辑。

解隐写题的思路:

    首先看看图片是不是图种,是,只要将图片保存为zip压缩包格式,然后解压出来就可以了
    然后使用binwalker分析图片,如果是有文件合成,分离
    有时信息藏在备注中(看属性)

   hex(查看文件头部尾部:文章:理解JPEG文件头的格式http://blog.csdn.net/ryfdizuo/article/details/41250775)
    工具stegsolve
    编程分析

神器:stegsolve,mp3stego

      0x01分析

1.图片属性信息

例如这个base64

 

2.文本文档查看具体内容

3.需要用到一个工具binwalk(在kali下自带的一个命令行工具),binwalk检查图片里是否存在其他文件,可以参考这篇Binwalk:后门(固件)分析利器(http://www.freebuf.com/sectool/15266.html)文章,以及kali官方对binwalk的概述和使用介绍(https://tools.kali.org/forensics/binwalk)。

      0x02分离(如果图片中隐藏另一张图片)

有以下几种方法:

(1)使用dd命令分离(linux/unix下)

我们可以使用dd命令分离出隐藏文件:

# dd if=carter.jpg of=carter-1.jpg skip=140147 bs=1

可以参考dd命令详解(http://www.cnblogs.com/qq78292959/archive/2012/02/23/2364760.html),这里if是指定输入文件,of是指定输出文件,skip是指定从输入文件开头跳过140147个块后再开始复制,bs设置每次读写块的大小为1字节 。

(2)使用foremost工具分离

foremost是一个基于文件文件头和尾部信息以及文件的内建数据结构恢复文件的命令行工具,win可以下载地址,Linux可以
通过下面命令安装使用:

# apt-get install foremost

安装foremost后你可以使用foremost -help查看使用帮助,这里最简单分离文件的命令为:

# foremost carter.jpg

当我们使用这行命令后,foremost会自动生成output目录存放分离出文件:

 

foremost -v -i baozou_new.jpg -o /root/Desktop/xx
支持恢复如下格式:avi, bmp, dll, doc, exe, gif, htm, jar, jpg, mbd, mov, mpg, pdf, png, ppt, rar, rif, sdw, sx, sxc, sxi,
sxw, vis, wav, wmv, xls, zip。

(3)hex编辑器分析文件

至于hex编辑器有很多,win下有用得较多的winhex,UltraEdit等,linux下有hexeditor等,这里我们以winhex为例手动分离,在分离之前我们需要知道一点关于jpg文件格式的知识,jpg格式文件开始的2字节是图像开始SOI(Start of Image,SOI)为FF D8,之后2个字节是JFIF应用数据块APPO(JFIF application segment)为FF E0 ,最后2个字节是图像文件结束标记EOI(end-of-file)为FF D9 详情参考jpg文件格式分析(http://blog.csdn.net/liuqz2009/article/details/8270355)

用winhex打开图片,通过Alt+G快捷键输入偏移地址22373跳转到另一张jpg的图像开始块,可以看到FF D8图像开始块。

CTF中图片隐藏文件分离方法总结

而图像结束块FF D9

选取使用Alt+1快捷键选取FF为开始的块,Alt+2选取D9为结束块,然后右键->Edit->Copy Block->Into New File保存相应的文件后缀   

(3)LSB隐写(png图片)

还有另一类隐藏的方法就是利用修改数据的方式来隐藏自己传递的信息.利用LSB来进行隐写.如果是要寻找这种LSB隐藏痕迹的话,有一个工具是个神器,可以来辅助我们进行分析。Stegsolve这个软件….打开之后,使用Stegsolve——Analyse——Frame Browser这个可以浏览三个颜色通道中的每一位

(4)qrcode,用在线的就可以解开http://tool.chinaz.com/qrcode/

 (5)其他

还有一种特例,它是事先制作一个hide.zip,里面放入隐藏的文件,再需要一张jpg图片example.jpg,然后再通过命令 copy /b example.jpg+hide.zip output.jpg生成output.jpg的新文件,原理是利用了copy命令,将两个文件以二进制方式连接起来,正常的jpg文件结束标志是FF D9,而图片查看器会忽视jpg结束符之后的内容,所以我们附加的hide.zip就不会影响到图像的正常显示。(参考AppLeU0的隐形术总结)

针对这种特例我们可以直接将jpg文件改为zip文件后缀(其他文件如rar文件也类似),就可以看到hide.zip压缩包里隐藏的文件。

比如当我们得到一张wh3r3_is_f14g.jpg文件:


当我们用winhex打开文件,发现wh3r3_is_f14g.jpg文件最后数据块不是FF D9 jpg文件的结束标志,而是zip文件的结束标志。

我们直接将文件改名为wh3r3_is_f14g.zip,打开得到flag.txt。


最后打开flag.txt得到flag。

0x03

gif图快速闪动的信息隐藏方式 :                     我们可以通过一些看图软件来固定每一帧进行观察,得到密钥

参考书籍:机械工业出版社《数据隐藏技术揭秘:破解多媒体、操作系统、移动设备和网络协议中的隐秘数据》下载pdf版:http://www.jb51.net/books/434273.html
                        

posted on 2017-10-11 16:32  Summer-LXN  阅读(5810)  评论(0编辑  收藏  举报