我正在寻找一种检查方法,看看是否有人加入了我开始的程序/流程。
我想通过禁用附加到进程来更难对我的程序进行反向工程。
这可以吗?是否有一些API调用,它将查看是否有某些内容附加到我的进程,如果是这样,则结束进程。
根据我的理解,我可以或者应该能够在我的代码中检查这一点,如果我发现这是真的,我可以杀死我自己或者我自己的什么。
#if DEBUG
RTBconsole.Text = "Debug version";
#endif
这只能阻止我调试我的代码,我希望能够阻止我的流程上发生的任何附件形式。
答案 0 :(得分:4)
一些策略......
有一些用于检测调试器存在的API :
但是这里存在明显的局限性:如果调试器已暂停执行,则此检查显然无用。所以这不是防水的。
将您自己的调试程序附加到您关心的流程。这样用户就无法附加自己的进程(进程只能同时调试一次)。
当然,用户可能会终止您的调试程序。
或使用内核调试程序,您无法阻止或检测它。
导致结论:在某种程度上,只要用户具有对系统的完全访问权限,他们就可以做任何他们想做的事情,所以一定要权衡你的反调试工作意识到新手黑客需要花费更少的时间来解决它。
答案 1 :(得分:3)
要检测托管调试器,您可以调用System.Diagnostics.Debugger.IsAttached
。
如果要检测本机调试器,则需要的功能称为IsDebuggerPresent
。 P /这样调用它:
[DllImport("kernel32")]
static extern bool IsDebuggerPresent();
正如@tenfour所说,这些方法对于坚决的攻击者来说都不是特别有效 - 但事实并非如此。