禁用附加到进程

本文关键字:进程 | 更新日期: 2023-09-27 18:12:47

我正在寻找一种方法来检查,看看是否有人附加到我开始的程序/过程。

我想通过禁用附加到进程使程序更难逆向工程。

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

根据我的理解,我可以或者应该能够在我的代码中检查这个,如果我看到这是真的,我就可以杀死我的自我或与我的自我相关的东西。

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

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

禁用附加到进程

几个策略…

<标题> # 1:

有一些api用于检测调试器的存在:

  • 调试器。蝾螈
  • IsDebuggerPresent
  • CheckRemoteDebuggerPresent

但是这里有明显的限制:如果调试器暂停执行,这个检查显然是无用的。所以这不是无懈可击的。

<标题> # 2:

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

当然用户可以直接终止你的调试进程。

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

由此得出结论:在某种程度上,只要用户拥有对系统的完全访问权限,他们就可以做任何他们想做的事情,所以一定要权衡你的反调试努力和意识到新手黑客可以花更少的时间来绕过它。

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

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

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

正如@tenfour所说,这两种方法都不是特别有效的对付一个坚决的攻击者-但没有什么是特别有效的。