81

iPhone / iPodが次のとおりであるかどうかを(プログラムで)どのように判断しますか?

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

ピンチメディアは、電話が刑務所で壊れているか、実行中のソフトウェアがクラックされているかを検出できますが、これを行う方法を知っている人はいますか?図書館はありますか?

4

4 に答える 4

39

アプリがクラックされたかどうかを検出する方法の 1 つを次に示します

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

于 2009-07-17T00:03:48.623 に答える
25

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

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

于 2009-07-21T03:45:31.963 に答える
10

ザコビリヤの返信を拡張するには、次のコードを使用できます。

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

ただし、アプリをジェイルブレイクする人はプログラムを hexedit できます。そのため、文字列 @"SignerIdentity" を編集して @"siNGeridentity" または nil を返す何かを読み取ることができ、パスする可能性があります。

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

  • それが永遠に機能することを期待しないでください
  • この情報を使用して、アプリを壊したり妨害したりしないでください (そうしないと、16 進編集する原因になるため、アプリはジェイルブレイクされていることを認識できません)。
  • おそらく、このコードを難読化するのが賢明でしょう。たとえば、base64 でエンコードされた反転文字列をコードに配置し、プロセスを逆にしてアプリでデコードすることができます。
  • コードの後半で検証を検証します (たとえば、SignerIdentity と言いましたが、実際には SignerIdentity または siNGeridentity と言いましたか?)
  • stackoverflow のような公開 Web サイトで自分のやり方を人に話さないでください
  • これは単なるガイドであり、誰にでもできるものではありません (また、クラッカープルーフでもありません!)。大きな力には大きな責任が伴います。
于 2009-07-21T09:32:37.550 に答える
5

上記のヨネルとベンジーのコメントを拡張するには:

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

とにかく、そのコードに基づいてユーザーに対して無謀な行動を取ることはありません...

2)Benjieのコメントを補足するために。難読化 (著作権侵害防止コードで文字列値を処理する際に絶対に必要): 同様の、しかしおそらくより簡単な方法は、探している値のソルト化されたハッシュバージョンを常にチェックすることです。 たとえば (そのチェックはもはや効率的ではありませんが)、適切な定数に対して、各 MainBundle のキー名を md5(keyName + "some secret salt") としてチェックします...かなり基本的ですが、ストリング。

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

于 2010-03-18T07:58:42.300 に答える