八喜 发表于 2013-3-18 13:42:49

NTFS文件系统扇区存储探秘之修改Bitmap扇区实现文件隐藏

第十四章 修改Bitmap扇区实现文件隐藏 附录:文中软件下载: http://bbs.intohard.com/thread-118572-2-1.html

    在NTFS文件系统的元数据文件中,有一个对簇的使用情况进行标记的文件,该文件称作“位图文件”,文件名为“$Bitmap”。

    在位图文件的MFT表中,记录了位图文件的数据存储地址,该数据存储地址的字段记录方式与其他文件是相同的。

    在位图文件的数据区内,扇区中的每一个字节的每一个位,表示了在本逻辑驱动器中的每一个簇的使用情况。如果某一个位为“0”,则表示其对应的簇未用,如果某一个位为“1”,则表示其对应的簇已经分配使用。

    如果将位图文件数据区内的某些原来为“0”的位,使用有关的工具程序修改为“1”,再在这些位所对应的簇中,写入需要隐藏的文件数据,就能实现隐藏文件的目的。
    使用这种操作方法,能够实现隐藏文件的原理是这样的:系统在将文件数据写入扇区时,首先要寻找位图文件数据区中的“0”位,然后将文件数据写入这些“0”位所对应的簇中。对于那些为“1”的位,系统则认为它们所对应的簇已经分配使用,就不会再使用它们了。直到使用这些簇的文件被删除以后,系统将那些“1”位改为“0”位以后,这些对应的簇才会重新被分配使用。

    使用这种方法写入扇区的文件数据,在其他的系统文件里没有记录,也不会在系统使用的任何控件或插件中表示出来。所以除了操作者之外,任何人都不可能发现这种隐藏的文件。

    如果操作者本人需要使用隐藏文件时,可以使用读取扇区数据的方法,将文件恢复出来然后使用。所以这种隐藏文件的方法,适用于那些使用频率不高的文件。
这种隐藏文件方法的优点是:

    1.文件数据是通过对物理扇区的写入而存储的,所以没有文件名,因此不存在误删除的问题。
    2.文件数据隐藏的效果好,其他人很难通过非法手段获得数据。
    3.即使对逻辑盘进行了格式化,或是对硬盘重新进行了分区,存储在扇区中的数据仍然能够保存完好。同时由于当初写入数据时,必然记下了写入的扇区地址,所以恢复文件数据时的操作非常简单、准确和高效。
    下面通过一个具体实例,来演示这种隐藏文件方法的全过程。

14.1隐藏文件前的准备工作

    为了使隐藏文件的演示过程容易理解,对扇区中字段值的查找与计算准确无误,需要将进行此项操作的逻辑盘进行某些技术处理。
    技术处理的第一步,是将演示所用的逻辑盘中的所有扇区,使用工具程序全部清零。这样便于在演示过程中,观察和对照扇区中的数据变化。
技术处理的第二步,是将经过清零操作的逻辑盘,重新格式化,建立起完整的文件系统数据。

14.1.1将逻辑盘的扇区清零

    先进行扇区清零的技术处理,具体操作在笔者使用的1号硬盘上进行,以逻辑驱动器F作为操作对象。
    在具体操作当中,需要知道F盘的起始与终止扇区号,为此将第30章中已经得到的各个逻辑盘的扇区号摘录如下:
Boot sector number:
1: 0
2: 63
3: 4192965
4: 4193028
5: 8385930
6: 8385993
7: 12578895
8: 12578958
9: 16771860
10: 16771923
11: 20964825
12: 20964888
13: 41447700
14: 41447763

    根据上面摘录的内容,可以知道记录F盘分区链表的扇区号是12578895,这是F盘的起始扇区号。记录G盘分区链表的扇区号是16771860,这是G盘的起始扇区号,在这之前的一个扇区就是F盘的最后一个扇区,扇区号是16771859。

    有一个问题需要特别提醒操作者注意,因为逻辑盘F是下一步操作和分析的对象,所以运行工具程序时必须在其他的逻辑盘上进行。如果在F盘上运行工具程序,则有的程序会对F盘进行某些写入扇区的操作,这就破坏了F盘的原有状况,不利于操作者进行扇区数据的对比分析。

    运行“连续扇区清零. exe”程序,程序界面如图14-1所示。

图14-1

    在图14-1的程序界面中,编辑框里输入硬盘编号“1”,然后点击“硬盘确定”按钮,程序界面如图14-2所示。

图14-2

    在图14-2的程序界面中,编辑框里输入清零的扇区区段的起始扇区号。如果根据实际需要,只清零演示操作中存储文件的扇区区段就可以了。但是这个扇区区段的选取不容易掌握,因为NTFS文件系统向扇区写入数据时,要根据文件的大小和扇区的使用情况,选取最合适的扇区区段。这个过程是在内核中完成的,操作者无法进行追踪。所以最可靠的方法,就是将逻辑驱动器所含的扇区全部清零。

    1号硬盘的F逻辑盘的起始和终止扇区号,从前面的分析中已经知道。开始于12578895号扇区,终止于16771859号扇区。但是在输入清零的起始扇区号的时候,一定要将12578895号扇区排除在外。因为该扇区中存储着F盘的分区链表,如果将其清零,则F盘及其以后的逻辑驱动器就无法识别了。可以将分区引导记录所在的扇区,即12578958号扇区,作为清零的起始扇区。因为分区引导记录是格式化时建立的,它不影响硬盘的分区链。

    在图14-2的编辑框里,输入起始扇区号12578958。然后点击“始扇确定”按钮,程序界面如图14-3所示。


