admin管理员组文章数量:1597897
2024年3月11日发(作者:)
Finding File Contents in Memory
The NT Insider, Vol 11, Issue 1, Jan-Feb 2004 | Published: 12-Mar-04| Modified:
19-Mar-04
声明:原文来自,所有权利归原作者所有,翻译并贴在这里的目的只为
学习和交流,除了商用你可以随意地使用这篇译文。但请不要删除声明。
——by jununfly
版本:20090120
在调试课上,我总是邀请学生带来crash dumps让我们分析。这有助于我们真实地掌
握分析崩溃的技能。近来,一学生带来了当访问文件时他的过滤驱动崩溃的一个dump。
他问”我怎么知道正被访问的是哪个文件?” 一旦我们向下跟踪,学生问"我如何看见文件
的内容 – 你确定它在内存里?"
如果你需要向下跟踪一个内存中的文件,你可以像本文介绍的一样做。
在深入这个机制钱,理解用于跟踪的数据结构的基本关系很有用。关键的数据结构是:
FILE_OBJECT – 这是Windows用于跟踪一个文件的一个单一的打开实例的对象。因
此,如果你有一个文件的多个打开实例,你就有多个文件对象。
SECTION_OBJECT_POINTERS – 这是把指定的FILE_OBJECT连接到虚拟内存控
制结构(当文件内容在内存中时它保持对文件内容的跟踪 – 并允许Windows在那些内容
不在内存中时取得它们.)上的数据结构。
CONTROL_AREA – 内存管理器用这个数据结构来跟踪一个给定部分的状态信息。
SHARED_CACHE_MAP – 缓存管理器用这个数据结构来跟踪文件中单独的被缓存
的区域(region)的状态。一个单一文件中可能有许多这样的被缓存的区域。
VACB – 缓存管理器用这个数据结构来描述在缓存中正被使用的虚拟地址,来访问一
个被缓存的区域中的数据。
在当前版本的Windows提供的公有类型信息中所有这些数据结构都可用 – 因此要
找到缓存所用的虚拟地址我们已经万事俱备。有了这些虚拟地址,找到真实的文件数据就
小菜一碟。
一般,我们使用IRP中的值或使用一个句柄并查找对象句柄表中的值来找到
FILE_OBJECT。因此,我们可以使用!irp命令(显示一个IRP和它的栈位置)或者用!handle
命令.不论哪个,我们要用作为结果的信息。这里,我选择用句柄,且以"Microsoft Word"
进程为例。为了达到这个目的我用了命令"!handle 0 3 86304020".第一个参数指示我想
要看到进程的所有的句柄(我不确定我要的是哪个句柄).第二个参数是标记域,它指示我想
要每个句柄的信息(默认值是1,表示仅提供根本信息.额外的标记意味着我展示各种对象的
名).第三个参数是进程的地址(以便句柄命令使用正确的句柄表).通过这我能浏览对象句柄
表来找出这个文件的句柄:
0cf0: Object: 85df1028 GrantedAccess: 0012019f
版权声明:本文标题:在内存中找文件内容 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1710120442a249298.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论