恶意软件能否隐藏自身,使其活动不会出现在任务管理器的进程列表中?它可以隐藏起来,以便当有人控制您的计算机时,即使您打开任务管理器,您也不会看到任何可疑活动?
如果是,它怎么能做到这一点?有什么技巧可以用这种方式隐藏?
恶意软件能否隐藏自身,使其活动不会出现在任务管理器的进程列表中?它可以隐藏起来,以便当有人控制您的计算机时,即使您打开任务管理器,您也不会看到任何可疑活动?
如果是,它怎么能做到这一点?有什么技巧可以用这种方式隐藏?
是的。有很多方法:
AppInit_DLLs
)或将代码注入进程内存并启动线程(via VirtualAllocEx
// WriteProcessMemory
)CreateRemoteThread
。Process32First
/Process32Next
函数以在执行枚举时“跳过”您的进程。CreateToolhelp32Snapshot
以便提前修改映射部分的内存(请参阅此处了解快照的工作原理),以便Process32First
/Process32Next
最终从假数据中读取。ntdll.dll!NtQuerySystemInformation
,如果SystemProcessInformation
通过,则修补结果以跳过您的过程。这是比上述调用更低级别的挂钩。SystemProcessInformation
查询。我不知道它在 Windows 中的真实名称(它没有记录),但基本上有一个处理程序表NtQuerySystemInformation
用于此目的,你只需要挂钩正确的一个。 这是实际处理程序的 ReactOS 实现。在这种情况下,您只会弄乱返回的结构,以免显示您的过程。EPROCESS
内存中的结构,以便您的进程完全对内核隐藏。内核维护一个循环链接的结构列表,表示所有正在运行的进程,其中FLink
和BLink
字段分别作为前向和后向指针。通过操纵这些指针跳过你的进程,然后操纵你的进程指针返回到它们自己,内核将在枚举期间跳过你的进程。这是一种常见的rootkit 技术。当然 - 有几种方法可以从任务管理器中隐藏。最简单的方法是使用名为“无害”的过程隐藏在众目睽睽之下。另一种选择是隐藏为子进程,然后不显示。
它也可以作为服务安装,同样使用一个无辜的名称。它会显示在服务列表中,但不会单独显示在任务列表中。我敢肯定,Google 搜索会显示其他更复杂的方法。