图14-3

    在图14-3的程序界面中,编辑框里输入终止扇区号。输入时一定不要超越F盘的最后扇区,否则的话就将后面G盘的分区链表破坏了。因为逻辑驱动器中的扇区不可能全部被使用,所以在实际输入时可以提前若干个扇区。F盘的最终扇区号是16771859,可以输入16771850。然后点击“终扇确定”按钮,程序界面如图14-4所示。


图14-4

    在图14-4的程序界面中,点击“清零开始”按钮,程序即开始执行扇区清零功能。F盘的容量是2GB,程序运行约十几分钟后发出了音响提示,通知操作者清零结束。按一下空格键停止声音提示,程序界面如图14-5所示。


图14-5

    在图14-5的程序界面中,点击“退出”按钮,结束程序运行。
进行到这一步,不要再继续操作了。因为F盘的系统管理数据已经全部被清零了,这之后对F盘的任何操作,系统都会发出错误提示。

---------------------------2013.03.18日最后更新------------------------------------------

14.1.2格式化逻辑盘

现在进行技术处理的第二步,将经过清零操作的逻辑盘重新格式化。
    重新启动计算机,打开WINDOWS资源管理器,用鼠标点击盘符F,系统弹出一个警告对话框,如图14-6所示。

图14-6
    在图14-6中点击“是”按钮,系统弹出格式化插件选择窗口,在窗口的编辑框中输入格式化参数,其界面如图14-7所示。

图14-7
    在图14-7中点击“开始”按钮,就可以将F盘重新格式化为NTFS文件系统,每簇中含
1024字节,也就是2个扇区。
    至此,隐藏文件演示操作前的准备工作就完成了。

14.2隐藏文件的可行性试验

    这种隐藏文件的设想能够实现的关键问题是:在位图文件的数据区中,将某些位由原来的“0”置“1”以后,文件系统是否承认这种修改?也就是说,在这些由“0”置“1”的位所对应的簇中,文件系统如果认为这些簇是已经分配使用的簇,以后不再向这些簇中写入数据,这种隐藏文件的设想才能实现。
如何才能证明这个问题呢?可以实际操作一下来做一次可行性试验,试验的过程分以下几步来完成:
    1.对前面经过技术处理的逻辑盘F,读出其可使用的字节数。
    2.查找元文件中的位图文件,确定其数据区的扇区地址。
    3.在位图文件的数据区中,将原来的一些“0”位置成“1”。
    4.重新启动计算机以后,再一次读出F盘的可使用的字节数。
    5.将F盘前后两次读出的可使用的字节数进行比较,如果第二次读出的可使用的字节数减少了,减少的数量正好等于由“0”置成“1”的位所对应的簇,这说明文件系统已经承认了这种修改是有效的。

14.2.1查找位图文件的MFT记录

    首先读出F盘可使用的字节数。打开WINDOWS资源管理器,右键点击逻辑盘F的盘符,在弹出的窗口菜单中选取“属性”选项,F盘的属性窗口内容如图14-8所示。

图14-8
    在图14-8的显示界面中,可以看出F盘的可用空间是2133169152字节。
    在G盘上运行“查找硬盘扇区特征. exe”程序,程序界面如图14-9所示。
   
图14-9
    在图14-9的程序界面中,点击编辑框中的“▼”按钮,打开下拉选择列表,程序界面如图14-10所示。

图14-10
    在图14-10的程序界面中,选取下拉列表中的“长文件名”选项,然后点击编辑框右边的“确定”按钮,程序界面如图14-11所示。
   
图14-11
    在图14-11的程序界面中,点击编辑框中的“▼”按钮,打开下拉选择列表,程序界面如图14-12所示。

图14-12
    在图14-12的程序界面中,选取下拉列表中的“扇区号增加”选项,然后点击编辑框右边的“确定”按钮,程序界面如图14-13所示。
   
图14-13
    在图14-13的程序界面中,编辑框里输入硬盘的编号“1”,然后点击“硬盘确定”按钮,程序界面如图14-14所示。

图14-14
    在图14-14的程序界面中,需要输入查找的起始扇区号。可以从分区引导记录的扇区号开始查找,所以在编辑框中输入“12578958”,然后点击“扇区确定”按钮,程序界面如图14-15所示。

图14-15
    在图14-15的程序界面中,编辑框里需要输入查找的扇区特征。元文件中的位图文件的名称是Bitmap,文件名的字母一定要区分大小写,所以在编辑框里输入“Bitmap”,然后点击“特征确定”按钮,程序界面如图14-16所示。

图14-16
    在图14-16的程序界面中,需要输入备份扇区数据的文件名。输入的方法有两种,可以直接在编辑框里输入带路径的文件名,也可以点击编辑框右边的“浏览”按钮,在随后打开的保存文件对话框里,选择路径和文件名。
    本例中采用直接输入的方法,在编辑框里输入“g:\bitmap”,然后点击“开始查找”按钮,程序即开始执行查找功能。
    当找到符合特征值的扇区以后,程序发出音响提示。操作者可以按一下空格键使音响停止,这时程序界面如图14-17所示。

图14-17
    在图14-17的程序界面中,编辑框里显示出了找到的扇区号是“12579002”,这是NTFS元文件中,位图文件的MFT文件表记录。
现在可以点击“退出”按钮,结束程序运行。

14.2.2确定位图文件数据区地址

    前面已经将12579002号扇区的数据,保存在了G盘的名为bitmap的文件中,接下来就可以使用工具程序,打开bitmap文件,查看有关的字段记录,用以确定位图文件数据区的存储地址。
    运行“查看扇区文件数据. exe”程序,程序界面如图14-18所示。

