NTFS 文件解析系统的简单分析
Author:MTrickster QQ:56329475 E-Mail: MTrickster@163.com
正如我们所知道的,目前主流 anti-rootkit 检测隐藏文件主要有两种方法,一种是文件
系统层的检测(像 IceSword 自己构造 irp 包发到文件系统驱动),另一种就是磁盘级别的低级
检测,直接对磁盘的数据进行分析,比如 SnipeSword、filereg 和 unhooker.
最近对第二种方法的一部分(及 NTFS 文件系统的解析)做了一些学习,于是就写点学习
的东西与大家分享,其中有很多错误和不足希望大牛们指出。
(1) 准备工作――获取分区的一些基本参数
我们可以用 CreateFile 打开某个盘,读取偏移为 0 的扇区的数据。具体的数据结构
为:
typedef struct tag_NTFSBPB
{
BYTE bJmp[3];//跳转指令
BYTE bNTFlags[4]; // 文件系统 NTFS 的为 "NTFS"
BYTE bReserve1[4]; //一般为四个空格
WORD wBytePerSector;//每扇区字节数
BYTE bSectorPerCluster//;每簇扇区数
WORD wReserveSectors;//保留扇区数
BYTE bFatNum; // 总是 0
WORD wRootDirNum; //总是 0
WORD wSectorOfParti; //总是 0
BYTE bMedium;//
WORD wSectorPerFat; //总是 0
WORD wSectorPerTrack;//
WORD wHeadNum;//
DWORD dwHideSector;//
DWORD dwSectoOfParti; //总是 0
BYTE bDeviceFlag;//
BYTE bReserve2;//
WORD wReserve3;//
ULONGLONG ullSectorsOfParti; //扇区总数
ULONGLONG ullMFTAddr;//$MFT 的起始逻辑簇号
ULONGLONG ullMFTMirrAddr;// $MFT 的起始逻辑簇号
BYTE bClusterPerFile;//
BYTE bReserve4[3];//
DWORD dwClusterPerINDX;//
BYTE bSerialID[8];//
} NTFSBPB, *LPNTFSBPB;
其中最重要的应该就是通过 ullMFTAddr 获得$MFT 的起始逻辑簇号进而找到