这本来是一个老掉牙的问题, 结果在网上一搜竟然没有什么好的解决方案, 还是自己来吧, 如果你觉得这篇文章有点帮助, 请给点回复.
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 阅读(2826)
评论(10) 编辑 收藏 引用