有誰知道一個標準的技術解決以下問題:反調試如何處理庫修補?
- 我想檢測,如果一個調試器附加到我的程序(反調試)
- 但是攻擊者補丁的系統調用/庫我用
例如iOS上的sysctl() - 函數可以用來檢測附加的調試,但是攻擊者只需拆卸的二進制可執行文件,找到的sysctl() - 調用,並與替換它們自己的自己的版本。
我們作爲開發人員如何處理這個問題?
我的平臺是iOS(iPhone)和原生Android(Android NDK)。
有誰知道一個標準的技術解決以下問題:反調試如何處理庫修補?
例如iOS上的sysctl() - 函數可以用來檢測附加的調試,但是攻擊者只需拆卸的二進制可執行文件,找到的sysctl() - 調用,並與替換它們自己的自己的版本。
我們作爲開發人員如何處理這個問題?
我的平臺是iOS(iPhone)和原生Android(Android NDK)。
完美檢測調試器在邏輯上是不可能的。程序運行的機器的規格並未指定特定的硅片或其他物理對象 - 它指定了機器的行爲。 任何提供如規範所描述的行爲的實現是實現的機器。這包括在實現規範的物理處理器上執行程序,它包括在實現規範的模擬器中執行程序,並且它包括人讀取機器碼和在紙上實現機器。這些不是「公正」的模擬;他們實際上是機器的實現。
當機器正確實施時,程序不可能確定機器未正確實施,因爲當然沒有偏離規範。但是我們可以清楚地看到,這些機器中的某些機器的動作和狀態完全可以被人看到,並且可以隨意操縱。因此,邏輯上不可能總是檢測到調試器的存在。
充其量,您可以使用調試器使其變得麻煩,並且可以掩蓋您正在這樣做的方法。這可以阻止臨時調查人員,但不能阻止確定的調查人員。
混淆本機代碼的黃金標準是Skype,它在十多年前一直未被黑客入侵。您可以查看http://www.blackhat.com/presentations/bh-europe-06/bh-eu-06-biondi/bh-eu-06-biondi-up.pdf瞭解一些Skype混淆功能的列表,例如機器代碼的運行時解密,對調試器和虛擬機的阻力,高級使用的加密和完整性檢查等。 但是,您從外部獲知的任何混淆技術是已經爲代碼攻擊者所知,所以你必須把自己的魔力放入其中(並且總是有比你更聰明的攻擊者)。
結論:混淆本地代碼只是爲攻擊者設置一些障礙,打破這些障礙只是時間和精力的問題。 解決這個問題的另一種方法是使用成熟的客戶端 - 服務器協議並打開客戶端代碼,將所有密碼保存在客戶端 - 服務器系統的服務器端。
如果「攻擊者」在模擬器中運行您的代碼並使用它來單步執行代碼,該怎麼辦?沒有調試器... –
問題:在模擬器中單步執行不會被sysctl()檢測到嗎? 但是,我認爲記錄關鍵代碼之前和關鍵代碼之後的時間。如果時間跨度很長,我可以得出結論,該程序正在被調試。然而,如果攻擊者修補時間() - 打電話怎麼辦?它是原始發佈的問題的變體。 –