首页
社区
课程
招聘
扇区级修改文件属性(winHex)
发表于: 2010-4-27 09:39 22135

扇区级修改文件属性(winHex)

2010-4-27 09:39
22135

很基础的东西,权作笔记记录,高手莫笑。
同学电脑中了病毒,将U盘下的文件夹属性全部改成系统隐藏属性,但是文件夹下的文件都是正常的。
呵呵,对这个病毒就不深究了,了解的人自然知道它的工作原理。现在关心的是,如何把这个文件夹的系统隐藏属性去掉。当然,直接用专杀u-clear就可以;不过这是之后才出来的;
如果没有专杀,我们也可以用其他办法来去掉这个隐藏属性。

U盘系统都是FAT32系统的,FAT32文件系统比较简单;相对来说,无论是安全,还是效率,亦或是其他方面,比较优秀是NTFS文件系统了。现在,我就以NTFS系统为例,来说明如何在磁盘扇区级修改文件属性及相关原理。

一.        实验部分

1.        在C:\盘下创建一个名为data.txt的文件,内容为:datastore and data manager。
设置属性为只读,隐藏,存档;
2.        现在用WinHex打开C:盘来看,
操作:Tools->Open Disk->盘符C:HD0
看到打开的C盘数据;
在窗口上方浏览到data.txt文件,右键->Position->go to FILE Record,如图



3.         打开后,查看16进制数据编辑区,如图所示是data.txt的MFT数据:



        这里,要结合NTFS文件系统在磁盘上的存储结构原理来解释。
        首先NTFS文件是一系列属性的结合,每个文件都由若干属性;其中,有些属性是必须的,有些属性是可选的。每个文件对应一个MFT(主文件记录),这个MFT记录了该文件在磁盘上存储的相关信息。每个MFT项的大小为1K,占两个扇区;分为两部分:一部分为MFT头,另一部分为属性列表;MFT头的结构很小,其他空间都属于属性列表区域,用于存储各种特定类型的属性。
        属性有很多类型,每种类型的属性都有自己的内部结构。但其大体结构都可以分成两个分部:属性头和属性内容。由于属性又常驻属性和非常驻属性,所以属性头的结构也有所差别,但不是是常驻还是非常驻属性,他们的属性头的前16个字节的结构是相同的。
        注:关于NTFS文件系统格式,看参考《数据恢复》、《数据重现》、《windows internal》之类的书籍。
       
        前面,粗略的说了一下MFT;每一个文件对应一个MFT,现在我们通过winHex定位到了data.txt的MFT,然后就来分析MFT数据。
        其中,前面的白色区域的数据,范围(0c5bbe000 – 0c5bbe037)即为MFT头数据,这里不做分析。当然,对于一个文件,这个MFT头是极为重要的,只是我们这里的重点是找到文件属性的偏移位置。
        接下来,(褐)红色区域就是文件的第一个属性列表,标号10,代表标准属性,由开始的前四个字节标识。(MFT由MFT头和属性列表组成,现在分析的是第一个属性列表,标号为10的标准属性列表)
        关于属性列表的各个字段的含义。一下是属性头,如下:
        a   0x00-0x03: 4个字节,属性类型,0x10表示是标准属性
        b   0x04-0x07: 4个字节,包括属性头在内的属性长度,这里是0x60,也就是96个字节的长度;
        c  0x08-0x08: 1个字节,表示是否为常住属性标志,0x00标识为常驻;
        d  0x09-0x09: 1个字节,属性名的长度,可以标识255长度的属性名,如果为0,标识没有属性名。
        …………
        e  0x14-0x15:  属性内容相对于本属性的属性头起始位置的偏移。

        上面说完了属性头,在说属性内容:下面的内容前一列标识相对属性头的偏移
        00-07         8字节, 建立时间
        08- 0f        8字节, 最后修改时间                
        10-17        8字节, MFT改变时间
        17-1f        8字节, 最后访问时间
        20-23        4字节, 属性标识,这里就是“只读,隐藏,系统,存档,临时……”属性的标志 ;在这里,就是23 00 00 00,在红色区块内有绿色块高亮的字节开始。

        其他的属性字节,暂且不看了。
4.         现在看,属性标识的含义
0x0001,        只读
0x0002        隐藏
0x0004        系统
0x0020        存档
0x0100         临时  …………
5.        修改属性,定位到文件data.txt的属性偏移位置,用winHex就可以随意修改属性了,修改以后保存。
修改方法:右键->beginning of block,选中开头;同样,end of block选中结尾;然后右键->edit->fill block,填充新的值。

