Coder
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望34点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
阅读:1820回复:3

在xp下利用ZwQuerySystemInformation实现进程隐藏问题!

楼主#
更多 发布于:2005-06-14 11:57
我参考了论坛里各位高手关于进程隐藏的意见,同时也参考了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;
}
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于: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
}
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-14 15:26
在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
}

这是大家讨论的最简单的方法,softice是通过修改Pte属性的,其实还有可以在GDT中新加入一项映射到相同物理内存的方法。
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
Coder
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望34点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-14 20:13
谢谢版主,程序已经测试通过了。
游客

返回顶部