图14-18
    在图14-18的程序界面中,点击编辑框右边的“浏览”按钮,弹出打开文件选择对话框,在对话框中选择G盘的bitmap文件,程序界面如图14-19所示。

图14-19
    在图14-19的程序界面中,选取好路径和文件名以后,点击“打开”按钮,程序界面如图14-20所示。

图14-20
    在图14-20的程序界面中,点击“显示数据”按钮,程序界面如图14-21所示。

图14-21
    在图14-21的程序界面中,弹出一个对话框,将文件bitmap中的512个字节的值,以十六进制的字节显示方式显示在对话框中。每行显示16个字节,总共显示32行。
    现在分析对话框里与本章有关的两个字段的值,一个是记录位图文件的数据区的存储地址的字段值,另一个是记录位图文件的数据所占用簇数的字段值。
第20行的后8个字节,显示的数据是“32 00 01 CD 2F 10 00 00”,这8个字节中包含两个字段值。
字段值“CD 2F 10”记录的是位图文件的数据区的存储地址,写成十六进制数是102fcdH,换算成十进制数是1060813。由十六进制数向十进制数的转换,可以使用笔者提供的“数制转换. exe”程序,该程序的使用比较简单,前面已经介绍过,此处就不再重复介绍了。
这个数值表示的是逻辑盘中的簇号,乘上簇因子,就是逻辑盘中的逻辑扇区号。簇因子指的是每个簇所包含的扇区数,从前面14.1.2节的图14-7中,可以知道每簇包含1024个字节,即包含两个扇区,也就是说簇因子是2。
所以逻辑扇区号的计算公式是:
1060813×2=2121626
    将逻辑扇区号的值,加上逻辑盘的起始扇区地址,就得到物理扇区的存储地址。逻辑盘的起始扇区地址,是从分区引导记录的存储扇区开始计算的,现在的操作对象是F盘,该扇区地址是12578958。
    所以物理扇区的存储地址是:
    2121626+12578958=14700584
    字段值“00 01”记录的是位图文件数据所占用的簇数,写成十六进制数是100H,换算成十进制数是256。乘上簇因子2,得到512,这是扇区数,即位图文件的数据占用了512个扇区空间。
    进行后面的操作所需要的字段值已经分析完毕,在图14-21的程序界面中,点击“退出”按钮,结束程序运行。

---------------------------2013.03.19日最后更新------------------------------------------

八喜 发表于 2013-3-18 13:49:19

14.2.3修改位图文件的扇区数据

    在确定了位图文件的数据区地址和占用的扇区空间以后,就可以继续进行下一步操作了。接下来需要对位图文件的数据进行修改,从而观察文件系统对这种修改是否能够承认。
    运行“即时修改扇区数据. exe”程序,程序界面如图14-22所示。

图14-22
    在图14-22的程序界面中,编辑框里输入硬盘编号“1”,然后点击“硬盘确定”按钮,程序界面如图14-23所示。

图14-23
    在图14-23的程序界面中,编辑框里需要输入修改数据的扇区号。在上一节已经计算出位图文件的数据区地址,是14700584号扇区,这是数据区起始的第一个扇区。原则上修改哪一个扇区的数据并不重要,只要这个扇区是属于位图文件所占用的空间之内的扇区就可以,也就是说从14700584开始的512个扇区中,修改哪一个扇区都行。
    考虑到现在操作的F盘是刚刚格式化过的,存储的数据肯定不多,所以就选择第一个扇区进行修改。在编辑框里输入扇区号“14700584”,然后点击“显示数据”按钮,程序界面如图14-24所示。

图14-24
    在图14-24的程序界面中,弹出一个对话框,显示了位图文件数据区的第1个扇区的字节数据。在全部512个字节中,只有前8个字节的值是ffH。这些字节中的每个位都是“1”,它们所对应的簇已经被分配使用,这是在逻辑盘被格式化时由系统数据占用的。除去这8个字节之外的其他字节都是00H,这些字节的每个位所对应的簇都是可用的。
    现在选取该扇区中的第13至16字节,也就是对话框中第1行的最后4个字节,作为修改的对象,将这些字节的值由原来的00H修改为ffH。
    如果修改了这些字节的值以后,在逻辑盘F的属性对话框中,系统检测到的磁盘可用空间一栏里,减去了这些字节位所对应的逻辑簇空间,则说明系统已经承认了这种修改,以后不会再向这些簇中写入新的数据了。
    先预先推算一下应该减去多少磁盘空间,然后在后面的操作中验证这一推算结果。每个字节中有8个位,修改了4个字节,也就是总共32个位。每个位对应一个簇,所以对应着32个簇。簇因子是2,总共有64个扇区,所以总的字节数是:
    512×64=32768
在图14-8中,系统检测到的磁盘可用空间是2133169152个字节。现在经过修改位图文件的数据以后,系统重新检测到的磁盘可用空间应该是:
2133169152-32768=2133136384(个字节)
    这个推算结果可以在后面的操作中得到验证。
    现在进行修改字节值的操作。在图14-24的程序界面中,编辑框里输入字节编号“13”,然后点击“编号确定”,程序界面如图14-25所示。

图14-25
    在图14-25的程序界面中,编辑框里输入修改以后的字节新值“ff”,然后点击“新值确定”按钮,程序界面如图14-26所示。

图14-26
    在图14-26的程序界面中,弹出了第二个对话框,显示出修改后的扇区字节的值。可以看出,第13个字节的值已经变成了ffH。这里需要说明一个问题,现在对话框中字节值的改变,只是内存中数据的变化,还没有真正对扇区数据进行修改。
    因为还需要修改其他字节的值,所以在图14-26的程序界面中,点击“是否继续修改?”提示行下面的“是”按钮,程序界面如图14-27所示。

