サーバー側の検証Google IAP購入トークンを実装しました。私のモバイルアプリは、Googleから取得するときにこのトークンを私に送信します。
通常のトークンは次のようになります
minodojglppganfbiedlabed.AO-J1OyNtpooSraUdtKlZ_9gYs0o20ZF_0ryTNACmvaaaG5EwPX0hPruUdGbE3XejoXYCYzJA2xjjAxrDLFhmu9WC4fvTDNL-RDXCWjlHKpzLOigxCr1QhScXR8uXtX8R94iV6MmMHqD
しかし時々私はこのような短いトークンを取得します
korpimulxmslxissnschtkdb
Google Play Developer APIを介してこのトークンを確認する場合: https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token 、短いトークンの場合404エラーが発生します。
問題はどこだ?この短いトークンが実際のトランザクションを表す可能性はありますか?
私はしばらくの間、理由がわからずにアプリで同じ無効なトークンを受け取っています。トークンは、24文字のアルファベット(例:glvnqnpjqslcagyimgxeuybk
)、15桁(例:781871156762279
、 この質問を参照 )、および有効なものとは少し異なる形式の適切な長さのトークン(例:xdavcuvdnniwwrhwemleqjdz.rSQozm...
この質問を参照 )。
これらは、これらのさまざまなトークンについて アプリ内課金API から一度に受け取ったエラーメッセージです。
"code": 404, "message": "The purchase token was not found."
"code": 400, "message": "Invalid Value"
"code": 400, "message": "Your request is invalid for this subscription purchase."
答え マーク・グリーンストックから与えられたものは、問題を再現しようとするアイデアを私に与えました。
アプリ内購入をハッキングすると主張する2つのアプリをテストしました:Freedom、およびLucky Patcher、ルート化されたデバイス上。前者は機能しませんでした。私たちのアプリが購入できることが検出されましたが、偽のアプリを作成しようとしたときに、「このアプリの購入は偽造できない」と通知されました。後者のdidは、いじくり回した後で機能し、質問とまったく同じように短い購入トークンを生成しました。 アプリ内課金API を介してトークンを確認しようとすると、以前とまったく同じ「無効なトークン」メッセージが表示されました。
このメソッド を使用して、無効なトークンを生成するデバイスのルートステータスのログ記録も開始しました。これは何の証拠にもなりませんが、ほぼすべての無効なトークンがルート権限を取得されたデバイスから発信されたという事実は、不正行為の疑いを抱かせました。
攻撃は次のように機能すると思います。これについてもっと知っている人はチャイムしてください!
Intent
を傍受しますあなたはこれを解決したのですか?
私が提案できる唯一の理由は、ルート化されたデバイスにインストールできる「Android向けのFreedomアプリ内購入」アプリのようなアプリ内購入クラッカーによってトークンが生成されたことです。
自分で行ったテスト購入の短いトークンを受け取ったかどうかを確認したいと思います。
トークンが偽物であることを示すもう1つの兆候は、アプリでの購入後に取得するorderIdの形式です。
Administing In-app Billing docsに示されている形式に従っていない場合、それはおそらく不正な購入です。
一部の偽のIAPプロバイダーで機能する部分的な軽減策を見つけました:デジタル署名を手動で再確認します。IAPシミュレーターが行うことは何でも、それらは行いませんGoogleの秘密RSAキーのコピーを持っている。私は自分の署名チェックをロールバックしましたが、少なくともいくつかの偽のトランザクションをキャッチします。