【问题标题】:How to Detect Hidden Processes如何检测隐藏进程
【发布时间】:2012-01-14 21:19:27
【问题描述】:

想知道“进程资源管理器”或“组合修复”等应用程序如何检测隐藏进程?我假设这必须在 C 或 C++ 中完成。即使在 .NET 中也很容易访问进程列表,但这并不总是准确的,我知道 root 工具包可以从任务管理器中屏蔽自己。是通过内存访问和 IO 吗?好奇是否有人知道这是如何完成的。

【问题讨论】:

    标签: c++ c windows


    【解决方案1】:

    这个问题无法回答。这取决于该过程最初是如何隐藏的。例如,有人可以通过将用户模式 ​​DLL 注入所有挂接EnumProcessesProcess32Next 等的进程以及与进程枚举相关的所有其他 API 来隐藏进程。这将被跳过钩子的蹦床绕过。

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


    同时考虑到你所说的可能有 隐藏进程的多种方法。常用的方法有哪些 检测到这个?

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

    如果您正在寻找一般指南,最好的方法可能是查看常见的绕道技术。一旦你知道了一个方法的工作原理,编写代码来检测操作就很简单了。

    也许如果您有动力编写此类代码或它的用途,我们将能够为您提供更好的帮助。


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

    • 动态(运行时)绕行 - 这是更常见的方法,也是 Microsoft Detours 等库所使用的方法。这是一篇相关论文,其中函数的前几个字节被覆盖以无条件地分支到检测。
    • (静态)二进制重写 - 对于 rootkit,这是一种不太常见的方法,但用于研究项目。它允许通过静态分析和覆盖二进制文件来执行绕行。执行此操作的旧的(非公开可用的)Windows 软件包是 Etch。 This paper 给出了它在概念上如何工作的高级视图。

    尽管 Detours 展示了一种动态迂回方法,但业界使用的方法不计其数,尤其是在逆向工程和黑客领域。其中包括我上面提到的 IAT 和断点方法。要为这些“指明正确的方向”,您应该查看在研究项目和逆向工程领域进行的“研究”。

    【讨论】:

    • 我不是在寻找代码或确切答案,但我认为将我指向某些资源的正确方向并不难。感谢您的回复。
    • 还考虑到您所说的可能有多种方法可以隐藏进程。有哪些常见的检测方法?
    • Mike 感谢您的回复,它帮助我了解在 Google 上查找什么以了解有关该过程的更多信息。至于“编写这种代码的动机”,如果我知道如何做到这一点,我就不会问这个问题,我正在努力了解更多有关它的信息。我会很谦虚地建议你多一点耐心,有些人还在学习。再次感谢。
    • @bumble_bee_tuna:写代码的动机,我的意思是你想写这种代码的理由/原因。无论是出于特定目的等。可能有更好的方法来实现您正在尝试的目标。很抱歉你误解了我的回答——我的任何粗鲁都是无意的:)
    猜你喜欢
    • 2021-06-13
    • 1970-01-01
    • 2012-10-01
    • 2011-02-07
    • 2013-12-23
    • 2015-04-17
    • 2011-10-14
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多