图14-27
    图14-27的程序界面,实际上又回到了图14-24的显示状态。在编辑框里输入需要修改的下一个字节的编号,也就是第14个字节,重复执行修改数据的操作。一直到将13至16字节全部修改成功,程序界面如图14-28所示。

图14-28
    在图14-28的程序界面中,因为不需要继续修改字节数据了,所以点击“是否继续修改?”提示行下面的“否”按钮,程序界面如图14-29所示。

图14-29
    在图14-29的程序界面中,点击“写回扇区”按钮,程序则将修改以后的数据写回扇区中去,扇区中原来的数据将被覆盖。
    前面曾经说过,修改字节数据的操作过程是在内存中进行的,只有当执行了“写回扇区”的功能以后,扇区中的数据才被更新。为什么要如此设置程序的功能呢?这是因为即时修改扇区数据具有一定的危险性,如果由于操作者的失误,修改数据不正确,同时原来的数据又被覆盖了,将会造成不可弥补的磁盘故障。
    使用上面的这种程序功能设置,能够让操作者有足够的时间观察数据修改的正确性,一旦发现错误,可以立即中止操作。
    点击“写回扇区”按钮以后,程序界面如图14-30所示。

图14-30
    在图14-30的程序界面中,点击“退出”按钮,结束程序运行。

14.2.4文件系统对修改数据的反映

    接下来就要观察文件系统对修改位图文件数据的反映了,退出所有程序,然后重新启动计算机。
    打开WINDOWS资源管理器,右键点击逻辑盘F的盘符,在弹出的对话框中选取“属性”选项,打开的对话框如图14-31所示。

图14-31
    在图14-31的属性对话框中,系统显示的F盘的可用空间是2133136384字节,系统检测结果与前面的推导结果是完全一致的。
    这就说明文件系统已经将修改数据后的字节位所对应的簇,看作已经分配使用的簇了,这为后面隐藏文件的操作找到了依据。

---------------------------2013.03.20日最后更新------------------------------------------


14.3位图与扇区地址的对应关系

    在上一节的操作中,取得了文件系统对修改位图文件数据承认的依据,但是要进行隐藏文件的实际操作,还有一个问题需要解决。

    采用这种方法隐藏文件时,是先修改位图文件的字节位,然后将文件数据按硬盘的扇区地址写入的。因此在具体操作时,必须了解位图文件的字节位与硬盘扇区地址的对应关系,才能准确地将文件数据写入所对应的扇区中去。

    如何确定位图文件的字节位和硬盘扇区地址之间的计算规律呢?本节通过一项具体操作,来推算出一条通用的计算公式。

    操作的主要步骤如下:
    1.用有关的工具程序,取得F盘位图文件数据区的扇区特征值。
    2.向F盘拷入一个文件,然后使用工具程序确定存储文件数据的首扇区地址。
    3.比较F盘位图文件数据区的扇区变化,找出被修改过的字节位。
    4.从前面所取得的数据中,推算出一条通用的计算公式。

14.3.1提取位图文件数据区的扇区特征

    在进行操作之前再重复强调一下,工具程序不要在进行试验的F盘上运行,以免破坏F盘的有关数据。
    在G盘上运行“监测扇区数据变化. exe”程序,程序界面如图14-32所示。

图14-32

    在图14-32的程序界面中,编辑框里输入硬盘的编号“1”,然后点击“硬盘确定”按钮,程序界面如图14-33所示。

图14-33

    在图14-33的程序界面中,需要在编辑框里输入起始扇区号。前面在14.2.2一节中,已经计算出位图文件的数据区地址是14700584,全部数据占用512个扇区。
    在图14-33的编辑框里输入起始扇区号“14700584”,然后点击“始扇确定”按钮,程序界面如图14-34所示。

图14-34

    在图14-34的程序界面中,需要在编辑框里输入终止扇区号。因为位图文件的数据占用512个扇区,所以可用下式计算:
    14700584+512-1=14701095
在图14-34的编辑框里输入终止扇区号“14701095”,然后点击“终扇确定”按钮,程序界面如图14-35所示。

图14-35

    在图14-35的程序界面中,点击编辑框里的“▼”按钮,打开下拉选择列表,程序界面如图14-36所示。

图14-36

    在图14-36的程序界面中,选取下拉列表框里的“备份扇区校验值”选项,然后点击编辑框右边的“确定”按钮,程序界面如图14-37所示。

图14-37

    在图14-37的程序界面中,编辑框里需要输入备份扇区特征的文件名。输入的方法有两种,可以直接在编辑框里输入带路径的文件名,也可以点击编辑框右边的“浏览”按钮,在随后打开的保存文件对话框中,选择路径和文件名。
    本例中采用直接输入的方法,在编辑框里输入“g:\mapdata”,然后点击“存储数据”按钮,程序转入下一个界面,如图14-38所示。

图14-38

    在图14-38的程序界面中,点击“退出”按钮结束程序运行。
    打开WINDOWS资源管理器,可以看到在G盘运行程序的根目录下,生成了一个名为mapdata的文件。这个文件记录了位图文件数据区中,512个扇区的特征值,此后如果其中某一个扇区的数据被修改了,使用工具程序的“比较扇区校验值”功能,就可以将修改了数据的扇区找出来。

14.3.2确定试验文件数据的存储地址

