前言

最近在研究JPEG和PNG的文件格式,在其属性中包含了图片文件的分辨率(该分辨率值为所有图片显示工具显示这个图片时会显示的大小)。

于是,我们可以通过更改图片显示的分辨率来隐藏图片的部分区域。从而达到隐藏传递信息的效果。

开始操作

PNG部分

image.png

这是一张普通的png格式的照片,我们可以通过编辑这张照片进行传递信息

image.png

编辑后可以修改图片的分辨率,在上面的图片中我们可以看到,这张图片的分辨率是1920*908像素

也就是图片的长度为1920像素,宽度为908像素。

接下来,打开Winhex1,将编辑好的图片拖入Winhex窗口中

image.png

将数据解释器设置为Big-Endian(设置方法:点击选项—数据解释器—将窗口右下角的Big-Endian打勾即可)

在PNG图片中,其分辨率位置总是在IHDR(ASCII码栏中的IHDR)的后8个字节,即图中选择的8个字节:

image.png

使用数据解释器点选到前四个字节的开头,其值为1920,这四个字节则为图片的宽度。我们主要需要修改的是后四个字节:高度

image.png

点选到后4个字节中,查看其值为908,这个值就是图片的高度。

image.png

在数据解释器中的32Bit栏中修改数值即可修改该图片的”显示“高度,将其修改为750(像素),保存后查看图片:

image.png

image.png

可以看到这张图片的高度被缩小了,先前添加的文字只剩下一点部分可以看见。

可能有的同学说了:这不就是剪切吗?

接下来就是与剪切不同的地方了,因为图片的数据还在,只显示了1920*750的部分而已,我们将数值改回去看看会发生什么:

pngheight.gif

将显示大小更改为1920*1000后可以看见原来编辑的信息了。

JPEG图片部分

这是一张jpg格式的文件,与png图片一样,我们在上面添加文字。

image.png

image.png

添加完毕后拖入Winhex,显示如下图:

image.png

在JPEG格式的文件中,有一个属性是也是显示分辨率,其标识为FF C0,更改下图中绿色的部分即可

(绿色部分为高度,蓝色部分为宽度,均为Big-Endian)

image.png

修改高度后的图片如下图(修改方法同PNG修改方法,即在数据解释器中修改数值,不过这里是2个字节,则在16bit栏中更改数字)

jpghight.gif

更改JPEG图片显示分辨率大小具体操作

以上为图片信息隐藏术,在发送图片的时候请注意要记得勾选发送原图哦,不是原图的话图片数据会比原图少,隐藏掉的部分也会消失哦


  1. Winhex破解方法请前往 实用的数据恢复软件