IPhone/iPodが(プログラムで)どのように判断されるか:
Pinch Media 電話が刑務所で壊れているか、実行中のソフトウェアがクラックされているかを検出できますが、誰もこれを行う方法を知っていますか?ライブラリはありますか?
ここ は、アプリがクラックされたかどうかを検出する方法の1つです。
要するに、クラッキングには通常Info.plistの変更が必要です。アクセスできるのは通常のファイルなので、このような変更を決定するのは非常に簡単です。
ジェイルブレイクした電話の検出は、/private/var/lib/apt/
フォルダーの存在を確認するのと同じくらい簡単です。これはインストーラーのみのユーザーを検出しませんが、今ではほとんどがCydia、IcyまたはRockYourPhone(すべてaptを使用)をインストールしています
海賊版ユーザーを検出する最も簡単な方法は、アプリのInfo.plist
にSignerIdentity
キーが存在するかどうかを確認することです。高度なクラッカーは標準の[[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"]
チェックを簡単に見つけることができるため、#import <objc/runtime.h>
を介して利用可能なObjective Cランタイムを使用してこれらの呼び出しを隠すか、同等の代替手段を使用するのが最善です。
Zakovyryaの返信を拡張するために、次のコードを使用できます。
if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) {
// Jailbroken
}
ただし、アプリのジェイルブレイクを行う人はプログラムを16進編集できるため、@ "SignerIdentity"という文字列を編集して、@ "siNGeridentity"またはnilを返すその他の何かを読み取って渡すことができます。
これを使用する場合(または http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html からの他の提案のいずれか):
上記のyonelとBenjieのコメントを展開するには:
1) Landon Fullerの方法 上記のyonelにリンクされた暗号化チェックに依存しているのは、自動クラッキングツールにまだ負けていない唯一の方法のようです。 Apple LC_ENCRYPTION_INFOヘッダーの状態をすぐに変更することについては、あまり心配しません。ジェイルブレイクされたiphoneには、ユーザーがコピーを購入した場合でも、予測できない影響があります。 )
とにかく、そのコードに基づいてユーザーに対して急いで行動することはありません...
2)Benjieのコメントを補足するため。難読化(海賊版対策コードの文字列値を処理する場合の絶対的な必要性):同様の、おそらくもっと簡単な方法は、常にsaltedをチェックすることですハッシュされた探している値のバージョン。たとえば(このチェックはもはや効率的ではありませんが)、各MainBundleのキー名をmd5(keyName + "some secret salt")として適切な定数に対してチェックします...むしろ基本的ですが、文字列。
もちろん、これには、比較する値を間接的にクエリできる必要があります(たとえば、値を含む配列を調べることによって)。しかし、これはほとんどの場合です。