现在将一个试验用的文件拷入F盘的根目录下,文件名为“playrlic.txt”,这是一个文本文件,是RealNetworks产品的软件许可说明。
    文件playrlic.txt的大小是28735字节,现在先预算一下该文件数据在F盘上所占用的簇数。前面在格式化F盘时,设定的“分配单元大小”选项是1024字节,这也是每簇的字节数。用28735除以1024,得到的整数是28,后面还有余数。因为簇是逻辑盘中最小的存储单元,不可能分割,所以余数要向前进位,也就是说文件要占用29个簇。
    拷入文件以后,接下来就要确定文件数据的存储地址。确定文件数据的存储地址的方法有两种,第一种方法是先查找文件的MFT表记录,通过对有关字段值的数值计算,得到文件数据的存储地址;第二种方法是查找文件内容中的特征值,从而确定文件数据的存储地址,本例中所用的试验文件playrlic.txt是一个纯文本文件,所以直接查找文件内容中的字符串,就能确定它们的存储地址。
    本例中使用第一种方法进行查找。
查找文件名可以使用工具程序“查找汉字文件名. exe”,虽然这是为查找汉字文件名而写的程序,但该程序同样也能适用于查找ASCII字符的文件名。
运行“查找汉字文件名. exe”程序,程序界面如图14-39所示。


图14-39
    在图14-39的程序界面中,点击编辑框里的“▼”按钮,打开下拉选择列表,程序界面如图14-40所示。


图14-40
    在图14-40的程序界面中,在下拉列表框里选中“向扇区号增加的方向”,然后点击编辑框右边的“确定”按钮,程序界面如图14-41所示。


图14-41
    在图14-41的程序界面中,编辑框里输入硬盘的编号“1”,然后点击“硬盘确定”按钮,程序界面如图14-42所示。


图14-42
    在图14-42的程序界面中,需要输入查找的起始扇区号,可以从F盘的分区引导记录扇区号开始查找。编辑框里输入扇区号“12578958”,然后点击“扇区确定”按钮,程序界面如图14-43所示。


图14-43

    在图14-43的程序界面中,编辑框里输入查找的文件名“playrlic.txt”,然后点击“特征确定”按钮,程序界面如图14-44所示。

图14-44

    在图14-44的程序界面中,需要输入备份数据的文件名,这个文件是存储MFT文件记录表的数据的。输入的方法有两种,可以直接在编辑框里输入带路径的文件名,也可以点击编辑框右边的“浏览”按钮,在随后打开的保存文件对话框里,选择路径和文件名。
    本例中采用直接输入的方法,在编辑框里输入“g:\filemft”,然后点击“开始查找”按钮,程序即开始执行查找功能。
    当找到符合特征值的扇区以后,程序发出音响提示。操作者可以按一下空格键使音响停止,这时程序界面如图14-45所示。

图14-45

    在图14-45的程序界面中,编辑框里显示出了查找到的扇区号是“12579056”。现在可以点击“退出”按钮,结束程序运行。
    在WINDOWS资源管理器中,可以看到G盘的根目录下,生成了名为“filemft”的文件,这就是playrlic.txt的MFT文件记录表的备份文件。
    接下来使用工具程序,打开前面建立的filemft文件,根据有关的字段记录,计算出文件playrlic.txt的数据存储地址。
    运行“查看扇区文件数据. exe”程序,程序界面如图14-46所示。

图14-46

    在图14-46的程序界面中,点击编辑框右边的“浏览”按钮,出现打开文件选取对话框,在对话框里选择G盘的filemft文件,程序界面如图14-47所示。

图14-47

    在图14-47的程序界面中,选取好路径和文件名以后,点击“打开”按钮,程序界面如图14-48所示。


图14-48
    在图14-48的程序界面中,点击“显示数据”按钮,程序界面如图14-49所示。


图14-49

    在图14-49的程序界面中,弹出一个对话框,将文件filemft中的512个字节的值,以十六进制的显示方式显示在对话框里。
    现在分析对话框显示的数据中两个字段的值,一个是记录文件playrlic.txt的数据存储地址的字段值,另一个是记录文件playrlic.txt的数据所占用簇数的字段值。
第21行的后8个字节,显示的数据是“31 1D A6 2F 10 00 00 00”,这8个字节中包含两个字段值。
字段值“A6 2F 10”记录的,是文件playrlic.txt的数据存储地址,写成十六进制数是102fa6H,换算成十进制数是1060774。由十六进制数向十进制数的转换,可以使用笔者提供的“数制转换. exe”程序。
这个数值表示的是逻辑盘中的簇号,乘上簇因子2,就得到逻辑盘中的逻辑扇区号。
所以逻辑扇区号的计算公式是:
1060774×2=2121548
    将逻辑扇区号的值,加上逻辑盘的起始扇区地址,就得到物理扇区的存储地址。逻辑盘的起始扇区地址,可以从14.1.1一节中查出,扇区号是12578958。
    所以物理扇区的存储地址是:
    2121548+12578958=14700506
    字段值“1D”记录的,是文件playrlic.txt的数据所占用的簇数,换算成十进制数是29,这与前面预算的结果是一致的。
    所需要的字段值已经分析完毕,在图14-49的程序界面中,点击“退出”按钮,结束程序运行。

---------------------------2013.03.21日最后更新------------------------------------------

八喜 发表于 2013-3-18 13:49:36

14.3.3查找位图数据被修改的字节位

    上一节向F盘拷入文件playrlic.txt以后,系统肯定要将该文件数据所占用的簇,在位图文件的数据区中进行标记,也就是将与簇对应的位由“0”改为“1”。
    本节的操作内容,是查找文件系统修改了位图文件的哪些位,从而在位图文件的“位”与文件数据存储的“簇”之间,找出一个对应的换算关系。
    在14.3.1一节中已经提取了位图文件数据区的扇区特征,并且存储在了mapdata文件中,将现在的位图文件数据区的扇区特征,与先前的备份文件mapdata的数据进行比较,就能发现系统修改了哪些字节和位。
    运行“监测扇区数据变化. exe”程序,程序界面如图14-50所示。

