FAT32文件系统的数据隐写

一、环境

(1)VMware Workstation虚拟机:虚拟机装有Win10操作系统,winXP,以及实验用的WinHex工具;

(2)Kinsgton 8G优盘:该优盘采用FAT32文件系统;

(3)优盘数据文件:优盘内的原始文件,为了模拟优盘真实使用环境。 

二、内容

首先格式化:

然后向里面拷贝一些文件:

之后用winhex打开U盘逻辑磁盘:

下一步定位FSINFO区:

找到了FSINFO的标志位:0x41615252,之前的两个字节为引导记录(DBR)的结束标志0xAA55,以及之后的FSINFO签名:0x61417272

同时由图中数据可知,空闲簇数为0x001CF79F,十进制为1898399个簇,每个簇是4096字节,即7个G空间:与属性中对应

同时下一个可用簇为0x000001DF,十进制为479,本次实验0x01DF即为我们要写入数据的空间

由引导记录中的BPB结构可知,整个保留区(也就是DBR+FSINFO)占3098个扇区,共1586176个字节:

故可找到FAT表的起始部分:

其中第0个簇号和第1个簇号为0x0FFFFFF8 0xFFFFFFFF为FAT表起始位置,紧跟着的0x0FFFFFFF一般为根目录的所在簇,由于不足4k(一个簇单元大小),故一个簇就够了,所以第2个簇号中为结束符号。

下面,我们修改剩余空闲簇的字段:

由原来的空闲簇数为0x001CF79F修改为0x001CF79E,下一个可用簇由原来的0x000001DF改为0x000001E0:

下面进行简单的计算:我们FAT表的起始为第1586176个字节,我们FAT表第一个空闲簇号为0x0001DF,共480(因为是从0号簇开始计算,所以是479+1)个簇,共1920个字节,所以第一个可用簇是第1588092个字节:

将其改为0x0FFFFFFF:

同是将FAT2中数据修改:

找到FAT2:

由引导记录中的BPB结构可知,一个FAT表大小为0x39F3,十进制14835个扇区:

即为在1586176字节后再偏移7595520个字节:

修改表项如下:

之后找到:0x1DF号簇:是第479个簇

修改数据为0x66:

簇起始:

簇末尾:

最后保存,然后弹出U盘!!!!拖入一个txt文件:

实验成功!!!

三、扩展题:

下面是用程序实现上述功能:

环境为:

U盘,FAT32文件系统,winXP虚拟机(为什么使用winXP后续总结会提到),dev C++;

首先遇到的问题是:

主引导区没东西,故本次实验仅仅在FAT32文件系统的DBR部分在0x4000(第32个扇区)处开始:

打开磁盘函数

写磁盘函数:

读取DBR并输出有用信息:

读取FSINFO并修改空闲簇数和下一个可用簇号:

读取FAT1下一个可用簇号所在的扇区,并将下一个可用簇号改为0FFFFFFF

对FAT2相同操作:

将数据写入指定区域:

写入的是0xCC,也就是204

下图为起始情况于程序修改后对比:

FSINFO:

FAT1:

FAT2:

数据区:

四、实验结果及分析思考

一、

首先,最开始没使用破解版,所以在打开时是没有FAT索引的,并且也无法保存,也就是功能不全,故本次FAT表的寻找均是依靠BPB结构中的特定字段来寻找偏移的,使用最笨的方法,后来使用的是破解版

二、

其次就是保存之后 ,要弹出U盘,虽然不知道为什么必须要弹,但是没有这一步就会导致,修改之后没有完全修改,再次写入数据会将隐藏数据覆盖

三、

  • 在扩展中,最开始用的win10,发现编译运行后一直是无法打开磁盘,之后发现编译后的EXE要用管理员运行,也尝试了使用提权函数,也没有很好效果,并且,就算用管理员模式,也仅仅实现读功能,写仍然写不进去,尝试修改注册表和将U盘安全模式降低,仍然无法做到,于是才使用了本次实验的winXP,包括主引导区一开始是有的,但是后来在实验过程中就消失了,也不清楚是为什么。
  • 而且,在计算偏移量的时候也很头疼,尤其是定位数据区所在的扇区,需要将FAT2的起始和大小都求得,然后加主引导的32,并且数据区的簇是从二号开始的,0号和1号并不在数据区:

计算不对就不知道把数据写到哪里了,也是重复格式化之后慢慢摸索到的

  • 有思考如何将程序写进去,应该时写一个二进制的可执行代码,并且用钩子指向,但是具体如何操作由于时间不够就没有再深入探索

  • 36
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值