阅读:1390回复:5
为什么以下hook代码在有些机器上会荡机?
为什么以下hook代码在有些机器上会荡机?
__declspec(dllimport) ServiceDescriptorTableEntry_t KeServiceDescriptorTable; //宏定义 #define SYSTEMSERVICE(_function) KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)] NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath) { HookSystemCall(); } VOID HookSystemCall() { OldZwOpenProcess = (ZW_OPENPROCESS)(SYSTEMSERVICE(ZwOpenProcess)); _asm cli (ZW_OPENPROCESS)(SYSTEMSERVICE(ZwOpenProcess)) = NewZwOpenProcess; _asm sti } 而我改将hook代码修改成一下以后在荡机的机器上运行就好了? PMDL g_pmdlSystemCall; PVOID *MappedSystemCallTable; BOOLEAN MDLinit = FALSE; #define HOOK_SYSCALL(_Function, _Hook, _Orig ) \ _Orig = (PVOID) InterlockedExchange( (PLONG) &MappedSystemCallTable[SYSCALL_INDEX(_Function)], (LONG) _Hook) NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath) { initMDL(); HookSystemCall(); } NTSTATUS initMDL() { // map memory into our domain g_pmdlSystemCall = MmCreateMdl(NULL, KeServiceDescriptorTable.ServiceTableBase, KeServiceDescriptorTable.NumberOfServices*4); if(!g_pmdlSystemCall) return STATUS_UNSUCCESSFUL; MmBuildMdlForNonPagedPool(g_pmdlSystemCall); // change MDL permissions g_pmdlSystemCall->MdlFlags = g_pmdlSystemCall->MdlFlags | MDL_MAPPED_TO_SYSTEM_VA; MappedSystemCallTable = MmMapLockedPages(g_pmdlSystemCall, KernelMode); MDLinit = TRUE; return STATUS_SUCCESS; } VOID HookSystemCall() { OldZwOpenProcess = (ZW_OPENPROCESS)(SYSTEMSERVICE(ZwOpenProcess)); _asm cli HOOK_SYSCALL( ZwOpenProcess, NewZwOpenProcess, OldZwOpenProcess ); _asm sti } |
|
沙发#
发布于:2007-09-03 17:08
在有些机器上一运行到
(ZW_OPENPROCESS)(SYSTEMSERVICE(ZwOpenProcess)) = NewZwOpenProcess; 就荡掉了,只是个别机器而已. |
|
板凳#
发布于:2007-09-03 19:30
MS为了更好的实现核心保护,把SSDT放到了代码段,不过32位下可以通过CR0,或MDL来进行处理,不过随着64BIT系统的临近,及最新CPU技术的发展,以后的PTAHCGUARD保护将移至虚拟技术的VMM中,由于强大的RING -1层保护,对于所有的hook来说将会是一场噩梦。。。。。。
|
|
|
地板#
发布于:2007-09-03 19:54
那就自己去找MS的系统漏洞吧
|
|
地下室#
发布于:2007-09-04 09:27
谢谢wowocock ,再问一下通过cr0的hook在本机上荡机,而通过mdl却没有问题是什么原因呢?本机cpu是amd 64bit 双核cpu,我记的前段时间我在32bit的机器上运行修改cr0的hook也出现过现在这种情况.
|
|
5楼#
发布于:2007-09-04 17:19
一般修改CR0不会蓝,至少我从来没碰到过,无论是PD还是酷睿,都没问题。
|
|
|