图14-50
    在图14-50的程序界面中,编辑框里输入硬盘的编号“1”,然后点击“硬盘确定”按钮,程序界面如图14-51所示。

图14-51
    在图14-51的程序界面中,编辑框里输入位图文件数据区的起始扇区号“14700584”,然后点击“始扇确定”按钮,程序界面如图14-52所示。

图14-52
    在图14-52的程序界面中,编辑框里输入位图文件数据区的终止扇区号“14701095”,然后点击“终扇确定”,程序界面如图14-53所示。

图14-53
在图14-53的程序界面中,点击编辑框里的“▼”按钮,打开下拉选择列表,程序界面如图14-54所示。

图14-54
    在图14-54的程序界面中,选取下拉列表框里的“比较扇区校验值”选项,然后点击编辑框右边的“确定”按钮,程序界面如图14-55所示。

图14-55
在图14-55的程序界面中,点击编辑框右边的“浏览”按钮,弹出打开文件选取对话框,在对话框中选择G盘的mapdata文件,程序界面如图14-56所示。

图14-56
    在图14-56的程序界面中,选取好路径和文件名以后,点击“打开”按钮,程序界面如图14-57所示。

图14-57
    在图14-57的程序界面中,点击“比较数据”按钮,程序即开始将现在的扇区特征,与mapdata文件中的记录进行比较。比较完成以后,程序显示界面如图14-58所示。

图14-58
    在图14-58的程序界面中,窗口的左边出现了一个显示对话框,显示出经过比较后,数值发生变化的扇区号是14700842。
    现在可以点击“退出”按钮,结束程序运行。
    接下来使用工具程序,查看一下第14700842号扇区的数据,找出被文件系统由“0”置为“1”的字节和位。
    运行“查看硬盘扇区数据. exe”程序,程序界面如图14-59所示。

图14-59
    在图14-59的程序界面中,编辑框里输入硬盘编号“1”,然后点击“硬盘确定”按钮,程序界面如图14-60所示。

图14-60
在图14-60的程序界面中,逻辑框里输入扇区号“14700842”,然后点击“显示数据”按钮,程序界面如图14-61所示。

图14-61
在图14-61的程序界面中,弹出的对话框里显示了14700842号扇区中,512个字节的十六进制值。光凭着观察对话框中的字节值,却发现无法判断到底是哪些字节和位被修改过,因为这个扇区中的几乎所有的字节位,都被置成了“1”。
本例中出现这种情况的原因,是产生了一种巧合,即14700842号扇区中字节位所对应的簇,已经被文件系统分配使用了。虽然在本章一开始的操作中,就曾经将F盘进行过格式化,格式化后的位图文件数据区中,绝大部分扇区中的字节位,肯定是被置为“0”了。但由于有一些系统写入的数据,还是要占用一部分磁盘空间,所以仍然有少量的字节位,被文件系统置为“1”。现在的情况就是,向F盘拷入文件playrlic.txt时,所需要置“1”的字节位,正好落在系统写入数据时,需要将字节位置“1”的扇区中了。
为了找出向F盘拷入文件playrlic.txt时,由“0”置“1”的字节位,需要继续进行操作。操作所依据的原理是这样的:既然向F盘拷入文件时,系统要将位图数据的某些字节位由“0”置为“1”,那么将拷到F盘上的文件删除时,系统也要将相应的字节位由“1”改为“0”。所以,只要将文件playrlic.txt删除,然后再读出14700842号扇区的数据,就能发现被修改过的字节位。
在图14-61的程序界面中,点击“退出”按钮,结束程序运行。
    打开WINDOWS资源管理器,将F盘根目录下的playrlic.txt文件删除。
    再一次运行“查看硬盘扇区数据. exe”程序,执行从图14-59到图14-60的操作过程。这个过程与前面完全相同,就不重复讲述了,最后的显示结果如图14-62所示。

图14-62
    将图14-61与图14-62比较一下,可以发现扇区的字节数据中,最后一行的5个字节被修改了,这5个字节中的位,就是与文件playrlic.txt的数据所占用的簇所对应的。

14.3.4推导通用的计算公式

    通过前面的操作,已经取得了所需要的有关数据,本节对这些数据进行汇总与分析,推导出一个用于隐藏文件的通用计算公式。
    图14-62中的扇区数据,是向F盘拷入文件playrlic.txt前的状态。图14-61中的扇区数据,是向F盘拷入文件playrlic.txt后的状态。也就是说,在将文件playrlic.txt拷入F盘以后,与文件playrlic.txt占用的簇相对应,系统修改了5个字节的值,将图14-62中的“3F 00 00 00 00”,修改成了图14-61中的“FF FF FF FF 07”。
    根据这5个被修改了的字节值,先分析第一个问题,文件系统在修改字节数据时,是从前向后进行呢?还是从后向前进行。根据这5个字节的比较,可以得出结论,是从前面的字节开始,向后进行修改的。得出这个结论的依据是,最前面的字节“3F”中的位全部置为“1”以后,变成了“FF”。而最后面的字节“00”只有部分位被置为“1”,变成了“07”,可见字节的修改顺序是由前向后进行的。
    再来分析第二个问题,文件系统在修改字节中的位时,是先修改低位呢?还是先修改高位。最前面的字节原值是3fH,写成二进制是00111111B,可以看出文件系统是先将低6位置“1”的。再看最后一个字节,原来是00H,修改后变成了07H,写成二进制是00000111B,很明显也是先从低位开始置“1”的。
    修改位图数据以后,最前面的字节置“1”2个位,最后面的字节置“1”3个位,中间的3个字节的位全部置“1”是24个位。所以在修改的5个字节中,所有置“1”的位合计是29个,这与前面计算的playrlic.txt文件数据占用的簇数是一致的。
    要利用修改位图数据的方法,达到隐藏文件的目的,必须掌握修改的字节位,与存储文件的逻辑簇号之间的对应关系。为了在这两者之间推导出一个通用的计算公式,将前面已经得到的有关数据汇集到一起,如表14-1所示。


