SOについても、Googleについてもいろいろ調べましたが、Objective-Cで書かれたiPhone/iPadアプリのコード難読化に関して、簡単な答えは見つかりませんでした。 。
私の質問は次のとおりです。
Objective-Cのコード難読化ツールはないようです。しかし、少しの間、それが存在すると仮定しましょう。
Appleは、クラッシュしない限り、難読化されたアプリを拒否しないでしょう。主な質問は、難読化のポイントは何ですか?通常、知識を保護するためにコードを難読化する必要があります。たとえば、プログラムが潜在的なクラッカーのために難しくしたいコピー保護を使用している場合、またはビジネスの競合他社になりたくない高度なアルゴリズムを使用している場合逆コンパイルすることができます。
コピー防止機能はiOSですでに処理されています。ジェイルブレイクを通じて通常のアプリをコピーして実行できますが、実際にこれを行うユーザーの数はかなり少ないと思います(少なくともPCやMacなどの「通常の」コンピューターよりもはるかに少ない)。著作権侵害はあなたが難読化する必要があるような大きな問題を期待していますか?
保護する重要な知識がある場合、難読化は価値があるかもしれません。難読化には欠点があります。難読化されたアプリをデバッグできなくなります。クラッシュレポートは役に立ちません。
記事 Obfuscating Cocoa を読むこともできます。
事実に戻ると、難読化者ではないようです:あなたがcanするのはこのトリックです:このようなヘッダーがあるとしましょう:
@interface MyClass : NSObject {
}
- (void)myMethod;
次のような安価な難読化を行うことができます。
#ifndef DEBUG
#define MyClass aqwe
#define myMethod oikl
#endif
@interface MyClass : NSObject {
}
- (void)myMethod;
この方法では、ソースで意味のあるシンボルを使用できますが、デバッグ用にコンパイルしない場合、コンパイラはそれを「ガベージ」に変換します。
以前の回答に加えて、次のようないくつかの難読化と整合性保護を提供するサードパーティツールがあります。
それらは機能が異なり、次のものが含まれます。
これらのツールはすべて非常に高価であり、問題がないわけではないため、それらを検討するには、高度な整合性が必要なアプリケーションが本当に必要です。銀行またはDRMが非常に重要な場所。
これらのタイプのアプリでは、熟練したペネトレーションテスターが必要です。これらのツールは他の方法で公開されていないことを確認するためです。対処しないでください。
アプリの実行可能ファイルはすでにAppleによって暗号化されており、アプリサンドボックスの実行可能コードセグメントは書き込み可能でないため、ランタイムアームコードの変更を必要とする追加の暗号化を行うことはできません。また、Objective C/Cコンパイラのオプティマイザパスは、元のソースコードとはまったく異なるものをすでに作成しています。メソッド名はプレーンテキストに埋め込まれていますが、C関数名は埋め込まれていないため、Cをより多く使用し、Objective Cを使用すると、より少ない関数名が表示されます。そのため、営業秘密タイプのコードはおそらくプレーンCでコーディングし、オプティマイザーを最後までコンパイルしてコンパイルする必要があります。アプリバンドル内に埋め込まれたwebKit Javascript、または他の埋め込みVMコード(解釈されたコードがダウンロードされない限り))を難読化できます。