我在C++中有一個桌面應用程序。我想檢查是否使用調試器在可執行文件中執行了任何運行時更改。如果可執行文件將退出。我如何檢查它?使用調試器檢測可執行文件中的運行時更改
我已經使用CheckRemoteDebuggerPresent但黑客取得了EXE變化跳過這一說法
編輯: 我們能否強行如果它存在停止調試器,如果沒有它只是作爲一個虛擬的代碼。我已經嘗試過DebugActiveProcessStop,但它不適用於當前進程我猜
我在C++中有一個桌面應用程序。我想檢查是否使用調試器在可執行文件中執行了任何運行時更改。如果可執行文件將退出。我如何檢查它?使用調試器檢測可執行文件中的運行時更改
我已經使用CheckRemoteDebuggerPresent但黑客取得了EXE變化跳過這一說法
編輯: 我們能否強行如果它存在停止調試器,如果沒有它只是作爲一個虛擬的代碼。我已經嘗試過DebugActiveProcessStop,但它不適用於當前進程我猜
你可以用CheckRemoteDebuggerPresent()來做到這一點來檢測調試器,但我不知道是否有辦法檢測是否進行了更改。還有其他幾個選項here。
不幸的是,通常不可能確保您的可執行文件未被修改。你可以選擇一個安全的平臺(不是桌面應用程序),或者你可以得到許多代碼混淆/保護包之一;但是可以繞過這些。
我最喜歡關於這個主題的文章是「保持海灣的海盜」(source)。
要檢測運行時更改,您需要一個循環來散列各個存儲區以確保它們未被修改以及VirtualQuery
之類的內容以確保頁面訪問沒有被篡改,當然這可以始終被抵消,只是看到暴雪監獄長(使用這種方法)。
最近由Veracode的Tyler Shields發表的一篇論文提供了相當廣泛的技術選擇,您可以考慮使用。
http://www.shell-storm.org/papers/files/764.pdf
但你必須接受一個複雜的攻擊者幾乎總是發現周圍無論你選擇做一個方式。
如果您使用校驗和並檢查該怎麼辦? –
我在說運行時變化(在內存中)。校驗和是如何工作的 – ashmish2
@ ashmish2:你可以校驗和,就像校驗和一樣。 –