现在将表14-1中几个数据的取值与推算方法解释如下:
    注1:到目前为止,使用的是反向操作方法,来寻找隐藏文件的规律。所以现在这一扇区地址,是向F盘中拷入文件以后,由系统修改位图数据产生的。不过在实际隐藏文件的操作中,这一扇区地址是由操作者主动确定的。也就是说,要先修改某一扇区中的位图数据,然后再将需要隐藏的文件数据,使用对物理扇区进行写操作的方法,写入与位图数据相对应的扇区中去。
    在主动确定这一扇区地址时,必须保证它位于位图文件的数据区内。以本例来讲,必须位于14700584号扇区与14701095号扇区之间。
    注2:该数值是由算式14700842-14700584得到的。
    注3:该数值是在修改数据的扇区中,修改的第1个字节之前的字节数。以图14-62为例,是字节“3F”之前的字节数,其值是500。
    注4:该数值是由算式258×512×8+500×8+6得到的,如果写成通用的计算公式就是(①×每扇区字节数×每字节位数+②×每字节位数+③=④)。
    注5:该数值可以由算式28735÷512÷2进位取整得到,如果写成通用的计算公式就是((文件字节数÷每扇区字节数÷每簇扇区数)的结果进位取整)。
    注6:该数值是由算式1060774×2+12578958得到的,如果写成通用的计算公式就是(④×每簇扇区数+分区引导记录扇区号=⑤)。
    通过以上的汇总分析,就可以确定隐藏文件的操作流程和有关的数值计算方法。计算方法在上面的注解中已经列出公式,操作流程归纳如下:
    1.查找位图文件的MFT文件记录表。
    2.根据MFT文件记录表中的字段值,确定位图文件数据存储的扇区区间。
    3.根据需要隐藏的文件的字节数,以及NTFS逻辑盘的每簇扇区数,计算存储文件数据需要占用的簇数。
    4.在位图文件数据存储的扇区区间内,修改某一个扇区的字节位,修改的字节位应等于或大于文件数据占用的簇数。
    在这一步操作中,需要说明一个问题。当修改的字节位大于文件数据所占用的簇数时,可能会浪费少量的磁盘存储空间,但可以简化计算过程。譬如在注4所列出的公式中,如果全部取00H的字节进行修改,就可以省略“+③”的计算步骤;如果取一个扇区的第1个字节进行修改,就可以省略“+②×每字节位数”的计算步骤。
    5.计算隐藏文件的逻辑簇号。
    6.计算隐藏文件的扇区地址。
    7.将隐藏文件的数据写入扇区,操作过程结束。
---------------------------2013.03.26日最后更新------------------------------------------

八喜 发表于 2013-3-18 13:52:22

14.4隐藏文件实战演示

将前面反向推导的全部过程正过来,就是实际隐藏文件的操作顺序,现在用一个实例来具体演示一下。

    演示用的隐藏文件,仍然使用前面推导过程中使用的playrlic.txt文件。该文件的字节数是28735,存储数据需要占用29个簇。

    本章前面已经查找到的扇区存储地址,以及某些经过计算得到的结果,现在继续使用。这样整个隐藏文件的过程就可以简化为两个步骤,第一步是修改位图文件数据区的字节位;第二步是将隐藏文件的数据,写入与这些字节位相对应的扇区中去。

    运行“即时修改扇区数据. exe”程序,程序界面如图14-63所示。

图14-63
    在图14-63的程序界面中,编辑框里输入硬盘编号“1”,然后点击“硬盘确定”按钮,程序界面如图14-64所示。

图14-64
在图14-64的程序界面中,编辑框里输入扇区号。这个扇区号一定要在位图文件数据区的范围之内,根据表35-1中已经得到的数据,也就是应该在14700584与14701095之间。假定选取的扇区号是14700600,在编辑框里输入“14700600”以后,点击“显示数据”按钮,程序界面如图14-65所示。

图14-65
    在图14-65的程序界面中,需要确定修改的字节数及其位置。因为playrlic.txt文件数据占用29个簇,所以需要修改29个位。为了便于操作与计算,可以多修改几个位,使总位数是每个字节位数的整数倍。本例中可以修改32个位,也就是4个字节。当然这样处理以后,硬盘上要浪费少量的存储空间,不过现在的硬盘都很大,浪费几个扇区换来的是简便的操作,也是值得的。

    修改的字节位置就选取从第1个字节开始,前面已经讲过,这样处理可以省略掉一部分计算过程。
    在编辑框里输入字节编号“1”,然后点击“编号确定”按钮,程序界面如图14-66所示。

图14-66
    在图14-66的程序界面中,编辑框里输入“ff”,然后点击“新值确定”按钮,程序界面如图14-67所示。

图14-67
    在图14-67的程序界面中,第1个字节已经变成了新值“FF”。点击“是”按钮,继续修改其他字节,一直到前4个字节都修改成了“FF”,如图14-68所示。

图14-68
    在图14-68的程序界面中,点击“否”按钮,程序界面如图14-69所示。

