2

アプリ内購入がクラックされたかどうかを確認する方法があることは知っていますが、アプリが App Store からダウンロードされたかどうかを確認する方法はありますか?

誰かがそれをクラックしたか、誰かがInstallousからダウンロードしたかどうか、私のアプリでチェックするということですか?

4

1 に答える 1

1

短い答え: いいえ、そうではありません。一つには、間違っているかもしれないが、Apple がこれを行う方法を提供しているとは思わない。たとえそうしたとしても、それはあまり役に立たないかもしれません。

VerifyAppStorePurchaseApple のサーバーに接続し、現在のユーザーがアプリを合法的に購入したことを確認するという名前の関数が存在すると仮定します。アプリのどこかに、次のようなコードがあります。

if(!VerifyAppStorePurchase()) {
    exit(-1);
}

これは次のようにコンパイルされます (ただし、これは x86 アセンブリでありアームではないことに注意してください。したがって、iOS デバイスで表示されるものとは正確には異なります。ただし、同じ概念が適用されます)。

    pushl   %ebp
    movl    %esp, %ebp
    subl    $24, %esp
    call    _VerifyAppStorePurchase
    testl   %eax, %eax
    je  L7
    # <snip app code here>
L7:
    movl    $-1, (%esp)
    call    _exit

クラッカーがこのチェックを無効にする方法が少なくとも 2 つあります。

  • call命令の最初の 2 バイトを、チェックを通過するジャンプ (2 バイトのパッチ) に置き換えます。
  • exit への呼び出しへのジャンプをいくつかのnop命令 (ここでも 2 バイトのパッチ) に置き換えます。

署名の検証は通常これを停止しますが、ジェイルブレイクされた iPhone は署名されていないコードを喜んで実行するため、十分に動機付けられたクラッカーがアプリを変更して、追加した追加のチェックを無効にすることを止めることはできません。

于 2012-07-22T23:50:06.567 に答える