阅读:1702回复:6
如何过滤Word的读写数据?
我想对word的文件数据读写进行过滤,试了很多方法(比如用户态hook一些ole32.dll中的函数,驱动态hook ZwReadFile和ZwWriteFile等)都没有成功,希望各位高手给以思想上和方法上的指导。如对word的工作过程很了解,给出有关word读写文件操作的原理和流程(函数级)也可以。这里先谢了!!
|
|
|
沙发#
发布于:2004-10-27 19:12
我也想知道,帮你顶一下。
|
|
板凳#
发布于:2005-05-11 14:25
现在在顶一下
|
|
|
地板#
发布于:2005-05-11 14:44
word 对文件的写操作比较特殊。通常word会先创建一个隐藏的临时文件,对文件进行的所有修改都是对该临时文件的修改。保存时,原文件将被删除,临时文件改名为原文件。
用户层对文件的读写不会调用到ZwReadFile/ZwWriteFile,用户层的文件读写函数,最终将影射到驱动层的NTReadFile/NtWriteFile,这实际上是个系统服务. 对文件的读写操作的过滤可以写文件过滤驱动,具体可参见FileMon |
|
|
地下室#
发布于:2005-05-11 15:55
要不是有人提起已经把这个贴子给忘了!
通过ZwReadFile和ZwWriteFile确是可以得到一些数据,但并不是全部,我用FileMon看了一下,其读写操作还是有点复杂,其中有FastIo *的操作包含了全部的数据,但并不是通过ZwReadFile和ZwWriteFile来实现的,怀疑其对应的API应该是MapViewOfFile。 总之,要想准确的得到其数据可能要写文件系统驱动了!这是我的看法,不知各位大侠还有何更好的方法? |
|
|
5楼#
发布于:2005-05-11 18:38
用户层对文件的读写不会调用到ZwReadFile/ZwWriteFile,用户层的文件读写函数,最终将影射到驱动层的NTReadFile/NtWriteFile,这实际上是个系统服务. 这几句没有明白,那到底用户层是否调用ZwReadFile/ZwWriteFile? 还是直接调用NTReadFile/NtWriteFile,或者两者都不调用? 如liwashington所说,“FastIo *的操作包含了全部的数据”是什么意思?难道doc把数据全部catch了,那么也许用的是MapViewOfFile函数!但问题MapViewOfFile? |
|
|
6楼#
发布于:2005-05-12 13:29
[quote]用户层对文件的读写不会调用到ZwReadFile/ZwWriteFile,用户层的文件读写函数,最终将影射到驱动层的NTReadFile/NtWriteFile,这实际上是个系统服务. 这几句没有明白,那到底用户层是否调用ZwReadFile/ZwWriteFile? 还是直接调用NTReadFile/NtWriteFile,或者两者都不调用? 如liwashington所说,“FastIo *的操作包含了全部的数据”是什么意思?难道doc把数据全部catch了,那么也许用的是MapViewOfFile函数!但问题MapViewOfFile? [/quote] 是这样,我通过HOOK ZwReadFile和ZwWriteFile等函数并跟踪Word的运行得知Word程序确实是调用了ZwReadFile和ZwWriteFile这两个函数,但文件的全部数据不全是通过这两个函数实现读写的。至于NtReadFile和NtWriteFile这两个函数,情况好像是这样的:在系统中提供了NtXXX和ZwXXX的两种函数,但实际上它们在作用上是相同的,不知是不是全部相同,但大多好像是相同的。 |
|
|