1

次の問題に対処する標準的な手法を知っている人はいますか?

  • プログラムにデバッガーが接続されているかどうかを検出したい (アンチデバッグ)
  • ただし、攻撃者は私が使用するシステム コール/ライブラリにパッチを適用します。

たとえば、iOS では、接続されているデバッガーを検出するために sysctl() 関数を使用できますが、攻撃者は単にバイナリ実行可能ファイルを逆アセンブルし、sysctl() 呼び出しを見つけて、それらを独自のバージョンに置き換えます。

私たち開発者はこれにどのように対処しますか?

私のプラットフォームは iOS (iPhone) とネイティブ Android (Android NDK) です。

4

2 に答える 2

7

デバッガーを完全に検出することは論理的に不可能です。プログラムが実行されるマシンの仕様は、特定のシリコンやその他の物理オブジェクトを指定するのではなく、マシンの動作を指定します。仕様で説明されている動作を提供する実装はすべてマシンの実装です。これには、仕様を実装する物理プロセッサでのプログラムの実行、仕様を実装するシミュレータでのプログラムの実行、および機械語の読み取りと紙へのマシンの実装が含まれます。これらは「単なる」エミュレーションではありません。それらは実際にはマシンの実装です。

機械が正しく実装されている場合、もちろん仕様からの逸脱はないため、プログラムが機械が正しく実装されていないと判断することはできません。しかし、これらの機械のいくつかの動作と状態は人間が完全に観察可能であり、自由に操作できることがはっきりとわかります。したがって、デバッガーの存在を常に検出することは論理的に不可能です。

せいぜい、デバッガーを使用するのを邪魔にすることができ、そうする手段を曖昧にすることができます。これは、カジュアルな調査員を思いとどまらせることができますが、決心した調査員を止めることはできません。

于 2012-10-29T14:01:11.837 に答える
1

ネイティブ コードを難読化するためのゴールデン スタンダードは、10 年以上ハッキングされていない Skype です。次のような Skype の難読化機能のリストについては、http://www.blackhat.com/presentations/bh-europe-06/bh-eu-06-biondi/bh-eu-06-biondi-up.pdfを参照してください。マシンコードのランタイム解読、デバッガーと仮想マシンへの耐性、暗号化と整合性チェックの高度な使用など。それ(そして常にあなたより賢い攻撃者がいます)。

結論: ネイティブ コードを難読化することは、攻撃者にとっていくつかの障害を設定するだけであり、これらの障害を破るのは時間と労力の問題です。これを回避するもう 1 つの方法は、成熟したクライアント サーバー プロトコルを使用し、クライアント コードをオープンソース化して、すべての秘密コードをクライアント サーバー システムのサーバー側に保持することです。

于 2012-10-29T14:28:41.593 に答える