目录
一、虚拟环境
1.1、概述:
MojoPac这个可以在宿主操作系统中运行的虚拟环境。
除MojoPac外,还有很多虚拟机产品, 其中最常用的就是VMware。
这些虚拟机产品都可以包含一个完整的操作系统。
要隐藏较大的数据块时, 人们通常会选择使用多媒体文件, 因为多媒体文件本身的体积就很大。 多媒体文件可以隐藏的数据量更多, 质量更好, 与2MB的JPEG文件比起来, 在一个100MB的多媒体文件中隐藏文件对载体文件的影响是极小的。多媒体文件嵌入数据后, 音频或视频效果基本不受影响。 而JPEG文件中如果嵌入大最的数据(例如2MB), 就会变得模糊不清, 或者一块一块的, 像打了马赛克一样。
1.2、优点
虚拟机的体积很大,也可以隐藏大量的数据。但是,与静态多媒体文件不同,虚拟机在使用过程中,大小总是动态变化的。这样就可以躲过数据有效性工具(主要目的是识别对文件的非法修改)的检查了。总之,要想在虚拟机中隐藏数据,我们必须先了解虚拟机的组织结构。
二、VMware文件
2.1、组成:
为了在虚拟机中隐藏数据,我们必须先研究虚拟机的各个组成部分。一个VMware虚拟机镜像通常包括一组文件。
*.vmdk
表示虚拟硬盘,文件大小上限为2GB。其中包含虚拟机的数据及空间开销。 在老版本的VMware中,该文件的扩展名为".dsk”。
*.nvram
虚拟机的BIOS和硬盘数目
*.vmsd
通过生成快照并保存快照的元数据来存储虚拟机的状态
*.vmx
一个用于存储虚拟机配置信息的文本文件,主要包括操作系统、设备、网卡等信息。图8.7为一个*.vmx配置文件示例
*.vmxf
是一个附加文件,当虚拟机以工作组模式运行时,该文件用于存储虚拟机的元数据。
三、在VMware镜像中隐藏数据
3.1、概述:
在虚拟机中隐藏较大的文件,因为*.vmdk虚拟硬盘文件是唯一一个大文件,我们就选择它来作 为载体。该文件大小一般为50MB~ 2GB不等,在大型的企业环境中还可能扩展到TB级别。但是,如果我们用来隐藏数据的话,文件大小还需要方便下载或者在网络中传输,因此50MB是最好不过的了
如果没有*vmdk文件,可以到VMware官网上免费下载虚拟镜像。VMware官网中有很多虚拟镜像可供下载。随便下载一个,就可以得到所有运行虚拟机所必需的文件。当然,其中包括虚拟硬盘文件*.vmdk。注意,如果你还没有VMware Player,请到VMware官网上下载
3.2、Dsfok-tool
简介:
基于Windows 的工具, 可以在不需要用十六进制编辑器打开VMDK 文件的情况下, 对其进行编辑操作。通常, Dsfok-tools 用来编辑VMDK文件中的描述符文件。这个工具套件里包含两个工具:dsfo 和dsfi。dsfo 可以从VMDK 文件中提取配置信息, 而dsfi 可以用来在VMDK文件中嵌入数据。
下载:
dsfok (softwareandgames.com)
https://dsfok.softwareandgames.com/
原理:
目的是在VMDK 载体文件中嵌入JPEG 载荷文件, 那就直接用dsfi , 使用dsfi 可以直接修改其中的字节, 而不是在文件中增加数据, 这样就不会更改VMDK 文件的大小, 也不会损坏文件了(如果通过增加数据的方式嵌入数据就会改变文件大小, 造成实际文件大小与描述符文件中的文件大小参数不一致, 这样打开虚拟机时就会上报运行时错误)。
使用:
根据sunbarrow.com, dsfi 的语法如下:
dsfi <destination> <offset> <size> <source>
• "size" 值为"NULL": 表示按最大可能嵌入数据, 即目标位置的全部填充区域。
• "size" 值为负数:表示按当前文件大小计算
• "offset" 值为负数:表示从文件末尾开始计算偏移量
• "offset" 值为 “ e":表示嵌入位置为文件末尾
•"destination" 值为 " $ ” :表示仅检查MD5签名
3.3、隐藏文件
第一步:分析嵌入位置
在开始*vmdk文件中嵌人数据前,请确保虚拟机处于未运行状态或已关机,否则会有不利影响
——————
关闭虚拟机,用WinHex打开*.vmdk文件,我们来分析一下在什么位置嵌入载荷才合适。
(WinHex45天后要收费,我用的010 Editor)
不同*vmdk文件的文件头各异,最常见的就是momolithicSparse文件头中的K.DMV"(vmdk的倒序拼写),MonolithicSparse文件本质上就是一个仅有一个文件的虚拟磁盘。
——————
*.vmdk文件中还有一个描述符文件,其中记录了磁盘布局、形状(类似于物理磁盘的一定要保持形状)、虚拟镜像的大小和它们在磁盘中的位置(通过偏移量表示)。
注意,*.vmdk 的大小不变, 以免在虚拟机运行时产生不一致性错误。此外,由于*.vmdk文件本质上是物理硬盘的虚拟版,*vmdk文件中也存在同物理硬盘的分区和扇区中类似的填充区域。因此,你可以在整个虚拟磁盘中发现大量的、聚集在一起的填充区域,而且越到文件末尾填充区域越多
第二步:分析嵌入方法
如果我们把一个2MB 的JPEG文件嵌入到虚拟磁盘文件*.vmdk 中。我们要用JPEG 文件的内容替换*.vmdk 中的填充区域, 而不是简单地附加到文件中。具体替换操作, 可以使用WinHex 的替换功能, 把JPEG 文件内容直接复制到*.vmdk 文件中, 并使用WinHex 的替换功能逐字节地替换。
——————
还有一个专用的VMDK文件编辑工具Dsfoktools,可以替代WinHex 实现同样的功能。
——————
首先, 我们需要确定JPEG文件的确切大小: 用WinHex打开JPEG, 在界面左侧可以看到原始文件大小
——————
然后从虚拟文件末尾开始(EOF文件标识符)逐渐向上查找, 直到找到可以嵌入那个JPEG载荷文件的填充区域。
第三步:嵌入文件
用dsfi在*vmdk文件中嵌人JPEG文件了。 在嵌入命令中可以使用负的偏移量, 表示从文件末尾开始计算嵌入点。 如果虚拟磁盘文件名为"root.vmdk",那么嵌入命令则为
C:\ dsfi root.vmdk -1571228 1571228(嵌入文件的大小) scuba.jpg(文件名)
第四步:检测文件是否正常运行
用WinHex重新打开root.vmdk文件, 可以看到JPEG文件已经嵌入其中,root.vmdk文件尾部的1 571 228字节已替换为JPEG文件的内容了
——————
嵌入图像的VMDK文件还能用VMware Player打开, 且能像正常的虚拟机一样运行, 没有任何被篡改的迹象。 虚拟机中图像和其他从网络中刚下载的图像没什么区别。所以打开图像时,没有任何告警信息。VMwarePlayer不会弹出告警,甚至没有任何提示性信息提醒用户在打开前复制或移除它。虚拟机运行时,也没有任何消息提示用户该 虚拟机被修改过。如果我们手上有图像嵌入前后的两个wmdk文件,则可以通过十六进制编辑器打开文件对比,就可以发现其中嵌入的JPEG文件。
3.4、缺点:
反复运行虚拟机对其中隐藏的图像不会产生任何影响。 但是, 既然我们讨论的是虚拟磁盘, 那么如果长期运行虚拟机, 则藏在其中的数据势必会被其他数据重新覆盖。
然而, 如果要用.vmdk文件来传递秘密情报, 这个虚拟磁盘文件则只是作为一个隐蔽的载体而已。接收者不会关心其他人是否会下载这个虚拟机, 是否反复运行并将隐藏的信息覆写。 实际 上, 也许这还是接收者希望发生的。
3.5、提取文件
从VMware虚拟机vrndk文件中提取隐藏图像的方法和嵌入方法类似。提取图像时,我们需要用前面提到的dsfok-tools工具套件中的另一个工具dsfo:
C:\ dsfo root.vmdk -1571228 1571228 scuba.jpg
执行完上述命令后,即可从root.vmdk文件中提取出文件末尾的1571 228字节,提取 后的图像名称为"scuba.jpg"。