目录
1.信息技术和个性化网络服务的飞速发展,使得人们越来越依赖于网络服务平台进行数据同步和共享。然而,这也带了用户个人数据被窃取的风险,对个人信息安全构成威胁。
2.图像作为信息的主要载体,其安全性尤为重要。传统的加密技术虽然能有效保护图像信息,但在某些情况下,隐写技术因其隐蔽性更高而更具优势。
3.隐写技术通过将待传输信息嵌入到图像中,借助载体来掩盖秘密信息的传输,从而达到保护信息安全的目的。
1.图片隐写是一种将信息隐藏在图片中的技术。通过修改图片的像素值,可以将需要隐藏的信息嵌入到图片中,而不会影响图片的正常显示。在提取信息时,可以通过相应的算法和工具提取出隐藏在像素值中的信息。
2.隐写技术的原理:通过改变载体(如图像)的某些特征(如像素值、颜色空间等),将秘密信息嵌入其中,同时保持载体的视觉质量不受影响或影响极小。
3.隐写技术的挑战:如何在保证嵌入信息量的同时,降低对载体视觉质量的影响;如何设计有效的隐写算法,以抵抗隐写分析技术的检测。
4.图片文件隐写技术的特点:利用图像文件的冗余信息(如颜色空间、像素值等)进行信息隐藏,具有隐蔽性好、嵌入容量大等优点。
各种不同格式的图像文件的头文件都不相同,解码编码方式也不相同,应针对不同的文件格式,应用不同的隐写技术方法
用记事本打开图片,可以在一群乱码的结尾写入信息。
PNG图像隐写
PNG图像格式文件由一个8字节的PNG文件标识域和3个以上的后续数据块如:IHDR、IDAT、IEND等组成
如:
89 50 4E 47 0D 0A 1A 0A
89:用于检测传输系统是否支持8位的字符编码,用以减少将文本文件被错误的识别成PNG文件的机会,反之亦然
50 4E 47:PNG每个字母对应的ASCII,让用户可以使用文本编辑器查看时,识别出是PNG文件
0D 0A:DOS风格的换行符,用于DOS-Unix数据的换行符转换
1A:在DOS命令行下,用于阻止文件显示的文件结束符
0A:Unix风格的换行符,用于Unix-DOS换行符的转换
↑此png图片的十六进制文件如下
通过对文件的十六进制数据直接修改,即可达到隐写信息的效果,此种方法隐蔽性高,如果不检查文件的十六进制数据,则几乎不能发现隐写的信息,
PNG文件中,每个数据块都由四个部分组成,如下:
长度(Length):指定数据块中数据区域的长度,长度不可超过(2^31-1)个字节
数据块类型码(Chunk Type Code):数据块类型码由ASCII字母(A-Z和a-z)组成的"数据块符号"
数据块数据(Chunk Data):存储数据块类型码指定的数据
循环冗余检测(CRC):存储用来检测是否文件传输有误的循环冗余码
对宽高进行修改:
结果图片变为 1px * 1px 大小
实现了图片其他区域信息的隐藏
JPG图片隐写
jpg图片的头数据为
FF D8 FF
jpg图片高度修改:
EXIF信息
在我们拍摄图片时,exif可以记录数码照片的属性信息和拍摄数据
右击图片,点击熟悉,选择详细信息,这里面可以看到图片拍摄的一些值,有时候还能找到经纬度
通过对EXIF信息的修改即可实现信息的隐藏
BMP图片隐写
BMP图片格式
BMP 文件格式能够存储单色和彩色的二维数字图像,具有各种颜色深度,并且可以选择使用数据压缩、alpha 通道和颜色配置文件
bmp的头文件数据为
42 4D
头数据后四位是图片大小
由于个人计算机都是以小端序,所以数据要从右往左写
0x002c268e == 2893454(Byte) == 2.75M
GIF图片隐写
gif图片是动图,它是由一帧一帧的图片拼接而成
gif头文件数据为
47 49 46 38 39 61
盲水印是一种肉眼不可见的水印方式,可以保持图片美观的同时,保护版权,隐藏式的水印是以数字数据的方式加入音频、图片或影片中,但在一般的状况下无法被看见
LSB隐写
lsb隐写题在ctf中也经常考到,LSB即为最低有效位,我们知道,图片中的图像像素一般是由RGB三原色(红绿蓝)组成,每一种颜色占用8位,取值范围为0x00~0xFF,即有256种颜色,一共包含了256的3次方的颜色,
LSB隐写就是修改RGB颜色分量的最低二进制位也就是最低有效位(LSB),而人类的眼睛不会注意到这前后的变化,每个像数可以携带3比特的信息。
Binwalk是一款快速、易用,用于分析,逆向工程和提取固件映像的工具。
最直接的我们可以用来检测图片中是否有隐藏的文件。
foremost是一个控制台程序,用于根据页眉,页脚和内部数据结构恢复文件。
最直接的我们可以将图片中的隐藏文件拆分出来。
010 Editor 是一款专业的文本编辑器和十六进制编辑器,旨在快速轻松地编辑计算机上任何文件的内容。
应用方法:
1.修改图片的高度来查看隐藏信息
如图,00 00 03 9E代表宽 00 00 05 FF 代表高
我们把高度变大一点 就可以看到密码了
2.查看压缩包是否是伪加密
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
01 00:全局方式位标记(判断有无加密的重要标志)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
隐写图片查看的神器------stegsolve
OurSecret是一个图片解密的工具
ARCHPR和Ziperello
这两个工具都是用来爆破压缩包的。
专门用来破解伪加密的一个工具,非常好用。
使用ZipCenOp.jar(需要java环境),在cmd中使用
java -jar ZipCenOp.jar r xxx.zip
Exif按照JPEG的规格在JPEG中插入一些图像/数字相机的信息数据以及缩略图象,可以通过与JPEG兼容的互联网浏览器/图片浏览器/图像处理等一些软件来查看Exif格式的图像文件,就跟浏览通常的JPEG图像文件一样。
图片右键属性,查看exif或查看详细信息,在相关选项卡中查找flag信息。
当两张jpg图片外观、大小、像素都基本相同时,可以考虑进行综合分析,即将两个文件的像素RGB值进行XOR、ADD、SUB等操作,看能否得到有用的信息,StegSolve可以方便的进行这些操作。
Zsteg工具 检测LSB隐写
使用方式:zsteg xxx.png
这个工具在kali里面自带有,可以直接使用。
Wbstego4工具
解密通过lsb加密的图片
TweakPNG是一款简单易用的PNG图像浏览工具,它允许查看和修改一些PNG图像文件的元信息存储。
使用场景:文件头正常却无法打开文件,利用TweakPNG修改CRC。
Bftools用于解密图片信息
使用场景:在windows的cmd下,对加密过的图片进行解密
格式:
Bftools.exe decode braincopter 图片名字 --output 输出的文件名
Bftools.exe run 输出的文件名
bftools.exe decode braincopter 1.png --output 2.png
bftools.exe run 2.png
基于Pyhton的图像隐写术
from PIL import Image
# Convert encoding data into 8-bit binary
# form using ASCII value of characters
def genData(data):
newd = []
for i in data:
newd.append(format(ord(i), '08b'))
return newd
# Pixels are modified according to the
# 8-bit binary data and finally returned
def modPix(pix, data):
datalist = genData(data)
lendata = len(datalist)
imdata = iter(pix)
for i in range(lendata):
pix = [value for value in imdata.__next__()[:3] +
imdata.__next__()[:3] +
imdata.__next__()[:3]]
for j in range(0, 8):
if (datalist[i][j] == '0' and pix[j] % 2 != 0):
pix[j] -= 1
elif (datalist[i][j] == '1' and pix[j] % 2 == 0):
if (pix[j] != 0):
pix[j] -= 1
else:
pix[j] += 1
# pix[j] -= 1
# Eighth pixel of every set tells
# whether to stop ot read further.
# 0 means keep reading; 1 means thec
# message is over.
if (i == lendata - 1):
if (pix[-1] % 2 == 0):
if (pix[-1] != 0):
pix[-1] -= 1
else:
pix[-1] += 1
else:
if (pix[-1] % 2 != 0):
pix[-1] -= 1
pix = tuple(pix)
yield pix[0:3]
yield pix[3:6]
yield pix[6:9]
def encode_enc(newimg, data):
w = newimg.size[0]
(x, y) = (0, 0)
for pixel in modPix(newimg.getdata(), data):
newimg.putpixel((x, y), pixel)
if (x == w - 1):
x = 0
y += 1
else:
x += 1
# Encode data into image
def encode():
img = input("Enter image name(with extension) : ")
image = Image.open(img, 'r')
data = input("Enter data to be encoded : ")
if (len(data) == 0):
raise ValueError('Data is empty')
newimg = image.copy()
encode_enc(newimg, data)
new_img_name = input("Enter the name of new image(with extension) : ")
newimg.save(new_img_name, str(new_img_name.split(".")[1].upper()))
# Decode the data in the image
def decode():
img = input("Enter image name(with extension) : ")
image = Image.open(img, 'r')
data = ''
imgdata = iter(image.getdata())
while (True):
pixels = [value for value in imgdata.__next__()[:3] +
imgdata.__next__()[:3] +
imgdata.__next__()[:3]]
binstr = ''
for i in pixels[:8]:
if (i % 2 == 0):
binstr += '0'
else:
binstr += '1'
data += chr(int(binstr, 2))
if (pixels[-1] % 2 != 0):
return data
# Main Function
def main():
a = int(input(":: Welcome to Steganography ::\n"
"1. Encode\n2. Decode\n"))
if (a == 1):
encode()
elif (a == 2):
print("Decoded Word : " + decode())
else:
raise Exception("Enter correct input")
if __name__ == '__main__':
# Calling main function
main()
图片文件隐写技术是一种有效的信息隐藏方法,通过改变图像文件的某些特征来嵌入秘密信息,同时保持图像的视觉质量不受影响或影响极小。
在选择和设计隐写算法时,需要综合考虑嵌入信息量、对载体视觉质量的影响以及抵抗隐写分析技术的能力等因素。
隐写技术的实现方法包括图像预处理、信息嵌入和隐写图像的输出与保存等步骤。在实际应用中,需要根据具体需求选择合适的隐写算法和实现方法。
基于Pyhton的图像隐写术--如何隐藏图像中的数据:https://zhuanlan.zhihu.com/p/322334101
CTF Misc(1)图片隐写基础以及原理:CTF Misc(1)图片隐写基础以及原理,覆盖了大部分题型_misc图片隐写-CSDN博客
<总结>CTF·图片隐写:<总结>CTF·图片隐写_图片隐写 ctf-CSDN博客
Hello-CTF: 针对0基础新手编写的CTF快速入门手册:隐写技术 - Hello CTF
渗透测试CTF-图片隐写的详细教:https://blog.csdn.net/qq_38612882/article/details/127647627?spm=1001.2014.3001.5502
本研究对图片文件隐写技术的原理与实现方法进行了深入探讨,指出了隐写技术在信息安全领域的重要应用价值。随着信息技术的不断发展,隐写技术将面临更多的挑战和机遇。未来研究可以进一步探索新型隐写算法和隐写分析技术,提高隐写技术的安全性和隐蔽性,以满足更高层次的信息安全需求。