注:
1.        winHex是扇区级工具,由winHex读的MFT数据,都是通过对分区卷的文件系统的解析展现给我们的。所以,我们修改了数据,保存,都是属于扇区级的操作,并不经过文件系统。那么,磁盘缓存每个最小单位是256k的视图,只是改写若干字节,缓存数据是不会立即写到磁盘的;所以要想看到修改的结果,必须要刷缓存,但是磁盘缓存不像文件系统缓存一样容易刷(关于刷文件系统缓存的方法不做介绍),最简单的刷磁盘缓存的办法就是正常重启下电脑。专业一点的方法是,先unmount分区卷的文件系统,然后再mount分区卷的文件系统;或者构造irp_mj_flush_buffers;呵呵~~不过在这里,操作的文件内容可能已经被explorer.exe读到内存,并且没有被换页出去,这样即便我们刷新了磁盘缓存,也不能立即看到更改情况的;最直接的办法就是重启机器。
2.        绿色块的数据,紫色块数据,蓝色块数据,也分别是属性列表数据,这里不多说了,感兴趣的查相关资料。

二.        编程实现
前面利用扇区级工具winHex改写了文件系统,其实我们绕过了很大的难题,就是如何定位给定文件的MFT;其实这些都需要解析文件系统,FAT比较简单,NTFS是比较复杂的。不过,对于专业来说,编程解析NTFS文件系统还是很有价值的。
winHex的原理显而易见,按照文件系统格式解析分区卷数据,所有操作都是直接对卷的扇区级操作,而不是针对簇。

引出的问题:
熟悉文件系统结构,FAT32,NTFS;
那么,通过编程,就可以批量更改这样的属性了。当然,如果解析文件系统,只是为了修改几个文件夹的属性,那就有点“大炮打蚊子”的嫌疑了。事实上,解析文件系统可以帮助你理解很多系统顶层相关,IO管理器,虚拟内存管理,缓存管理器,文件驱动,磁盘存储系统等相关内容。这里不多展开了,过段时间,想系统的编程解析下FAT32,NTFS;最近很忙,想法很多,却没时间做自己想做的事情~~~~


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
  • 1.jpg (139.93kb,922次下载)
  • 2.jpg (198.70kb,927次下载)
收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
2
这个要好好学学,谢谢lz
2010-4-27 09:44
0
雪    币: 145
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我学问下有关FAT32与NTFS的资料
2010-4-27 10:43
0
雪    币: 392
活跃值: (89)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4
关于FAT,NTFS文件系统格式,可以参考《数据恢复》、《数据重现》、《windows internal》之类的书籍
具体实现方面,可参考:ddk  fastfat源码,ntfs源码
2010-4-27 11:15
0
雪    币: 103
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
病毒的样本可以发上来看看吗?病毒也是直接写磁盘的么?
2010-4-27 11:35
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
6
装了360,恐怕你就不能直接用WINHEX修改硬盘了。
2010-4-27 11:58
0
雪    币: 392
活跃值: (89)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
7
呵呵,我用的是裸机;很敬佩你在技术上的穷究精神!支持你
2010-4-27 12:20
0
雪    币: 379
活跃值: (152)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
8
360只是保护mbr,文件属性是不会保护的
2010-4-27 15:17
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个病毒见过,隐藏文件夹属性怎么也改不动,只好重建一个移入文件后,将其删除。LZ高招让我受益了。
2010-4-27 15:52
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
10
8楼如果说的是对的,那么我那篇贴子的方法还能用。
2010-4-27 19:21
0
雪    币: 156
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
标记一下..支持 啊
2010-4-27 22:12
0
雪    币: 808
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
得好好学习下。。。期待下文
2010-4-28 20:38
0
雪    币: 1312
活跃值: (5164)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
这个要好好学学,谢谢。
2010-4-29 06:03
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
14
正好用得到,学习了。
2010-4-29 11:28
0
雪    币: 1085
活跃值: (114)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
15
这个东西正需要。谢谢
2010-10-12 14:09
0
雪    币: 217
活跃值: (68)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
16
感谢楼主的好文章 收藏学习
2010-12-1 20:08
0
雪    币: 122
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
受教了,谢谢!
2011-11-30 23:04
0
游客
登录 | 注册 方可回帖
返回
//