如何检测隐藏进程

bum*_*una 1 c c++ windows

想知道像"Process Explorer"或"Combo Fix"这样的应用程序如何检测隐藏进程??? 我假设这必须用C或C++完成.即使在.NET中也很容易访问进程列表但是这并不总是准确的,我知道root工具包可以从任务管理器中屏蔽自己.是通过内存访问和IO?好奇,如果有人知道这是如何完成的.

Mik*_*wan 10

这个问题无法回答.这取决于该过程首先被隐藏的方式.例如,某人可以通过注入一个用户模式DLL到钩所有进程隐藏的方法EnumProcesses,Process32Next等,所有处理枚举相关其他API.这将被跳过钩子的蹦床绕过.

但是,如果通过修改EPROCESS保存进程列表的内核链表来隐藏进程,则需要另一种方法来破坏执行隐藏的代码.如果您定义了一个过程被"隐藏"的方式,我们可以建议如何检测它.您认为哪些进程被隐藏但仍被Process Explorer发现?


同时考虑到你所说的可能存在多种隐藏进程的方法.有哪些常见方法可以检测到这种情况?

问题是,如果你不知道你在寻找什么,几乎不可能找到它.假设一个进程通过挂钩使自己隐藏在任务管理器中EnumProcesses.您可能认为这将是一个容易检测的案例.但是,这个过程可能会EnumProcesses以各种不同的方式挂钩.例如,函数开头的无条件钩子,IAT钩子,导致访问冲突发生在EnumProcessesVEH并修改EIP/RIP等等.即使在这个简单的情况下,它也不是可以保证检测钩子.这都是假设钩子已经在特定API的usermode上执行,并且代码也没有试图隐藏自己的检测.

如果您正在寻找一般指导方针,最好的方法可能是查看常见的绕行技术.一旦你知道一个方法如何工作,编写代码来检测操作是微不足道的.

也许如果你给出了编写这种代码的动机或它将服务的目的,我们就能够更好地帮助你.


如果您正在寻找程序绕道其他进程的执行方式,通常通过以下两种方法之一:

  • 动态(运行时)绕行 - 这是更常用的方法,也是Microsoft Detours等库使用的方法.这是一篇相关论文,其中函数的前几个字节被覆盖,无条件地分支到仪器.
  • (静态)二进制重写 - 这是一种不太常见的rootkit方法,但是被研究项目使用.它允许通过静态分析和重写二进制来执行绕行.用于执行此操作的Windows的旧(非公开可用)程序包是Etch.本文从概念上高度概括了它的工作原理.

虽然Detours演示了一种动态绕行的方法,但业内使用了无数的方法,特别是在逆向工程和黑客攻击领域.这些包括我上面提到的IAT和断点方法.为了"指出你正确的方向",你应该看看在研究项目和逆向工程领域进行的"研究".