-
-
[求助]关于Kernel mode EXT Hook
-
发表于: 2009-1-14 11:24 4520
-
看了Rootkits: Subverting the Windows Kernel这本书中的"A Hybrid Hooking Approach", 想在LoadImageNotifyRoutine中修改输出表,关键点是如何改写输出表中函数的RVA。我按照书中作者的方法这样来修改:
Mdl = IoAllocateMdl((PVOID)destAddr, sizeof(PVOID), FALSE, FALSE, NULL);
MmBuildMdlForNonPagedPool(Mdl);
Mdl->MdlFlags |= MDL_MAPPED_TO_SYSTEM_VA;
MappedDest= MmMapLockedPages(Mdl, KernelMode);
*MappedDest = HookedRVA;
MmUnmapLockedPages(MappedDest, Mdl);
IoFreeMdl(Mdl);
这样做虽然可以修改输出表,但是却导致其他进程中该输出表函数的RVA项也被修改了,这使得在没注入钩子的进程中调用该函数会出错。我猜测这是由于把虚拟内存当作非分页内存来写,破坏了copy-on-write机制。有没有其他方法能避免这种缺陷?
Mdl = IoAllocateMdl((PVOID)destAddr, sizeof(PVOID), FALSE, FALSE, NULL);
MmBuildMdlForNonPagedPool(Mdl);
Mdl->MdlFlags |= MDL_MAPPED_TO_SYSTEM_VA;
MappedDest= MmMapLockedPages(Mdl, KernelMode);
*MappedDest = HookedRVA;
MmUnmapLockedPages(MappedDest, Mdl);
IoFreeMdl(Mdl);
这样做虽然可以修改输出表,但是却导致其他进程中该输出表函数的RVA项也被修改了,这使得在没注入钩子的进程中调用该函数会出错。我猜测这是由于把虚拟内存当作非分页内存来写,破坏了copy-on-write机制。有没有其他方法能避免这种缺陷?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
看原图
赞赏
雪币:
留言: