`
condeywadl
  • 浏览: 78300 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C/C++ 如何实现文件在NTFS文件系统中的绝对定位(二):分析DataRun

阅读更多

DataRun的分析在定位文件在NTFS文件系统中的位置的过程中是必不可少的,他相当于一个父目录开启他所属的某个子目录的钥匙,而且DataRun的分析也是相当复杂需要讨论多种情况。上一篇我们说到,DataRun是起到了“银行卡”的作用。(不知道的请看我的前一篇文章,如果您知道DataRun是什么东东,那就可以直接跳过看第二段)这里的DataRun指代的是MFT---A0H块的body部分,DataRun记录了他所属MFT所有Index的簇号(当然前提是它要有index)。下面我们来举个例子分析Data Run

 

 

请看上图,深红色的部分就是某一个目录(文件夹)的DataRun, 它由24个字节组成,开头为21H,结尾为87H。首先,我们要先介绍下DataRun的组成,首先我们由上文知道一个MFTindex是由一个或多个不一定连续的簇组成的,比如说一个文件夹Temp,他的Index簇号为1920405051。这些簇就会记录在TempDataRun中,如何记录呢?分3 : 1.19簇开头,2个簇长度; 2.40簇开头,1个簇长度;3,50簇开头,51簇长度。大家明白了吗?DataRun中只把非连续的簇信息分开存放,而连续的簇,他只记录首簇号与有多少个连续的簇”2种信息。其次我们必须了解DataRun信息的存放格式: 信息头(21H+簇长度(01H+相对扇区号(0C73H),下面我们来详细分析图中数据。

首先我们由格式可以得出,首先21H为信息头(这名字是我自己起的),他表示什么呢?表示后面有1个字节是表示长度,长度后面有2个字节表示相对簇号,那假设信息头为32H,就表示后面有2个字节是表示长度,长度后面有3个字节表示相对簇号。大家应该明白了吧。他不是单纯的一个16进制数!那我们回到21H,他说后面有1个字节表示长度,那后面我们数过去一个字节,是01H,转化为10进制为1,表示什么?表示这一段信息只有1个簇长度。长度后面有2个字节表示相对扇区号,我们数过去2个字节,是0C73H,读数字会吧,要倒着,内存中就是这么放的,表示相对簇号为0C73H…因为这是第一条信息,所以他就是0C73H簇(这里不明白没关系,后面会说清楚),好,我们第一个index出来了:0C73簇开头的1个簇,就是0C73簇,好,我们下面用同样的方法分析下一段DataRun: 为了看的清楚,我把图片拷贝过来。 

 我们看到0CH后面是31H,这个大家知道是什么吗?对,就是信息头,相信大家会分析了吧,我们继续看后面的数据就是01AAE3H开头的1个簇,这时大家要注意,因为01AAE3H为相对簇号,所以下一个index正确的簇号是:此相对的簇号加上前面所有的相对簇号(要全加,不能只加前面一个,如果这是第三个index,那么要把第一个和第二的相对簇号全部和此相对簇号相加),还有一点要注意,相对簇号是用补码表示的!!如果为 相对簇号为E711H,必须转化为原码(就是负数)再与前面的相对簇号(也要转换为原码)相加。这回大家知道什么是相对簇号了吧。我们继续分析(分析省略)好,我们分析到 8E 72 FF完,忽然发现怎么是00??00表示什么呢哈,恭喜你,你已经分析结束,后面的可以不看了。大家如果还有什么问题,欢迎留言,在附件中,我也提供了一些资料,是英文版的,但是对DataRun的分析很有帮助,它举例了几乎所有的情况,在这里我不可能说明拟稿所有的情况,还是请资料帮你吧!

   最后,我要说一个让我超级郁闷过的一个问题:更新序列号。

   请看图 如果一个MFTDataRun正好包括某个扇区的最后两个字节,这两个字节为“伪字节”(也是我自己起的),如果按照这2个字节分析,是不可能分析正确的,那正确的2个字节在哪呢??

 

 我们看一个完整的MFT开头

 

  大家看到了吗,打圈圈的地方就是真的数字,大家计算的时候,把假字节覆盖就可以了,好了,就说那么多。希望和大家多多交流经验。

  • 大小: 12.6 KB
  • 大小: 17.3 KB
  • 大小: 32.5 KB
2
0
分享到:
评论
1 楼 xfei6868 2009-07-30  
呵呵!看到你写的ntfs文章也很高兴啊,好像没看到你的代码啊.

相关推荐

    C/C++实现FAT文件系统的读写

    本篇文章将深入探讨如何在C/C++语言环境中,不依赖Windows API来实现对FAT文件系统的读写操作。 首先,理解FAT文件系统的核心组成部分至关重要。这包括主引导记录(MBR)、扇区、簇、FAT表、根目录以及数据区域。...

    C/C++关于文件的操作

    通过熟练掌握以上知识点,开发者可以高效地在C/C++程序中进行文件操作,实现数据的保存和加载,以及更复杂的文件系统交互。在实际项目中,这些技能至关重要,因为数据的持久化存储是许多应用程序的基础。

    vscode配置c/c++环境文件

    在此文件中,你需要添加或修改以下配置项来指定C/C++编译器路径和默认编译命令: ```json { "cppStandard": "c++17", // 根据需要选择合适的C++标准 "intelliSenseMode": "gcc-x64", // 根据你的系统和编译器...

    MATLAB模糊控制器(*.fis)C/C++接口文件

    * 这是修改过后的fis.c模糊推理系统库函数,可以移植C/C++环境使用,在VS2010的MFC环境经过测试 * 1、将fis.c文件拷贝到项目中; * 2、修改VS2010的配置属性,项目->属性->C/C++->预处理器->预处理器定义,添加 ...

    C/C++程序设计学习与实验系统

    在学C的时候碰到了麻烦,TurboC的.h文件好多VC没有,就上网找了一个这个工具。用这个来学习C参加二级考试挺实用的,是共享版,35块,比考试报名费便宜多了,不贵。机器码注册。官方介绍:原名《Turbo C/C++ for ...

    用C/C++实现代码的动态修改(SMC)

    由于该技术需要直接读写对内存中的机器码,所以多采用汇编语言实现,这使得很多想在自己的程序中使用SMC技术进行软件加密的C/C++程序员望而却步。针对这种现状,本文提出了几种基于C/C++语言的机器指令定位方法,...

    C/C++实现linux和Windows查看系统、进程、服务的内存和CPU使用

    C/C++实现linux和Windows查看系统、进程、服务的内存和CPU使用情况的源代码,生成的是静态链接库,Windows和Linux下经测试都可用,查看系统、指定名称的服务、指定名称的进程占用CPU和内存,查看方式不是通过程序中...

    Qt和C/C++实现的可视化景点旅游信息系统——包含详细注释与txt说明文件

    1. 熟悉 C/C++ 的人员 2. 正在做关于 Qt 可视化却无从下手的人员 3. 希望做一个小项目,但没有合适的框架的人员 我主要能学到什么: 1. 该项目包含 鼠标点击响应与绘图相关的算法 2. 该项目包含 创建、删除、编辑 ...

    C++语言实现一个类UNIX文件系统

    在C++中实现一个类UNIX文件系统是一项复杂的任务,它涉及到对操作系统内核级功能的模拟,主要包括文件和目录管理。以下是对这个项目的关键知识点的详细说明: **1. 文件系统基础** 首先,理解文件系统的基本概念至...

    c/c++实现的基于文件的RSA加解密

    通过这个项目,你可以学习到如何在C/C++环境中实现RSA算法,以及如何将它应用于文件的加解密操作。这对于理解非对称加密原理和提高信息安全编程能力非常有帮助。同时,这也是一个基础的密码学实践,有助于进一步研究...

    MATLAB Support for MinGW-w64 C/C++/Fortran Compiler

    总之,这个MATLAB支持包使得用户能够使用MinGW-w64编译器在MATLAB环境中编写C、C++和Fortran代码,同时与TrueTime 2.0工具箱配合,实现对实时系统行为的模拟和分析。通过这个包,开发者可以充分利用编译型语言的性能...

    c/c++中文帮助文档(API)

    C/C++是两种广泛使用的编程语言,特别是在系统级编程、游戏开发和高性能计算等领域。C++是C语言的扩展,引入了面向对象编程的概念。在编程过程中,理解并有效地使用库函数是至关重要的,因为它们提供了标准功能,...

    C/C++仿真实现Linux文件系统

    在本项目中,"C/C++仿真实现Linux文件系统"是一个旨在理解和模拟Linux操作系统核心功能的实践项目,特别是关注于文件系统相关的部分。通过这个项目,开发者可以深入理解文件系统的内部工作原理,包括文件的创建、...

    c语言/c++信息管理系统 考勤管理系统

    《C语言/C++信息管理系统——考勤管理系统》 在信息技术高度发达的今天,信息管理系统已经广泛应用于各行各业,其中考勤管理系统作为企业管理中的重要一环,能够有效地帮助企业进行员工出勤情况的跟踪与管理。本...

    编译原理课程设计 词法分析 C语言/c++版

    编译原理课程设计之一用编程语言实现词法分析,用C++实现 注释清楚详细,程序风格良好 /*目前实现的功能有: */ /* 0.课程要求的词法分析基本功能 */ /* 1.识别用户定义的初次定义的变量还是已经定义的变量还是错误...

    使用c/c++实现语义分析器

    这次编译原理实验要求实现语义分析,但最近空闲时间比较少,只能快速过一遍基础知识硬着头皮写了。但由于之前我设计文法大多只是为了测试使用,所以文法很不规范,这直接导致了语义子程序十分难实现,所以要想实现一...

    删除文件恢复C++实现

    本文将深入探讨如何使用C++在Windows操作系统下实现对NTFS(New Technology File System)和FAT32(File Allocation Table 32)文件系统中删除文件的恢复。 首先,我们需要了解文件在被删除后的情况。在Windows系统...

    C/C++语言文件逆向

    在这个项目中,C/C++被用来实现文件的逆向转换,这需要深入理解语言特性,如指针操作、内存管理以及文件I/O。 2. **文件操作**:在C/C++中,文件操作通过标准库中的`<fstream>`头文件实现。逆向转换可能包括读取...

    C/C++ API 帮助文档大全(中文,chm格式)

    C++是一种强大的、通用的编程语言,它在C语言的基础上增加了面向对象的特性,同时也支持泛型编程和底层系统级编程。C++ API通常包括标准库(如STL,Standard Template Library)、Boost库和其他第三方库提供的接口。...

    C++实现http/https/ftp文件下载

    在IT行业中,网络编程是一项重要的技能,特别是在处理文件传输时。本项目专注于使用C++语言实现对HTTP、HTTPS和FTP协议的支持,以实现文件的下载功能。这些协议是互联网上最常用的三种数据传输协议,各自有其特定的...

Global site tag (gtag.js) - Google Analytics