想知道像“Process Explorer”或“Combo Fix”这样的应用程序如何检测隐藏进程???我假设这必须用C或C ++完成。即使在.NET中也很容易访问进程列表但是这并不总是准确的,我知道root工具包可以从任务管理器中屏蔽自己。是通过内存访问和IO?好奇,如果有人知道这是如何完成的。
答案 0 :(得分:10)
这个问题无法回答。这取决于该过程首先被隐藏的方式。例如,某人可以通过将用户模式DLL注入到挂钩EnumProcesses
,Process32Next
等所有进程以及与进程枚举相关的所有其他API来隐藏进程。这可以通过跳过蹦床的蹦床来绕过。
但是,如果通过修改包含进程列表的内核EPROCESS
链接列表来隐藏进程,则需要另一种方法来破坏执行隐藏的代码。如果您定义了一个过程被“隐藏”的方式,我们可以建议如何检测它。您认为哪些进程被隐藏但仍被Process Explorer发现?
还考虑到你所说的可能有的 隐藏进程的多种方法。有哪些常见的方法 检测到这个?
问题在于,如果您不知道自己在寻找什么,那么几乎不可能找到它。假设一个进程通过挂钩EnumProcesses
使自己对任务管理器隐藏。您可能认为这将是一个容易检测的案例。但是,该过程可能通过各种不同方式挂钩EnumProcesses
。例如,函数开头的无条件挂钩,一个IAT挂钩,导致EnumProcesses
发生访问冲突并用VEH捕获并修改EIP / RIP等。即使在这个简单的在这种情况下,无法保证检测到钩子。这是假设钩子已经在特定API的usermode上执行,并且代码不会试图隐藏自己的检测。
如果您正在寻找一般指导方针,最好的方法可能是看看常见的迂回技术。一旦你知道一个方法是如何工作的,编写代码来检测操作是很容易的。
也许如果你有动力写这种代码或者它会起什么作用,我们就能够更好地帮助你。
如果您正在寻找程序绕道其他进程的执行方式,通常可以通过以下两种方法之一:
尽管Detours演示了一种动态绕行方法,但业内使用了无数种方法,特别是在逆向工程和黑客攻击领域。这些包括我上面提到的IAT和断点方法。为了“为你指明正确的方向”,你应该看看在研究项目和逆向工程领域进行的“研究”。