【发布时间】:2012-01-14 21:19:27
【问题描述】:
想知道“进程资源管理器”或“组合修复”等应用程序如何检测隐藏进程?我假设这必须在 C 或 C++ 中完成。即使在 .NET 中也很容易访问进程列表,但这并不总是准确的,我知道 root 工具包可以从任务管理器中屏蔽自己。是通过内存访问和 IO 吗?好奇是否有人知道这是如何完成的。
【问题讨论】:
想知道“进程资源管理器”或“组合修复”等应用程序如何检测隐藏进程?我假设这必须在 C 或 C++ 中完成。即使在 .NET 中也很容易访问进程列表,但这并不总是准确的,我知道 root 工具包可以从任务管理器中屏蔽自己。是通过内存访问和 IO 吗?好奇是否有人知道这是如何完成的。
【问题讨论】:
这个问题无法回答。这取决于该过程最初是如何隐藏的。例如,有人可以通过将用户模式 DLL 注入所有挂接EnumProcesses、Process32Next 等的进程以及与进程枚举相关的所有其他 API 来隐藏进程。这将被跳过钩子的蹦床绕过。
但是,如果通过修改包含进程列表的内核EPROCESS 链表来隐藏进程,则需要另一种方法来破坏执行隐藏的代码。如果您定义了您认为进程被“隐藏”的方式,也许我们可以建议如何检测它。您认为哪些进程被隐藏但仍被 Process Explorer 发现?
同时考虑到你所说的可能有 隐藏进程的多种方法。常用的方法有哪些 检测到这个?
问题在于,如果您不知道自己在寻找什么,那么几乎不可能找到它。假设一个进程通过挂钩EnumProcesses 将自己隐藏在任务管理器中。您可能认为这将是一个容易检测的案例。但是,该过程可能会通过各种不同的方式挂钩EnumProcesses。例如,函数开头的无条件挂钩,IAT 挂钩,导致在EnumProcesses 发生访问冲突并使用 VEH 捕获并修改 EIP/RIP 等。即使在这种简单的情况下,无法保证检测到钩子。这一切都假设钩子已经在特定 API 的用户模式下执行,并且代码没有尝试隐藏自己以防检测。
如果您正在寻找一般指南,最好的方法可能是查看常见的绕道技术。一旦你知道了一个方法的工作原理,编写代码来检测操作就很简单了。
也许如果您有动力编写此类代码或它的用途,我们将能够为您提供更好的帮助。
如果您正在寻找程序绕道执行其他进程的方法,通常是通过以下两种方式之一:
尽管 Detours 展示了一种动态迂回方法,但业界使用的方法不计其数,尤其是在逆向工程和黑客领域。其中包括我上面提到的 IAT 和断点方法。要为这些“指明正确的方向”,您应该查看在研究项目和逆向工程领域进行的“研究”。
【讨论】: