2011-10-27 91 views
0

我正在尋找一種方法來檢查並查看是否有人連接到我啓動的程序/進程。禁用附加到進程

我想通過禁用附加到進程來使其更難以反向工程我的程序。

這能行嗎?是否有一些API調用會查看是否有東西附加到我的過程,如果是這樣的結束過程。

從我的理解我可以或應該能夠在我的代碼中檢查這一點,如果我看到這是真的,我可以殺死我的自我或什麼附加到我自己。

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

這隻會阻止我調試我的代碼我希望能夠阻止發生在我的進程上的任何附件表單。

+1

我只能使用內核級調試器。你永遠不會知道我是誰。 –

+1

[反調試 - 開發者視圖(PDF)](http://www.shell-storm.org/papers/files/764。pdf)可能有興趣(因爲它不處理託管代碼,技術可能不適用或將需要額外的工作)。 – user786653

回答

4

一些策略...

#1:

有用於檢測調試器存在一些API:

但是這裏有明顯的侷限性:如果一個調試器暫停執行,這個檢查顯然是無用的。所以這不是防水的。

#2:

附上自己的調試器您所關心的進程。這樣用戶不能自己附加(一個進程只能同時調試一次)。

當然用戶可以殺死你的調試器進程。

或者使用內核調試器,該調試器無法防止或檢測到。

這導致了結論:在一定程度上,只要用戶擁有完全訪問系統,他們可以做任何他們想要的,所以一定要衡量你的反調試工作對實現它新手黑客將花費更少的時間來解決這個問題。

3

要檢測託管調試器,您可以撥打System.Diagnostics.Debugger.IsAttached

如果你想檢測本地調試器,你需要的函數叫IsDebuggerPresent。 P /調用它是這樣的:

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

由於@tenfour說,這些方法都不是針對攻擊者堅決特別有效的 - 但後來沒有什麼。