2012-10-29 37 views
1

有誰知道一個標準的技術解決以下問題:反調試如何處理庫修補?

  • 我想檢測,如果一個調試器附加到我的程序(反調試)
  • 但是攻擊者補丁的系統調用/庫我用

例如iOS上的sysctl() - 函數可以用來檢測附加的調試,但是攻擊者只需拆卸的二進制可執行文件,找到的sysctl() - 調用,並與替換它們自己的自己的版本。

我們作爲開發人員如何處理這個問題?

我的平臺是iOS(iPhone)和原生Android(Android NDK)。

+1

如果「攻擊者」在模擬器中運行您的代碼並使用它來單步執行代碼,該怎麼辦?沒有調試器... –

+0

問題:在模擬器中單步執行不會被sysctl()檢測到嗎? 但是,我認爲記錄關鍵代碼之前和關鍵代碼之後的時間。如果時間跨度很長,我可以得出結論,該程序正在被調試。然而,如果攻擊者修補時間() - 打電話怎麼辦?它是原始發佈的問題的變體。 –

回答

7

完美檢測調試器在邏輯上是不可能的。程序運行的機器的規格並未指定特定的硅片或其他物理對象 - 它指定了機器的行爲。 任何提供如規範所描述的行爲的實現實現的機器。這包括在實現規範的物理處理器上執行程序,它包括在實現規範的模擬器中執行程序,並且它包括人讀取機器碼和在紙上實現機器。這些不是「公正」的模擬;他們實際上是機器的實現。

當機器正確實施時,程序不可能確定機器未正確實施,因爲當然沒有偏離規範。但是我們可以清楚地看到,這些機器中的某些機器的動作和狀態完全可以被人看到,並且可以隨意操縱。因此,邏輯上不可能總是檢測到調試器的存在。

充其量,您可以使用調試器使其變得麻煩,並且可以掩蓋您正在這樣做的方法。這可以阻止臨時調查人員,但不能阻止確定的調查人員。

1

混淆本機代碼的黃金標準是Skype,它在十多年前一直未被黑客入侵。您可以查看http://www.blackhat.com/presentations/bh-europe-06/bh-eu-06-biondi/bh-eu-06-biondi-up.pdf瞭解一些Skype混淆功能的列表,例如機器代碼的運行時解密,對調試器和虛擬機的阻力,高級使用的加密和完整性檢查等。 但是,您從外部獲知的任何混淆技術是已經爲代碼攻擊者所知,所以你必須把自己的魔力放入其中(並且總是有比你更聰明的攻擊者)。

結論:混淆本地代碼只是爲攻擊者設置一些障礙,打破這些障礙只是時間和精力的問題。 解決這個問題的另一種方法是使用成熟的客戶端 - 服務器協議並打開客戶端代碼,將所有密碼保存在客戶端 - 服務器系統的服務器端。