web-dev-qa-db-ja.com

Objective Cコードを暗号化または難読化する方法は?

重複の可能性:
iPhone/iPadアプリコードの難読化-可能ですか?それだけの価値がありますか?

私はこれに多くの時間を費やしました、そして私は完璧な答えを見つけることができませんでした。だから私はここに質問をすることにしました。私はiPhoneアプリケーションを持っていて、クラスダンプまたはotoolユーティリティを防ぐためにコードを暗号化したいです。 (実行可能ファイルからヘッダーをダンプするために使用されるツール)。ソースコードを暗号化する方法やソースコードを難読化する方法はありますか?

26
Johny_568

最初に思われるよりもはるかに複雑です。メソッド名を壊すツールはどれも、混乱する可能性があります。

  1. KVCコンプライアンス
  2. 動的に生成されたセレクターの使用
  3. ペン先ファイルの互換性
  4. プロトコル適合性
  5. メソッドの継承

難読化は、対処すべきもう1つの層です。多くの場合、難読化は簡単に元に戻されます。 Objective-CランタイムとCocoaフレームワークはクラスを復号化する方法を知らないため、クラスを「暗号化」することは実際には不可能です。十分に決心した人は、最終的にあなたのプログラムがどのように機能するかを理解するでしょう。

16
dreamlax

実際には、専門のサードパーティツールを使用して難読化と改ざん防止を提供できます。これを行うためのツールまたはサービスを提供している会社は、ArxanとirDatoの2つです。

どちらも安価ではなく、小規模な開発者も利用できますが、大企業向けに開発している場合は、それらを検討する必要があります。

難読化は、コードパスを操作し、冗長な命令を追加して、コードをリバースエンジニアリングしようとする人を混乱させることによって行われます。改ざん防止は、コードにチェックサムを追加し、関数内にチェックサムチェックを埋め込むことによって行われます。相互に依存するチェックサムのネットワークを作成して、それらをバイパスすることを非常に困難にすることができます。できることは他にもいくつかありますが、実際にはこの分野の専門家に相談する必要があります。

以前の回答に加えて、Appleはバイナリを暗号化せず、署名するだけです。ジェイルブレイクされたデバイスでアプリのバイナリをリバースエンジニアリングおよび変更するのはかなり簡単です。

7
Andrew