0

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

我想通过禁用附加到进程来使对我的程序进行逆向工程变得更加困难。

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

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

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

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

4

2 回答 2

4

几个策略...

#1:

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

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

#2:

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

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

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

这导致了结论:在某种程度上,只要用户可以完全访问系统,他们就可以做任何他们想做的事情,所以一定要权衡你的反调试工作与意识到这将花费更少的时间新手黑客可以解决它。

于 2011-10-27T15:58:13.190 回答
3

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

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

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

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

于 2011-10-27T15:54:21.467 回答