新しいMac App Storeの領収書検証のためのチュートリアルや作業用コードを誰かが持っているかどうか疑問に思っていますか?私がこれまでに見つけた唯一の参照については、トピックに関するAppleの優れたドキュメントと、コンパイルされますがインラインコメントが多くない1つのオープンソースプロジェクトです。
登録済み開発者向けのAppleドキュメントのみ:
https://developer.Apple.com/devcenter/mac/documents/validating.html
RoddiのValidateStoreReceipt(有望に見えますが、まばらに文書化されています):
https://github.com/roddi/ValidateStoreReceipt
また、なぜAppleが検証用の作業コードを提供しないのか疑問に思いますか?
他に良い参考資料はありますか?
Mac App Storeのレシート検証のための一般的なソリューションを提供することは困難です。これは主に、これがバイパスするのが難しい非常に機密性の高いコードであるためです(cf. Apple documentation )。
これらのGitHubプロジェクトは、レシート検証で実行する必要がある手順について学ぶための非常に優れた出発点です。
何をしなければならないかを理解したら、以下にいくつかのアドバイスを示します。
領収書の検証は必要であり、見かけ上単純ではないことを忘れないでください。これは、アプリケーションに費やす時間を多く消費する可能性があります。
したがって、このアプリケーションを確認することをお勧めします: Receigen (免責事項:私はこのアプリケーションの開発者です)。
アプリのレシートを検証していることを確認してください。間違った領収書のすべての暗号化と署名の検証を簡単に行うことができます。
http://Pastebin.com/1eWf9LCg を参照してください。AngryBirdsがこのビットを逃したようで、無料のアプリからの領収書を代用している人々に公開されたままになっています。
Alan Quatermainには、これをgithubで実行するためのコードもあります。 https://github.com/AlanQuatermain/mac-app-store-validation-sample
自動削除を回避するために、そのまま使用しないでください。
テスト後に実際のレシートに対して検証するために、main.mファイルで次のコード行を変更します。
if (!validateReceiptAtPath(@"~/Desktop/receipt"))
に
#ifdef USE_SAMPLE_RECEIPT // defined for debug version
NSString *pathToReceipt = @"~/Desktop/receipt";
#else
NSString *pathToReceipt = [[[NSBundle mainBundle] bundlePath]
stringByAppendingPathComponent:@"Contents/_MASReceipt/receipt"];
#endif
if (!validateReceiptAtPath(pathToReceipt))
exit(173); //receipt did not validate
コンパイラ設定では、デバッグ構成の「その他のCフラグ」に-DUSE_SAMPLE_RECEIPT
を含める必要があります
礼儀 http://jesusagora.org/groups/futurebasic/0::53562:get:1read.html
NPReceiptVerification を試すことができます。アプリにレシート確認を追加する最も簡単な方法です。クラスファイルをプロジェクトに追加し、バージョンとバンドル識別子を設定するだけで、他のすべてが自動的に処理されます。
Alan Quartermainのコードを確認しましたが、見た目はよさそうです。考えるべきこと:
ここの最後のパラメータは、コードがあなたの証明書によって署名され、他の誰も署名してはならないことを示すコンパイルされた要件である可能性があります。
開発者が承認のためにアプリをストアに送信すると、署名証明書は次のようになります。
3rd Party Mac Developer Application: me
Apple Worldwide Developer Relations Certification Authority
Apple Root CA
アプリがApp Storeからエンドユーザーに配信された後の署名証明書は次のとおりです。
Apple Mac OS Application Signing
Apple Worldwide Developer Relations Certification Authority
Apple Root CA
また、レシートがない場合はexit(173)のみをお勧めしますが、それ以外はすべて正常です。
ObjCメソッドではなく、コード検証ルーチンをC関数としてを実装することを提案します。
この手法では、バイナリにコンパイルされるメソッド名が少なくなるため、受信確認コードを見つけるのが(少し)難しくなります。
RVNReceiptValidation を参照できます。実装は簡単です。 RVNReceiptValidation.m
ファイルとアプリのバージョンでバンドルIDを設定するだけです。 Appleからレシートを取得することを忘れないでください。Finderからアプリを起動する必要があります。このクラスは、InApp Purchaseの実装にも役立ちます。
Apple Docsからサンプルの領収書を作成する場合、 'end'の後に余分な文字を含めないでください。そうしないと、uudecodeが失敗します。
プリラーの答えについて詳しく説明します。 Appleが検証プロセスのコードサンプルを提供した場合、Bad Guyがコンパイル済みアプリを取得し、検証プロセスに対応するコードをスキャンすることは非常に簡単です。BadGuy Appleの標準コードサンプルを使用すると、コンパイルされたコードがどのように見えるかを正確に把握できます。BadGuyがコードのそのセクションを見つけたら、アプリのコンパイル済みコードを変更して、受信確認ステージをスキップし、すべてが役に立たない。
そうは言っても、断固としたクラッカーは、あなたが何をしようとも、あなたが導入したコピー防止策を回避するでしょう。 (たとえば)ゲーム業界は、ソフトウェアを保護するために多くの時間を費やしており、クラックされたバージョンは常に利用できるようです。
RVNReceiptValidationは素晴らしく、Appleで非推奨となったopensslではなくCommonCryptoを使用しています。デバッグするには、プロジェクトに有効なレシートを添付する必要があります。これを行うには、別のApp Bundleから有効なレシートを取得し、テスト環境でビルドフェーズを作成して、バンドルに追加します。難読化には次の手法をお勧めします。
KRVNBundleIDおよびkRVNBundleVersionを暗号化し、CFBundleIdentifierおよびCFBundleShortVersionStringと比較するときにそれらを復号化します。
次のようなコードを使用して実行する前に、ランダムな値を持つ関数ポインターの配列を作成し、実行時にRVNReceiptValuationの関数への有効なポインターに変更します。
static void testFunction(void);
typedef void (*functionPtr)(void);
functionPtr obfuscationArray[8] = {
(functionPtr)0xA243F6A8,
(functionPtr)0x885308D3,
(functionPtr)0x13198A2E,
(functionPtr)0x03707344,
(functionPtr)0xA4093822,
(functionPtr)0x299F31D0,
(functionPtr)0x082EFA98,
(functionPtr)0xEC4E6C89};
int main(int argc, const char * argv[]) {
functionPtr myFuncPtr;
obfuscationArray[3] = &testFunction;
myFuncPtr = obfuscationArray[3];
(myFuncPtr)();
return 0;
}
static void testFunction(void){
printf("function executed\n");
}
はい、彼らのドキュメントには、「アプリケーションに固有のソリューションを採用することが重要です」と書かれています。
NPReceiptValidationを使用しても、署名証明書を含むアプリケーションバンドルのセキュリティを検証する必要があります。これは、開発者向けのWWDR推奨事項に記載されています。
解決策: http://iTunes.Apple.com/us/app/apptight-pro-app-store-code/id427083596?mt=12
NPReceiptValidationの潜在的な問題の1つは、Cocoaオブジェクトのメソッドセレクターが非常に簡単に乗っ取られることです。アプリを拡張する最も一般的な方法です。
アプリ内購入の解析を支援する別のツールを次に示します。
http://iTunes.Apple.com/us/app/pkcs-7viewer/id547539804?mt=12
roddiのValidateStoreReceiptは以前は機能しましたが、機能しなくなりました。私は解決策についてブログ投稿を書きました: http://vinceyuan.blogspot.com/2012/07/validate-mac-app-store-receipt-2012.html
ここにコピー:roddiのコードはまだ機能しています。変更する必要はありません。 (最新バージョンを入手する必要があります)次の手順に従ってください(インターネットが必要です):
できました。今すぐアプリをデバッグできます。