免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > 物理内存取证之文件与缓存分析(3)

物理内存取证之文件与缓存分析(3)

时间:2012-05-06 17:28来源:未知 整理:寂涯网络 点击:



文件与缓存分析
图2中对取证而言,最感兴趣的是原型ptes数组mmpte,原型pte包含了内存页物理地址。 若替换此物理地址,则原型pte中的一个指针会重新指向原subsection对应的页被交换到磁盘文件上。Subsection结构中的NumberOfFullSectors和PtesInSubsection字段值对于原型ptes数组的遍历十分重要。每个原型pte占4096字节页大小,每个完整的扇区占512字节, 故每个pte中至多能存放8个扇区内容。为了准确判断哪些内容在内存,哪些内容保存在磁盘 上,需要获取正确的边界对齐值。
文件取证
 

(2) Shared Cache Map
SharedCacheMap是指向SHARED_CACHE_MAP结构体的指针,如图3所示。它包含了文件大 小、缓存cache中有效数据长度等。若validdatalength大于文件大小,则SHARED_CACHE_MAP
无效。此结构体也包含了initialvacbs成员-包含4个指向vacbs(虚拟地址控制块)的指
针。每个vacb占256kb大小,若文件大小<1mb,则fileobject可以用4个vacbs表示;若文件 大小在1mb与32mb之间,则系统会采用一个vacb数组来描述文件内容;超出32mb大小,则会 引入二级指针,类似于虚拟内存的多级页表管理模式。vacb树深度可以使用公式: (log(n) -18)/7计算。

案例分析

我们可以对一个文件进行分析,打开一个文件通过程序获取到文件对象值(这里可以采 用驱动程序调用ObReferenceObjectByHandle函数,根据文件句柄值获取到文件对象值。假 设值为8606bea8,则此时使用windbg工具执行“dtnt!_FILE_OBJECT8606bea8”,可以得出 此文件对象下每个成员的内存地址信息,如下所示:
lkd> dt nt!_FILE_0BJECT 8606bea8  
+0x000 Type 5
+0x002 Size 112
+0x004 DeviceObject 0x86f22cc0
+0x008 Vpb : 0x86f22c38
+0x00c FsContext 0xe1d32710
+0x010 FsContext2 0xe18a25b8
+0x014 SectionObjectPointer : 0x86cae074 
+0x018 PrivateCacheMap (null)
+0x01c FinalStatus :0
+0x020 RelatedFileObject :(null)
+0x030 FileName :_UNICODE_STRING 〃\Documents and
Settings\index. txt〃  
+0x038 CurrentByteOffset  :_LARGE_INTEGER 0x0
然后继续跟踪sectionobjectpointer结构,执行 “dt nt!_SECTION_OBJECT_POINTERS 0x86cae074”,获取到此结构体的三个指针值,即0&1&56(^丨00013」6(^, SharedCacheMap* ImageSectionObjects.假设执行得出的结果如下:
lkd> dt nt!_SECTION_OBJECT_POINTERS 0x86cae074 +0x000 DataSectionObject : 0x86e3e1a8 +0x004 SharedCacheMap : 0x86413008 +0x008 ImageSectionObject : (null)
前面已经分析过,ControlArea结构体中包含一个指向原文件对象的指针即 FilePointer,我们在执行 “dt nt!_SHARED_CACHE_MAP 0x86413008” 之前,需要判断校验 其001^^01肚6&结构体中的卩116卩01的61指针值,即执行“dtnt!_control_area 0x86e3e”” . 这里假设满足此校验要求,此时我们可以直接执行“dtnt!_SHARED_CACHE_MAP 0x86413008”,
获取SHARED_CACHE_MAP结构体详细内容,即提取出7&出8指针值,进而获取文件在缓存中的 内容,假设执行结果如下:
lkd> dt nt! SHARED CACHE MAP 0x86413008
+0x008 FileSize _LARGE_ _INTEGER 0x48000
+0x010 BcbList _LIST_ENTRY [ 0x86413018  
+0x018 SectionSize _LARGE_ _INTEGER 0x100000
+0x020 ValidDataLength _LARGE_ _INTEGER 0x48000
+0x028 ValidDataGoal _LARGE_ _INTEGER 0x48000
+0x030 InitialVacbs [4] 0x86face00  
+0x040 Vacbs 0x86413038 ->  0x86face00
+0x044 File0bject 0x866068d8  
从文件大小看,文件内容小于―,故只占一个vacb.再次跟踪vacb结构:
lkd> dt nt!_VACB 0x86face00 
+0x000 BaseAddress : 0xd4680000
+0x004 SharedCacheMap : 0x86413008
+0x008 Overlay : —unnamed
+0x010 LruList : _LIST_ENTRY [ 0x86facfa8 _ 0x86facfc0
*VACBSfttt,此时我们可以获取文件在内存中的内容,执行如下命令即可:
lkd> db d4680000
d4680000 43 6c 69 65 6e 74 20 55-72 6c 43 61 63 68 65 20 Client UrlCache
d4680010 4d 4d 46 20 56 65 72 20-35 2e 32 00 00 80 04 00 MMF Ver 5. 2.....

本页地址 http://www.jybase.net/biancheng/20120506907.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com