阅读:1820回复:3
在xp下利用ZwQuerySystemInformation实现进程隐藏问题!
我参考了论坛里各位高手关于进程隐藏的意见,同时也参考了T-ProcMon的代码,实现了一个进程隐藏小程序。该程序在2000下和部分xp下运行没有问题,但是在有些xp下运行就会导致蓝屏。有些帖子说是由于函数替换时没有设置好读写属性,小弟不是非常明白,还请各位高手指点,谢谢。
/////////////////////////HOOK的代码 HookSystemService() { OldZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)(SYSCALL(ZwQuerySystemInformation)); OldZwOpenProcess = (ZWOPENPROCESS)(SYSCALL(ZwOpenProcess)); OldZwTerminateProcess = (ZWTERMINATEPROCESS)(SYSCALL(ZwTerminateProcess)); OldZwQueryInformationProcess = (ZWQUERYINFORMATIONPROCESS)(SYSCALL(ZwQueryInformationProcess)); OldZwSetInformationProcess = (ZWSETINFORMATIONPROCESS)(SYSCALL(ZwSetInformationProcess)); _asm cli (ZWQUERYSYSTEMINFORMATION)(SYSCALL(ZwQuerySystemInformation)) = NewZwQuerySystemInformation; (ZWOPENPROCESS)(SYSCALL(ZwOpenProcess)) = NewZwOpenProcess; (ZWTERMINATEPROCESS)(SYSCALL(ZwTerminateProcess)) = NewZwTerminateProcess; (ZWQUERYINFORMATIONPROCESS)(SYSCALL(ZwQueryInformationProcess)) = NewZwQueryInformationProcess; (ZWSETINFORMATIONPROCESS)(SYSCALL(ZwSetInformationProcess)) = NewZwSetInformationProcess; IsHooked = TRUE; _asm sti return STATUS_SUCCESS; } |
|
沙发#
发布于:2005-06-14 14:52
在ring0,如果cr0的第16为1,去修改只读页,就会产生异常。所以要去修改只读页,需要清除cr0的第16位,
__asm{ mov eax,cr0 mov OldCr0,eax and eax,0fffeffffh mov cr0,eax } 修改后,再恢复cr0 __asm { mov eax,OldCr0 mov cr0,eax } |
|
板凳#
发布于:2005-06-14 15:26
在ring0,如果cr0的第16为1,去修改只读页,就会产生异常。所以要去修改只读页,需要清除cr0的第16位, 这是大家讨论的最简单的方法,softice是通过修改Pte属性的,其实还有可以在GDT中新加入一项映射到相同物理内存的方法。 |
|
|
地板#
发布于:2005-06-14 20:13
谢谢版主,程序已经测试通过了。
|
|