图14-69
    在图14-69的程序界面中,点击“写回扇区”按钮,程序界面如图14-70所示。

图14-70
    在图14-70的程序界面中,点击“退出”按钮,结束程序运行。
    至此,需要修改的位图文件数据已经完成。按下来使用有关的工具程序,将隐藏文件的数据写入与位图相对应的扇区中去。
    运行“写隐藏文件数据. exe”程序,程序界面如图14-71所示。

图14-71
    在图14-71的程序界面中,编辑框里输入硬盘编号“1”,然后点击“硬盘确定”按钮,程序界面如图14-72所示。

图14-72

    在图14-72的程序界面中,编辑框里需要输入存储数据的起始扇区号。计算该扇区号,需要先计算文件数据在NTFS逻辑盘中的逻辑簇号,使用14.3.4一节里“注4”中的公式进行计算。因为前面修改的位图文件数据,是从一个扇区的第1个字节开始的,而且字节里的所有位全部置“1”,所以公式中的后两项计算就可以省略了。
    修改扇区前的位图数据扇区数是:14700600-14700584=16
    文件数据在NTFS逻辑盘中的逻辑簇号是:16×512×8=65536
    再使用14.3.4一节里“注6”中的公式,计算存储数据的起始扇区号:
    65536×2+12578958=12710030
    在图14-72的编辑框里输入“12710030”,然后点击“始扇确定”按钮,程序界面如图14-73所示。

图14-73
    在图14-73的程序界面中,点击编辑框右边的“浏览”按钮,弹出打开文件选择对话框,程序界面如图14-74所示。

图14-74
    在图14-74的程序界面中,选取G盘的playrlic.txt文件,然后点击“打开”按钮,程序界面如图14-75所示。

图14-75
    在图14-75的程序界面中,点击“文件确定”按钮,程序界面如图14-76所示。

图14-76
    在图14-76的程序界面中,点击“写入扇区”按钮,程序即开始执行写入功能,将文件playrlic.txt的数据连续写入扇区。这里需要强调说明一个问题,在点击“写入扇区”按钮之前,一定要确认前面的操作准确无误。如果扇区地址的计算发生错误,可能会将原来扇区中的数据覆盖,从而造成无法修复的故障。文件数据写入完成以后,程序会显示提示语句,显示界面如图14-77所示。

图14-77
在图14-77的程序界面中,点击“退出”按钮,结束程序运行。
    如果要想恢复文件,只要使用笔者提供的“读扇区拷贝文件. exe”程序,按照写入数据时的扇区地址,以及文件的字节长度,在编辑框中输入正确的参数,就能将原来的文件恢复出来。

    至此,在NTFS文件系统的逻辑盘中,隐藏文件的可行性分析、计算公式地推导、实战操作演示就全部完成了。这种隐藏文件的方法,从可靠性和隐蔽性方面分析,比其他的方法都要优越。

在可靠性方面,因为隐藏文件的数据不受系统记录的影响,所以在硬盘受到破坏的情况下,可以很轻松地将文件数据恢复出来。无论是系统崩溃,还是误删除,或者是误格式化,只要写入隐藏文件数据的扇区不被其他数据覆盖,就可以使用笔者提供的程序将数据恢复出来。而那些受系统记录影响的文件,在系统记录被严重破坏以后,是没有办法恢复的。

    在隐蔽性方面,由于这种隐藏文件的方法没有任何线索可寻,所以除操作者之外的任何人,都不可能发现隐藏的奥秘。其他隐藏文件与加密文件的方法,都是有规律可循,可以发现并且可以破解的。在当前常用的文件加密措施中,NTFS文件系统中的EFS加密,应该是文件系统中最强的加密方法。但是EFS加密方式,也总有一个确定的目标,让破译者有一个攻击的对象。耗费一定的时间并且经过大量地运算,也是可以破解的。

   笔者举一例来说明这个问题。在1997年,美国的一个数据安全公司,悬赏1万美元破解密钥长度是56位的DES密码算法。美国科罗拉多州的一个程序员,利用互联网动员了几万名志愿者,使用第一代奔腾计算机,进行联合攻击。只用了96天的时间,就使用最原始的穷举法,成功破译了长达56位的密钥。而今天的普通计算机,运算速度已经比当时的老奔腾机快了几十甚至几百倍,所以再长的密钥算法,总是有破解的可能。

   采用本章介绍的修改位图文件数据的方法,将机密文件隐藏起来。除了隐藏文件的操作者之外,其他人发现不了任何隐藏文件的依据,所以根本找不到目标进行攻击,在这层意义上与其他的文件加密方法进行比较,其隐蔽性还是比较好的。
    如果在将隐藏文件数据写入扇区的同时,采取某些加密算法,可以使隐藏文件的隐蔽性更强。
---------------------------2013.03.28日最后更新------------------------------------------

八喜 发表于 2013-3-18 13:53:28

---------------------------本章内容全部2013年3月28日全部更新完毕------------------------------------------

西安零壹 发表于 2013-3-18 16:52:24

占位,不更新。

英胜数据恢复 发表于 2013-3-18 18:18:38

支持一下。。。。。。。。。

GTXsteven 发表于 2013-3-18 21:14:52

支持一下。。。。。。。。。

the263 发表于 2013-3-18 21:20:18

好像有一本书里的插图就是这样的。八喜写的?
我只翻了两眼就扔下了,感觉那书没用。

飞翔者 发表于 2013-3-19 08:54:49

支持 八喜!!!
页: [1] 2 3 4 5
查看完整版本: NTFS文件系统扇区存储探秘之修改Bitmap扇区实现文件隐藏