KaiWn 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 第一部分分析了PNG的文件格式,介绍了如何在不影响PNG文件正常浏览的情况下,将有效载荷以辅助数据块文本的格式插入PNG文件中。这次,我们将介绍一种在图像数据块IDAT下隐藏有效载荷的技术,——LSB隐写术。 这幅画引自http://datagenetics.com/blog/march12012/index.html 0x01 简介 IDAT数据块 存储图像编号数据 数据流可以包含多个连续的图像数据块。 压缩采用LZ77算法的衍生算法。 可以用zlib解压。 zlib解压缩的python实现代码如下: #!/usr/bin/env python 导入zlib 导入binascii IDAT=' 789 C5 d 91011280400802 BF 04 ffff 5c 75294 b 5537738 a 21 a 27d 1 e 49 CFD 17 db 3937 a 92 e 7 e 603880 a6 d 485100901 FB 0410153350 de 83112 ea 2d 51 c 54 ce 2e 585 b 15 a 2 fc 78 e 872 f 51 c 6 fc 18818882 f解码(“十六进制”) result=binascii . hexlify(zlib . decompress(IDAT)) 打印结果 引自http://drops.wooyun.org/tips/4862 LSB隐写 LSB最低有效位的全称,最低有效位 PNG文件中图像的数量一般由RGB三原色(红绿蓝)组成,每种颜色占用8位,取值范围为0x00~0xFF,即有256种颜色,其中256的三次方,即16777216种颜色。 人眼可以分辨大约一千万种不同的颜色。 这意味着人眼无法分辨剩下的颜色,大约有6777216种。 LSB隐写是修改RGB颜色分量的最低位(LSB),人眼不会注意到这前后的变化。 每个图像号可以携带3位信息。 0x02 Python实现 关于github上的LSB隐写术:一个值得学习的项目; https://github.com/RobinDavid/LSB-Steganography https://github.com/cyberinc/cloacked-pixel 以下是cloacked-pixel的测试。 测试图片: 源文件下载地址: http://www . easyicon . net/language . en/1119182-ender man _ Png _ icon . html 1、 加密 运行: python lsb.py隐藏big.png 1 . txt 123456 参数说明: 隐藏:表示加密模式。 Big.png:要加密的png图像 1.txt:存储有效负载 13456:加密密码 运行后生成图片big.png-stego.png。 画 分析加密图像big.png-stego.png的格式,使用上一篇文章介绍的check.cpp。 下载地址: https://github . com/3g student/PNG-Steganography/blob/master/check . CPP 加密前后对比如图所示 Cloacked-pixel会在加密过程中删除其他数据块,只留下关键数据块IDAT。 使用HexEditorNeo查看加密图像也可以印证我们的判断,如图。 注: 当然,你也可以通过阅读源代码来分析它 2、 解密 运行: python lsb.py摘录big.png-stego.png 3 . txt 123456 参数说明: Extract:表示解密模式。 要解密的png图像 3.txt:存储导出的有效载荷。 13456:解密密码 如图所示,有效载荷被成功解密。 3、 分析 运行: python lsb.py分析big.png-stego.png 参数说明: 分析:表示分析模式。 Big.png-stego.png:要分析的png图像 运行后,图像将被分析、分块,并标记每个块的最低有效位。 画 这是加密前后的对比图。 用肉眼几乎无法分辨图片之间的差异,因为有效载荷越短,分析图中的差异就越小。在这里,我们可以使用软件来帮助分析。 工具名称:Stegsolve 下载地址: http://www.caesum.com/handbook/Stegsolve.jar 环境搭建: 安装jdk并配置java环境 用Stegsolve打开a.png,选择分析-图像合并器,然后选择b.png。 进行异或比较(XOR),如图,检测细微差别。 0x03 C++实现 Grant Curell分享了用C实现的方法,很值得学习,所以在这里介绍和测试。 文章地址: http://www . code project . com/Articles/581298/PNG-Image-Steganography-with-libpng 作者: 格兰特库里尔 代码下载链接: http://www.codeproject.com/KB/security/581298/PNG_stego.zip 测试环境: Win7 X64 vs2012 1、 直接编译会报错 项目zlib可以直接编译成功。 使用以下错误编译项目libpng: 致命错误C1083:无法打开包含文件:“zlib.h”:没有这样的文件或目录 解决方法: 包含目录需要添加到项目中。 右键单击属性VC目录 选择包括目录。 画 添加zlib-1.2.3并输入: .\.\.\ zlib-1 . 2 . 3; 画 同样,错误报告如下: 致命错误LNK1181:无法打开输入文件“zlib.lib” 解决方法: 需要在项目中添加lib目录。 选择库目录。 添加zlib.lib并输入: .\.\.\LIB调试; 如图所示,编译成功。 Tips: 也可以在包含目录和库目录中直接指定绝对路径(如c:\ test \ coaked-pixel-master \ png _ stego \ zlib-1 . 2 . 3)。在这个例子中,\表示相对路径。 编译项目PNG_encode_decode,同样出现编译错误。 解决方法: 在包含目录下添加zlib-1.2.3和libpng-1.2.37-src,并输入: ./zlib-1 . 2 . 3;/libpng-1 . 2 . 37-src; 在库目录下添加libpng.lib并输入: .\LIB调试; 如图,最终编译成功。 注: 三个项目之间有调用关系,所以编译顺序是zlib-libpng-PNG_encode_decode。 2、 加密测试 要加密的文件:big.png 有效负载文件:1.txt 输出加密文件:bigen.png 项目PNG_encode_decode中的main.cpp修改如下: #include 'PNG_file.h ' void main() { PNG _ file link=PNG _ file(' big . PNG '); link . encode(' 1 . txt '); link . output png(' bigen . png '); } 运行生成bigen.png,如图 比较加密前后的文件,大小有所不同,如图所示 LSB隐写原则上不会改变文件大小,所以找出原因。 使用check.cpp解析数据块目录,发现加密后多了几个tTXt段。 画 使用HexEditorNeo查看加密图像的详细信息,如图所示。 加密图像包含原始图像的一些信息,导致图像大小不同。 3、 去掉多余信息 方法a: 使用HexEditorNeo直接删除冗余信息。 方法b: 使用compress.cpp 下载地址: https://github . com/3g student/PNG-Steganography/blob/master/compress . CPP 生成去除冗余tTXt段的加密图像bigensimple.png,如图所示。 Bigensimple.png和原图一样大,如图所示。 4、 解密测试 项目PNG_encode_decode中的main.cpp修改如下: #include 'PNG_file.h ' void main() { PNG _ file link=PNG _ file(' bigen simple . PNG '); link . decode(' 2 . txt '); } 运行后,生成2.txt以获得加密的有效负载。 (5) 分析 对于LSB隐写,可以使用Stegsolve辅助分析。 打开加密图片后,选择分析-数据提取。 位平面选择Reg的第0位,绿色和蓝色。 位顺序选择LSB优先 位平面顺序选择RGB 您可以看到加密的有效负载,如图所示。 注: 当然,你可以通过阅读程序源代码找到图片的加密数据。这个例子只是给图像分析一些参考思路。 0x04 小结 介绍了如何分别用Python和C实现PNG文件的LSB隐写,常见的LSB隐写数据也可以参照文中的分析思路进行提取和分析。 注: 修改后的PNG_stego项目已经上传到github: https://github.com/3gstudent/PNG_stego-test 更多学习资料: https://github.com/fgrimme/Matroschka https://waronpants.net/article/png-steganography/ https://waronpants.net/pngsteg/trunk/steg.c http://www1.chapman.edu/~nabav100/ImgStegano/ http://www . libpng . org/pub/png/libpng-1 . 2 . 5-manual . html # section-3.1 https://www.w3.org/TR/PNG/ 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子