所谓的隐写术就是在不”破坏“(指正常打开,并不指修改二进制文件)文件的情况下,把机密信息写入进文件,然后经过处理后,把文件的信息提取出来。

举一个例子:

在抗日战争时期,我方在偷取到日方机密文件后会写下藏头诗。这个藏头诗一般人看不懂,只有特定的人才看得懂。

再举一个例子:

比如把一个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通道里面,就实现了文件的隐藏,

隐藏后的文件,我们在写一个特定的程序,就可以提取出来了。

下面几节将介绍如何写这种程序。

C/C++信息隐写术(一)之认识文件结构相关推荐

  1. C/C++信息隐写术(四)之大程序藏入BMP文件

    在阅读这篇文章时请先阅读第三篇,第三篇链接如下: http://blog.csdn.net/qq78442761/article/details/54893792 这一节里面我们要做的是 把一个exe ...

  2. C/C++信息隐写术(二)之字符串藏入BMP文件

    我们这一节用代码实现,把字符串藏入BMP文件,并且能正常读取出来. 看这篇的同学请先阅读第一篇了解理论: http://blog.csdn.net/qq78442761/article/details ...

  3. 音频信息隐藏技术研究

    传统的保密通信技术主要是以密码学为基础,将待传输信息进行充分置乱,使得非法用户无法正确获取原文.与此不同,信息隐藏作为近年迅速发展起来的一种保密通信技术,它首先将待传输信息嵌入到诸如音频.视频.文件等 ...

  4. MP3文件结构解析(超详细)

    1. MP3文件结构解析 1.1. 概述 1.1.1. 音频相关术语 ID3: 一般位于一个mp3文件的开头或末尾的若干字节内,记录该mp3文件的歌手.标题.专辑名称.年代.风格等信息,ID3分位两个 ...

  5. 《深入理解Java虚拟机》读书笔记五

    第六章 类文件结构 1.无关性的基石 各种不同平台的虚拟机与所有平台都统一使用程序存储格式--字节码是构成平台无关的基石. 实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java虚拟机不和包括Ja ...

  6. idea 引入oracle驱动并打包_IDEA下从零开始搭建SpringBoot工程

    SpringBoot的具体介绍可以参看其他网上介绍,这里就不多说了,就这几天的学习,个人理解,简而言之: (1)它是Spring的升级版,Spring容器能做到的事情,它都能做到,而且更简便,从配置形 ...

  7. grunt入门 出处:http://artwl.cnblogs.com

    grunt-contrib-uglify uglify是一个文件压缩插件,项目地址:https://github.com/gruntjs/grunt-contrib-uglify 本文将以一个DEMO ...

  8. idea ssm打war包_IDEA下从零开始搭建SpringBoot工程

    SpringBoot的具体介绍可以参看其他网上介绍,这里就不多说了,就这几天的学习,个人理解,简而言之: 如果想学习Java工程化.高性能及分布式.深入浅出.微服务.Spring,MyBatis,Ne ...

  9. linux文件软链接与硬链接

    1.命令格式: ln [参数][源文件或目录][目标文件或目录] 软链接只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间. 2.命令功能: Linux文件系统中,有所谓的链接(link),我们 ...

最新文章

  1. 表单系列之input number总结
  2. N5-用两个栈来实现一个队列
  3. python自动华 (七)
  4. ASP.NET CORE MVC 2.0 如何在Filter中使用依赖注入来读取AppSettings
  5. python--Websocket实现, 加密 sha1,base64
  6. oracle中sga的合理设置,oracle学习:SGA_MAX_SIZE参数设置
  7. 使用Elasticsearch,Kafka和Cassandra构建流式数据中心
  8. mysql相关知识点_MySQL相关知识点
  9. JS判断用户手机是IOS还是Android
  10. 求二叉树左右子树高度差_LeetCode刷题实战110:平衡二叉树
  11. EBS 12.1.3 应用打补丁操作及问题处理
  12. 千万不要用中文名当系统用户名,如果你用了,建议重置电脑
  13. 服装ERP软件有哪些优点?
  14. 淘宝logo设计遇到的坑
  15. PDF、PMF、CDF是什么
  16. Caused by: java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件 (DSPACE.SYS_C007868)
  17. scrapy 抓取豆瓣Top250书籍信息
  18. 数学:逻辑:符号逻辑(翻译)
  19. 2019最新android实例开发视频教程
  20. unity 内部嵌入的网页插件中播放视频网页的问题

热门文章

  1. 程序员工资高,但为什么越来越多的人都不再愿意做程序员呢?
  2. 在竞争激烈的ToB公司,这个创始团队拒绝一夜暴富,坚持做好产品
  3. 三种方法绘制雷达图,用最快的时间做出最好看的可视化图表
  4. 在深圳呆那么就感觉伤心了有木有?
  5. 【转载】直到活动结束时的openeim
  6. C++写的一个聊天室代码,用于XEIM开源即时通讯软件上的
  7. C++字符串完全指引之一(Win32 字符编码)
  8. 关于CEdit控件的透明
  9. 对老赖 绝不要忍 !一位美女程序媛的讨薪经历...
  10. 鸟哥:程序员应该不断提升自身的不可替代性