posts - 20,comments - 15,trackbacks - 0

这本来是一个老掉牙的问题,  结果在网上一搜竟然没有什么好的解决方案, 还是自己来吧,  如果你觉得这篇文章有点帮助, 请给点回复.


1. 分析任务管理器使用的api, 经查其使用的api为NtQuerySystemInformation, 查msdn可知该api可取得进程信息链表

2. 使用全局钩子注入任务管理器, 然后api hook 上述函数, 把当前要隐藏的进程项从链表中删除

LONG WINAPI MyNtQuerySystemInformation(
                   SYSTEM_INFORMATION_CLASS SystemInformationClass,
                   PVOID SystemInformation,
                   ULONG SystemInformationLength,
                   PULONG ReturnLength
                   )
{
    LONG lRet 
= RealNtQuerySystemInformation(SystemInformationClass, SystemInformation,
        SystemInformationLength, ReturnLength);

    
if(SystemInformationClass == SystemProcessInformation) {

        PSYSTEM_PROCESS_INFORMATION     pCurrent;
        PSYSTEM_PROCESS_INFORMATION        pPrev;
        
int cbOffset = 0;
        BOOL bFind 
= FALSE;

        
do 
        {
            bFind 
= FALSE;
            pCurrent 
= (PSYSTEM_PROCESS_INFORMATION)&((LPBYTE)SystemInformation)[cbOffset];
            
if(pCurrent->UniqueProcessId != 0) {
                LPTSTR pszImageName 
= *(LPTSTR*)((LPBYTE)pCurrent + 0x3c);
                
if(pszImageName ) {
                    
if( lstrcmpi(pszImageName, _T("your.exe")) == 0 
                            )
                    {
                        bFind 
= TRUE;
                    }
                }
            }

            
if(!bFind)
                pPrev 
= pCurrent;
            
else {
                pPrev
->NextEntryOffset += pCurrent->NextEntryOffset;
            }

            cbOffset 
+= pCurrent->NextEntryOffset;

        } 
while(pCurrent->NextEntryOffset);
    }
    
    
return lRet;
}
posted on 2010-08-13 16:44 wangkang 阅读(2756) 评论(10)  编辑 收藏 引用

FeedBack:
# re: r3用全局钩子隐藏任务管理器里的进程
2010-08-13 17:19 | jxgxy
用驱动也可以做到。  回复  更多评论
  
# re: r3用全局钩子隐藏任务管理器里的进程[未登录]
2010-08-13 20:05 | by
@jxgxy
驱动要证书。
  回复  更多评论
  
# re: r3用全局钩子隐藏任务管理器里的进程
2010-08-13 22:25 | hoodlum1980
以前加过这个功能,后来发现在登陆用户的等级较低的时候,会报错,没法隐藏进程;  回复  更多评论
  
# re: r3用全局钩子隐藏任务管理器里的进程
2010-08-14 03:00 | 西木左旋肉碱
大哥好久没更新博客了啊..  回复  更多评论
  
# re: r3用全局钩子隐藏任务管理器里的进程[未登录]
2010-08-14 11:42 | dd
请问“使用全局钩子注入任务管理器”中的设置全局钩子,如何设置的呢?
(另外:不使用全局钩子也可以注入任务管理器哦)  回复  更多评论
  
# re: r3用全局钩子隐藏任务管理器里的进程
2010-08-16 09:08 | wangkang
@dd
全局钩子和api hook的资料比较好找, dll注入方式的文章也很多, 所以这篇文章就没细说.  回复  更多评论
  
# re: r3用全局钩子隐藏任务管理器里的进程[未登录]
2010-08-16 11:09 | dd
@wangkang
全局钩子,在有你“设置的事件”触发时,才被触发吧,然后这个dll被加载到进程。

那你不是得想办法触发这个事件,比如案件,移动鼠标?  回复  更多评论
  
# re: r3用全局钩子隐藏任务管理器里的进程
2010-08-16 15:39 | wangkang
@dd
这里用WH_CBT/WH_FOREGROUNDIDLE/WH_SHELL较好, 其它类型的钩子不太适合. WH_KEYBOARD/WH_MOUSE是肯定不能用的, 它确实是事件触发后才挂钩子.  回复  更多评论
  
# re: r3用全局钩子隐藏任务管理器里的进程
2011-04-01 16:39 | matom
这种方法在win2003多用户登录的情况下,对其它的登录用户不起作用,在用户A中运行程序进行挂钩隐藏进程之后,用户B任然可以在任务管理器中看到隐藏的进程。  回复  更多评论
  
# re: r3用全局钩子隐藏任务管理器里的进程[未登录]
2011-04-02 10:55 | wangkang
@matom
注册表里有一个自启动键值, 你可以把你的挂钩程序放到那个键值下试试。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理