首页 > 其他分享 >FAT32文件系统的数据隐写

FAT32文件系统的数据隐写

时间:2024-03-27 16:29:21浏览次数:26  
标签:隐写 字节 FSINFO 文件系统 FAT 扇区 优盘 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号并不在数据区:

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

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

标签:隐写,字节,FSINFO,文件系统,FAT,扇区,优盘,FAT32,数据
From: https://blog.csdn.net/weixin_54452942/article/details/137014558

相关文章

  • 使用shell管理和配置文件系统(1)
    目录切换到用户tom登录shell的命令linux以长文件形式查看、分区下所有文件命令以、分隔年月日、以:分隔时分秒的方式来显示当前系统同时钟,命令查看/etc/passwd文件的类型命令统计/etc/sysconfig/network-scripts/ifcfg-ens32文件的行数、字数、字符数,命令查看/etc/shadow......
  • tmpfs文件系统
    tmpfs是Linux内核中的一个虚拟文件系统,它将数据存储在内存中而不是硬盘上。使用tmpfs可以快速访问数据,因为数据存储在RAM中,而不需要进行实际的磁盘I/O操作。 快速创建一个tmpfs挂载节点:mkdir/mnt/tmpfs//创建一个挂载点mount-ttmpfs-osize=100Mtmpfs/mnt/t......
  • sysfs文件系统
    参考博客:Linux---驱动属性文件添加、DEVICE_ATTR宏、device_create_file()及sysfs_create_group()_面朝大海0902的博客-CSDN博客Linux-DEVICE_ATTR()介绍及使用示例_Wang20122013的博客-CSDN博客https://blog.csdn.net/u014674293/article/details/103480058 一、kobject的......
  • procfs文件系统
    参考资料:https://blog.csdn.net/qq_29023095/article/details/123164953 用户空间和内核空间交互方式有:文件I/O,ioctl、procfs、debugfs、sysfs等 procfs是Linux内核中的一个虚拟文件系统,通常挂载在/proc目录下,用于向用户空间提供内核状态信息和运行时数据。通过procfs......
  • 鲁班猫4-扩容文件系统
    上一篇讲了在板子上用Systemtap生成火焰图和如何用systemtap调试内核崩溃。之前讲的过程板子里缺的内容都是通过PC拷贝到板子上的。今天补充讲一下如何重新制作文件系统和整个升级包。你会说野火文档里有啊,你说了这句话,那就说明你还不知道“你所不知道的那些细节”。基本......
  • web前端之node读取文件夹名称及html文件的标题、文件系统、路径处理、模块、正则、isD
    MENU代码解析代码constfs=require('fs');constpath=require('path');//文件夹路径//C:\mssj\web\web-case\case\nodeJs\index.js//C:\mssj\web\web-case\case\nodeJs\index.html//C:\mssj\web\web-case\case\ajaxProgressMoni......
  • 根文件系统简介与BusyBox构建根文件系统
    参考资料:https://www.bilibili.com/video/BV12E411h71h?p=43&vd_source=432ba293ecfc949a4174ab91ccc526d6 根文件系统简介:根文件系统也成为rootfs,fatfs这类的文件系统属于Linux内核的一部分,属于软件代码如果没根文件系统,内核会出现kernelpanic。根文件系统就是一堆文件,比......
  • Linux内核有什么之块设备驱动有什么第六回 —— 邂逅的三个文件系统之二:实际文件系统(3
    接前一篇文章:Linux内核有什么之块设备驱动有什么第五回——邂逅的三个文件系统之二:实际文件系统(2)本文内容参考:34|块设备(上):如何建立代理商销售模式?-趣谈Linux操作系统-极客时间特此致谢!上回书以F2FS文件系统为例,开始分析块设备邂逅的第二个文件系统:实际文件系统。本回......
  • Linux mke2fs命令教程:创建和管理你的ext2/ext3/ext4文件系统(附案例详解和注意事项)
    Linuxmke2fs命令介绍mke2fs(makeext2filesystem)命令是用来创建ext2/ext3/ext4文件系统的。它通常在磁盘分区上创建文件系统,设备是对应设备的特殊文件(例如/dev/hdXX)。如果省略了块数,mke2fs会自动计算文件系统的大小。Linuxmke2fs命令适用的Linux版本mke2fs命令在所有......
  • parted划分大于2T文件系统
    场景:在CentOS系统中,添加了一块大于2T的数据盘     使用fdisk/dev/xxx的方式划分该盘时提示:Thesizeofthisdiskis2TiB(2199023255552bytes).DOSpartitiontableformatcannotbeusedondrivesforvolumeslargerthan2199023255040b......