2011-08-30 36 views
1

我在C++中有一個桌面應用程序。我想檢查是否使用調試器在可執行文件中執行了任何運行時更改。如果可執行文件將退出。我如何檢查它?使用調試器檢測可執行文件中的運行時更改

我已經使用CheckRemoteDebuggerPresent但黑客取得了EXE變化跳過這一說法

編輯: 我們能否強行如果它存在停止調試器,如果沒有它只是作爲一個虛擬的代碼。我已經嘗試過DebugActiveProcessStop,但它不適用於當前進程我猜

+0

如果您使用校驗和並檢查該怎麼辦? –

+0

我在說運行時變化(在內存中)。校驗和是如何工作的 – ashmish2

+0

@ ashmish2:你可以校驗和,就像校驗和一樣。 –

回答

-1

你可以用CheckRemoteDebuggerPresent()來做到這一點來檢測調試器,但我不知道是否有辦法檢測是否進行了更改。還有其他幾個選項here

+0

我已經做了同樣的事情,但黑客在exe文件中進行了更改以跳過此語句:( – ashmish2

+0

黑客是否也不會繞過您的退出代碼?一旦連接了調試器,進程可以在處於凍結狀態時被凍結和修改,有沒有什麼可以做到這一點防止 – Gaius

+0

究竟是什麼,所以使用CheckRemoteDebuggerPresent()函數呢?我想我不能執行這個函數! – ashmish2

2

不幸的是,通常不可能確保您的可執行文件未被修改。你可以選擇一個安全的平臺(不是桌面應用程序),或者你可以得到許多代碼混淆/保護包之一;但是可以繞過這些。

我最喜歡關於這個主題的文章是「保持海灣的海盜」(source)。

1

要檢測運行時更改,您需要一個循環來散列各個存儲區以確保它們未被修改以及VirtualQuery之類的內容以確保頁面訪問沒有被篡改,當然這可以始終被抵消,只是看到暴雪監獄長(使用這種方法)。

1

最近由Veracode的Tyler Shields發表的一篇論文提供了相當廣泛的技術選擇,您可以考慮使用。

http://www.shell-storm.org/papers/files/764.pdf

但你必須接受一個複雜的攻擊者幾乎總是發現周圍無論你選擇做一個方式。

相關問題