阅读:2210回复:1
Hook SSDT蓝屏
// 储存旧的函数地址
RealRegOpenKey = (ZWOPENKEY)(SYSTEMSERVICE(ZwOpenKey)); RealRegQueryKey = (ZWQUERYKEY)(SYSTEMSERVICE(ZwQueryKey)); RealRegQueryValueKey = (ZWQUERYVALUEKEY)(SYSTEMSERVICE(ZwQueryValueKey)); RealRegEnumerateValueKey = (ZWENUMERATEVALUEKEY)(SYSTEMSERVICE(ZwEnumerateValueKey)); RealRegEnumerateKey = (ZWENUMERATEKEY)(SYSTEMSERVICE(ZwEnumerateKey)); RealRegCloseKey = (ZWCLOSE)(SYSTEMSERVICE(ZwClose)); RealRegFlushKey = (ZWFLUSHKEY)(SYSTEMSERVICE(ZwFlushKey)); RealRegDeleteKey = (ZWDELETEKEY)(SYSTEMSERVICE(ZwDeleteKey)); RealRegSetValueKey = (ZWSETVALUEKEY)(SYSTEMSERVICE(ZwSetValueKey)); RealRegCreateKey = (ZWCREATEKEY)(SYSTEMSERVICE(ZwCreateKey)); RealRegDeleteValueKey = (ZWDELETEVALUEKEY)(SYSTEMSERVICE(ZwDeleteValueKey)); RealRegLoadKey = (ZWLOADKEY)(SYSTEMSERVICE(ZwLoadKey)); RealRegUnloadKey = (ZWUNLOADKEY)(SYSTEMSERVICE(ZwUnloadKey)); // 把SSDT隐射到我们的区域,以便修改它为可写属性 g_pmdlSystemCall = MmCreateMdl(NULL, KeServiceDescriptorTable.ServiceTableBase, KeServiceDescriptorTable.NumberOfServices*4); if(!g_pmdlSystemCall) return STATUS_UNSUCCESSFUL; MmBuildMdlForNonPagedPool(g_pmdlSystemCall); // 改变MDL的Flags属性为可写,既然可写当然可读,可执行 g_pmdlSystemCall->MdlFlags = g_pmdlSystemCall->MdlFlags | MDL_MAPPED_TO_SYSTEM_VA; MappedSystemCallTable = MmMapLockedPages(g_pmdlSystemCall, KernelMode); // 用了宏,把原来的Zw*替换成我们的New*函数。至此已完成了我们的主要两步,先突破了SSDT的保护,接着用宏更改了目标函数,下来就剩下具体的过滤任务了 HOOK_SYSCALL( ZwOpenKey, HookRegOpenKey,RealRegOpenKey); HOOK_SYSCALL( ZwQueryKey, HookRegOpenKey,RealRegQueryKey); HOOK_SYSCALL( ZwQueryValueKey, HookRegQueryValueKey,RealRegQueryValueKey); HOOK_SYSCALL( ZwEnumerateValueKey, HookRegEnumerateValueKey,RealRegEnumerateValueKey); HOOK_SYSCALL( ZwEnumerateKey, HookRegEnumerateKey,RealRegEnumerateKey); HOOK_SYSCALL( ZwClose, HookRegCloseKey,RealRegCloseKey); HOOK_SYSCALL( ZwFlushKey, HookRegFlushKey,RealRegFlushKey); HOOK_SYSCALL( ZwDeleteKey, HookRegDeleteKey,RealRegDeleteKey); HOOK_SYSCALL( ZwSetValueKey, HookRegSetValueKey,RealRegSetValueKey); HOOK_SYSCALL( ZwCreateKey, HookRegCreateKey,RealRegCreateKey); HOOK_SYSCALL( ZwDeleteValueKey, HookRegDeleteValueKey,RealRegDeleteValueKey); HOOK_SYSCALL( ZwLoadKey, HookRegLoadKey,RealRegLoadKey); HOOK_SYSCALL( ZwUnloadKey, HookRegUnloadKey,RealRegUnloadKey); IsHooked = TRUE; 怎么第一句就蓝屏了??把OpenKey的原始地址保存给RealRegOpenKey怎么蓝屏了??哪位大牛指点下!!!! |
|
沙发#
发布于:2010-05-21 18:31
你把其他代码贴上咯!看你上面的,没有错的。
|
|