【问题标题】:Disable attach to process禁用附加到进程
【发布时间】:2011-10-27 14:52:15
【问题描述】:

我正在寻找一种方法来检查是否有人附加到我启动的程序/进程。

我想通过禁用附加到进程来增加对我的程序进行逆向工程的难度。

这样可以吗?是否有一些 API 调用会查看是否有某些东西附加到我的进程,如果是,则结束进程。

根据我的理解,我可以或应该能够在我的代码中检查这一点,如果我发现这是真的,我可以杀死我自己或附在我自己身上的东西。

#if DEBUG
RTBconsole.Text = "Debug version";
#endif

这只会阻止我调试我的代码我希望能够停止在我的进程中发生的任何附件表单。

【问题讨论】:

  • 我可以只使用内核级调试器。你永远不会知道我是依恋的。
  • Anti-Debugging – A Developers View (PDF) 可能有兴趣(因为它不处理托管代码,这些技术可能不适用或需要额外的工作)。

标签: c# c++ c#-4.0 attach-to-process


【解决方案1】:

一些策略...

#1:

有一些 API 用于检测是否存在调试器

但是这里有明显的限制:如果一个调试器已经暂停执行,这个检查显然是没有用的。所以这不是防水的。

#2:

将您自己的调试器附加到您关心的进程。这样用户就不能附加自己的(一个进程只能同时调试一次)。

当然,用户可以直接杀死你的调试器进程。

或者使用您无法阻止或检测到的内核调试器。

由此得出结论:在某种程度上,只要用户拥有对系统的完全访问权限,他们就可以为所欲为,因此请务必权衡您的反调试工作与意识到新手黑客将花费更少的时间来解决它。

【讨论】:

    【解决方案2】:

    要检测托管调试器,您可以调用System.Diagnostics.Debugger.IsAttached

    如果您想检测本机调试器,您需要的函数称为IsDebuggerPresent。 P/像这样调用它:

    [DllImport("kernel32")]
    static extern bool IsDebuggerPresent();
    

    正如@tenfour 所说,这两种方法都不能特别有效地对付顽固的攻击者——但实际上并没有。

    【讨论】:

      猜你喜欢
      • 2011-11-06
      • 2011-07-28
      • 2012-01-24
      • 2011-09-04
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多