跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

隐写术技术3354 LSB文件隐写术


KaiWn

推荐的帖子

0x00 前言

第一部分分析了PNG的文件格式,介绍了如何在不影响PNG文件正常浏览的情况下,将有效载荷以辅助数据块文本的格式插入PNG文件中。这次,我们将介绍一种在图像数据块IDAT下隐藏有效载荷的技术,——LSB隐写术。

0.png

这幅画引自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的测试。

测试图片:

big.png

源文件下载地址:

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。

2-1.PNG

分析加密图像big.png-stego.png的格式,使用上一篇文章介绍的check.cpp。

下载地址:

https://github . com/3g student/PNG-Steganography/blob/master/check . CPP

加密前后对比如图所示

2-3.PNG

Cloacked-pixel会在加密过程中删除其他数据块,只留下关键数据块IDAT。

使用HexEditorNeo查看加密图像也可以印证我们的判断,如图。

2-4.PNG

注:

当然,你也可以通过阅读源代码来分析它

2、 解密

运行:

python lsb.py摘录big.png-stego.png 3 . txt 123456

参数说明:

Extract:表示解密模式。

要解密的png图像

3.txt:存储导出的有效载荷。

13456:解密密码

如图所示,有效载荷被成功解密。

2-2.PNG

3、 分析

运行:

python lsb.py分析big.png-stego.png

参数说明:

分析:表示分析模式。

Big.png-stego.png:要分析的png图像

运行后,图像将被分析、分块,并标记每个块的最低有效位。

2-5.PNG

这是加密前后的对比图。

2-6.png

用肉眼几乎无法分辨图片之间的差异,因为有效载荷越短,分析图中的差异就越小。在这里,我们可以使用软件来帮助分析。

工具名称:Stegsolve

下载地址:

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

环境搭建:

安装jdk并配置java环境

用Stegsolve打开a.png,选择分析-图像合并器,然后选择b.png。

进行异或比较(XOR),如图,检测细微差别。

2-7.png

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目录

选择包括目录。

2-8.png

添加zlib-1.2.3并输入:

.\.\.\ zlib-1 . 2 . 3;

2-9.png

同样,错误报告如下:

致命错误LNK1181:无法打开输入文件“zlib.lib”

解决方法:

需要在项目中添加lib目录。

选择库目录。

添加zlib.lib并输入:

.\.\.\LIB调试;

如图所示,编译成功。

2-10.png

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调试;

如图,最终编译成功。

2-11.PNG

注:

三个项目之间有调用关系,所以编译顺序是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,如图

bigen.png

比较加密前后的文件,大小有所不同,如图所示

2-12.png

LSB隐写原则上不会改变文件大小,所以找出原因。

使用check.cpp解析数据块目录,发现加密后多了几个tTXt段。

2-13.png

使用HexEditorNeo查看加密图像的详细信息,如图所示。

2-14.png

加密图像包含原始图像的一些信息,导致图像大小不同。

3、 去掉多余信息

方法a:

使用HexEditorNeo直接删除冗余信息。

方法b:

使用compress.cpp

下载地址:

https://github . com/3g student/PNG-Steganography/blob/master/compress . CPP

生成去除冗余tTXt段的加密图像bigensimple.png,如图所示。

bigensimple.png

Bigensimple.png和原图一样大,如图所示。

2-15.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

您可以看到加密的有效负载,如图所示。

2-16.png

注:

当然,你可以通过阅读程序源代码找到图片的加密数据。这个例子只是给图像分析一些参考思路。

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/

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...