アプリ内購入がクラックされたかどうかを確認する方法があることは知っていますが、アプリが App Store からダウンロードされたかどうかを確認する方法はありますか?
誰かがそれをクラックしたか、誰かがInstallousからダウンロードしたかどうか、私のアプリでチェックするということですか?
アプリ内購入がクラックされたかどうかを確認する方法があることは知っていますが、アプリが App Store からダウンロードされたかどうかを確認する方法はありますか?
誰かがそれをクラックしたか、誰かがInstallousからダウンロードしたかどうか、私のアプリでチェックするということですか?
短い答え: いいえ、そうではありません。一つには、間違っているかもしれないが、Apple がこれを行う方法を提供しているとは思わない。たとえそうしたとしても、それはあまり役に立たないかもしれません。
VerifyAppStorePurchase
Apple のサーバーに接続し、現在のユーザーがアプリを合法的に購入したことを確認するという名前の関数が存在すると仮定します。アプリのどこかに、次のようなコードがあります。
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 バイトのパッチ) に置き換えます。nop
命令 (ここでも 2 バイトのパッチ) に置き換えます。署名の検証は通常これを停止しますが、ジェイルブレイクされた iPhone は署名されていないコードを喜んで実行するため、十分に動機付けられたクラッカーがアプリを変更して、追加した追加のチェックを無効にすることを止めることはできません。