所谓的隐写术就是在不”破坏“(指正常打开,并不指修改二进制文件)文件的情况下,把机密信息写入进文件,然后经过处理后,把文件的信息提取出来。
举一个例子:
在抗日战争时期,我方在偷取到日方机密文件后会写下藏头诗。这个藏头诗一般人看不懂,只有特定的人才看得懂。
再举一个例子:比如把一个bmp格式的图片文件放入某人的身份证信息,正常打开这个图片,只会显示原图片,经过处理提取后才能把身份证信息提取出来。
所以这就产生了一个问题,一个文件的格式,到底是什么样的。我们可以对这个文件做什么样的处理,才能不受破坏(指正常打开,并不指修改二进制文件)。
在Windows上,有后缀名这个概念,linux里面没有后缀名概念,Windows上,后缀名只有让操作系统找到打开他们的适合的方式,而这个文件是不是图片或者音频,就得看他的文件格式。
在认识bmp文件格式之前,我们先来认识下txt文件
先打开注册表(运行处输入regedit),在HKEY_CLASSES_ROOT目录下找到.txt,并且找到他的默认的数据,为txtfile,如下图所示:
现在就知道.txt文件和一个叫txtfile的东西有关,现在到注册表找到这个txtfile。同样在HKEY_CLASSES_ROOT下可以找到txtfile,如下图所示:
这时我们可以看到它的默认图标是调用了一个叫imagers.dll的东西。
然后我们继续往下看
这里面我们可以看到打开方式是command也就是cmd。用的是notepad打开的。
意思就是说,我的这台电脑,如果遇到.txt的文件就会调用notepad对它进行打开。
下面我们来介绍Windows下最简单的图片文件bmp格式。如果我们把一个空的文件叫1.txt,改成1.bmp后,我们发现,图片浏览器根本打不开。这是因为这个1.txt里面文件内部(二进制代码)并没有发送改变。
下面来看看bmp文件格式。
首先我们用QQ接一个图并且保存为bmp格式,如下图所示:
现在提供给大家一个工具,这个工具对识别文件格式有相当高的效率。
下载地址如下:
链接: https://pan.baidu.com/s/1boNo4px
密码: 4ysy
安装以汉化里面都有说明,在此不再说明。
搞好后,我们打开010 Editor 然后把文件拖入进入,如下图所示:
此时图如下我们来分析下:
在这个图里面:
1.我们可以看到最开头的两个十六进制为42H,4DH转为ASCII后分别表示BM,这是bmp的标识。
2.红色箭头是图片的大小(这里对应的十六进制为26 3D 17 00,但这设计大小端转化,所以他一个转为00 17 3D 26,换成十进制就为1522982)。
3.黄色的那两个箭头一般填充为0。
4.橘色监听的bfOffBits是从文件的第一个字节到位图数据的偏移大小。
5.biSze是指这个struct BITMAPINDOHEADER bmih占40个字节大小。
6.biWidth,和biHeight指图片的宽和高(为什么高度是负数,大家可以尝试下把高度该成正数,然后修改第一个颜色的值,就可以发现问题了(第一个点就变成了左下角))。
6.黑色箭头bitBitCount代表:BGRA 蓝、绿、红、alpha,来存储一个像素,蓝占多少,绿占多少,红占多少,alpha是透明度,每一个分项占1byte每一个像素占4bytes(有些只有24位,意思就是没有alpha这个透明度,因为这个alpha只有在高端的那些图片处理上才用得着,一般的图片浏览器不会显示这个东西)。
7.这两个结构体结束后:剩下的部分就是像素的BGRA了。
我们现在来修改像素里面的BGR。改成如下情况:
我们保存,查看下图片:
这时我们就可以看到这样的图片了:
这时我们再次修改他的透明度如下所示:
这时我们再观察图片:
我们发现图片并没有被改变
这是因为:目前的Windows系统下90%的图片查看器会直接忽略掉bmp文件的alpha通道
只有那些高端的,要图片处理的,才会用到alpha通道。
所以把机密信息拆开,保存到alpha通道里面,就实现了文件的隐藏,
隐藏后的文件,我们在写一个特定的程序,就可以提取出来了。
下面几节将介绍如何写这种程序。
新闻热点
疑难解答