本人在研究hook ssdt,相对记事本,word文件进行加密,就是透明加密那种。现在由于记事本和其它office软件都是用内存映射方式打开文件的,因此,我在hook了ZwMapViewOfSection,zwcreatesection函数。这两个函数已经实现挂钩,但是现在问题是,我怎么访问映射区的数据内容。
NTSTATUS HookZwMapViewOfSection(
IN HANDLE SectionHandle,
IN HANDLE ProcessHandle,
IN OUT PVOID *BaseAddress,
IN ULONG_PTR ZeroBits,
IN SIZE_T CommitSize,
IN OUT PLARGE_INTEGER SectionOffset OPTIONAL,
IN OUT PSIZE_T ViewSize,
IN SECTION_INHERIT InheritDisposition,
IN ULONG AllocationType,
IN ULONG Win32Protect
)
在ddk文档中,解释BaseAddress指向视图的地址,我想弄明白它指向的这个地址是不是映射到文件的开始位置,如果当前我打开一个记事本文件,我想访问记事本的数据内容,我应该怎么通过BaseAddress访问?
还有一点疑问,ViewSize返回的是视图的大小,但是我打印出来的值都非常的大,都上几百兆了,请问这个情况是否正常,或者我理解有误
DbgPrint("content:");
for (i = 0; i < 5; i ++)
{
DbgPrint("%c",temp+'0');
temp++;
}
}
我输出了ZwMapViewOfSection的各个参数,发现BaseAddress 基址很小像007f814,而viewsize却很大2997005648.
想请教各位,我直接打印BaseAddress的内容是否能得到记事本的内容?我这样写代码DbgPrint("%c",(PCHAR)temp+'0');是否正确?包括我输出的参数值,是我没写好代码,还是就是这样的。