web-dev-qa-db-ja.com

プログラムでiPhoneがJailで壊れているかどうかを判断する

IPhone/iPodが(プログラムで)どのように判断されるか:

  1. 刑務所が壊れた
  2. クラックされたソフトウェアのコピーを実行する

Pinch Media 電話が刑務所で壊れているか、実行中のソフトウェアがクラックされているかを検出できますが、誰もこれを行う方法を知っていますか?ライブラリはありますか?

78
rjstelling

ここ は、アプリがクラックされたかどうかを検出する方法の1つです。

要するに、クラッキングには通常Info.plistの変更が必要です。アクセスできるのは通常のファイルなので、このような変更を決定するのは非常に簡単です。

39
zakovyrya

ジェイルブレイクした電話の検出は、/private/var/lib/apt/フォルダーの存在を確認するのと同じくらい簡単です。これはインストーラーのみのユーザーを検出しませんが、今ではほとんどがCydia、IcyまたはRockYourPhone(すべてaptを使用)をインストールしています

海賊版ユーザーを検出する最も簡単な方法は、アプリのInfo.plistSignerIdentityキーが存在するかどうかを確認することです。高度なクラッカーは標準の[[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"]チェックを簡単に見つけることができるため、#import <objc/runtime.h>を介して利用可能なObjective Cランタイムを使用してこれらの呼び出しを隠すか、同等の代替手段を使用するのが最善です。

25
rpetrich

Zakovyryaの返信を拡張するために、次のコードを使用できます。

if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) {
  // Jailbroken
}

ただし、アプリのジェイルブレイクを行う人はプログラムを16進編集できるため、@ "SignerIdentity"という文字列を編集して、@ "siNGeridentity"またはnilを返すその他の何かを読み取って渡すことができます。

これを使用する場合(または http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html からの他の提案のいずれか):

  • それが永遠に機能すると期待しないでください
  • この情報を使用してアプリを何らかの方法で中断/妨害しないでください(そうしないと、アプリがジェイルブレイクされたことがわかりません)
  • おそらく、このコードの一部を難読化することをお勧めします。たとえば、base64でエンコードされた逆の文字列をコードに挿入し、プロセスを逆にしてアプリでデコードできます。
  • コードの後半で検証を検証します(たとえば、SignerIdentityと言ったとき、実際にSignerIdentityまたはsiNGeridentityと言っていましたか?)
  • Stackoverflowのような公開Webサイトの人々にあなたがそれをする方法を教えないでください。
  • これはあくまでも目安であり、誰にも簡単ではないことを忘れないでください。
10
Benjie

上記のyonelとBenjieのコメントを展開するには:

1) Landon Fullerの方法 上記のyonelにリンクされた暗号化チェックに依存しているのは、自動クラッキングツールにまだ負けていない唯一の方法のようです。 Apple LC_ENCRYPTION_INFOヘッダーの状態をすぐに変更することについては、あまり心配しません。ジェイルブレイクされたiphoneには、ユーザーがコピーを購入した場合でも、予測できない影響があります。 )

とにかく、そのコードに基づいてユーザーに対して急いで行動することはありません...

2)Benjieのコメントを補足するため。難読化(海賊版対策コードの文字列値を処理する場合の絶対的な必要性):同様の、おそらくもっと簡単な方法は、常にsaltedをチェックすることですハッシュされた探している値のバージョン。たとえば(このチェックはもはや効率的ではありませんが)、各MainBundleのキー名をmd5(keyName + "some secret salt")として適切な定数に対してチェックします...むしろ基本的ですが、文字列。

もちろん、これには、比較する値を間接的にクエリできる必要があります(たとえば、値を含む配列を調べることによって)。しかし、これはほとんどの場合です。

5
user296305