前言
最近在学NTFS,发现网上的博客千篇一律,讲的不够通透,于是决定自己写一篇。
本文章通过寻找文件地址这个任务,讲述了NTFS文件系统$Boot文件、$MFT文件的结构,对$MFT文件中的A0、80属性进行了重点分析。
本文对于NTFS的具体每种属性的字段含义不会详细阐述,因此可以预先了解相关知识,或者在看到文中提到这些知识时使用搜索引擎详细查证一下。
个人认为讲的比较好的博客和资源:
- https://www.cnblogs.com/lsh123/p/15789479.html
- https://blog.youkuaiyun.com/enjoy5512/article/details/50935972
- https://www.ntfs.com/ntfs-partition-boot-sector.htm
- https://github.com/BigGan/Windows-Hack-Programming/issues/3
- https://www.intohard.com/thread-61790-1-1.html
任务背景
在一块NTFS硬盘中存在如下文件:
其中demo文件夹中有如下文件:
目标是,通过解析NTFS底层数据,找到上述所有文件的源数据。
当然,无论是010 editor还是winhex还是各类工具,其实都能够很快的通过程序找到上述文件,但是为了探究系统文件寻址的底层流程,我们认为有必要在不使用解析程序的条件下走一遍这样的流程。
实验过程
使用winhex打开硬盘:
硬盘的前8个字节告诉我们这是一块NTFS的硬盘。
众所周知,NTFS包含了16个元文件和数据区,其结构如下: