仕組み
自動保護を利用すると、アプリに次の機能を追加できます。
アプリのコードに Google Play インストーラ チェックを追加できます。このチェックはアプリの起動時に行われ、失敗した場合は Google Play でアプリを入手するよう求めるメッセージがユーザーに表示されます。
利点: Google Play から正式なアプリ アップデートを入手するユーザーを増やすことができます。
注: この機能は一部の Play パートナーのみご利用いただけます。
アプリのコードにランタイム チェックを追加して改変を検出できます。さらに、高度な難読化手法を使用してチェックの削除やリバース エンジニアリングも防ぐことができます。このチェックが失敗した場合、Google Play でアプリを入手するよう求めるメッセージがユーザーに表示され、アプリは実行されません。
利点: Google Play インストーラ チェックと組み合わせることで、攻撃者が不正な改変、再パッケージ化、再配布、著作権侵害を通じてデベロッパーによる配布や収益化の設定を回避するのを防止できます。
注: 改ざん対策は、すべての改変や再配布を防ぐことを保証するものではありません。改ざん対策により、これらの行為はより複雑でコストがかかるようになるため、成功する可能性が低くなります。Google Play では改ざん対策を継続的に強化していくため、新しいリリースには自動的に最新かつ最強の保護機能が適用されます。
アプリのテレメトリー(匿名化した環境とパフォーマンスのデータなど)を Google Play と共有することで、改ざん対策のレジリエンスとパフォーマンスを強化できます。アプリのテレメトリーの共有を無効にするには、[自動保護の設定] ページ([テストとリリース] > [アプリの完全性] に移動し、[自動保護] まで下にスクロール)で [アプリのテレメトリーを Google と共有する] をオフにします。詳しくは、Google サービスの開発に使用されるデータについての説明をご覧ください。
設定
自動保護の使用を開始するために必要な作業は以下のとおりです。
自動保護により、変更された APK を Google Play が作成し、デベロッパーに代わって署名することが求められます。そのため、デベロッパーは次の作業を行う必要があります。
- Play アプリ署名を使用する。
- Android App Bundle を使って公開する。
次の点にもご注意ください。
- 自動保護では、アプリは最小 API レベル 21 以上を対象にする必要があります。
- 自動保護はオフラインで動作します。ただし、デバイス上の Google Play ストア アプリが長時間オフラインになっている場合、インストーラ チェックでは定期的にデータ接続が必要になります。
- 自動保護を使用する場合は、Play ライセンス ライブラリを使用する必要はありません。
- アプリを内部アプリ共有にアップロードする場合、保護機能は適用されません。内部アプリ共有のリンクは信頼できるチームメンバーとのみ共有し、保護されていないバージョンを外部と共有しないでください。
- 自動保護は App Bundle のコード透明性に対応していません。
改ざん対策に対する追加の前提条件
注: この機能は一部の Play パートナーのみご利用いただけます。
改ざん対策を使用する場合、アプリは次の要件を満たしている必要があります。
- 最小 API レベル 23 以上を対象にする。23 以上の midSDKVersion を対象にすることで、アクティブな Android デバイスの 99% 以上にリーチできます。
- x86、x86_64、armeabi-v7a、arm64-v8a のいずれかの ABI を対象にする。アプリのターゲット ABI を更新するには、Gradle の設定を更新します。アクティブな Android デバイスで使用されていないその他の ABI は、アプリの可用性に影響を与えることなくターゲットから削除できます。
「リリースを準備して公開する」のステップ 1 の説明に沿って、リリースを作成します。
リリースを作成するときに保護機能を有効にするが(リリースを準備して公開するのステップ 2 を参照)、[アプリの完全性] ページ([テストとリリース ] > [アプリの完全性])で有効にします。[アプリの完全性] ページには、アプリやゲームで意図したとおりのユーザー エクスペリエンスを実現するための完全性と署名のサービスが含まれています。
リリースを準備するときに、[整合性保護を有効にする] または [完全性の保護の管理] というボタンが表示されます。次に、[自動保護] で [オンにする] をクリックすると、完全性の保護を有効にできます。Google Play でリリースへの署名と完全性保護が行われ、改ざんや不正な配布が制限されます。これは、自動保護がオンになっていることを表します。
リリースの準備を完了し、変更を保存します。
各テストトラックを使用して、保護されたアプリ バージョンをテストし、ユーザー エクスペリエンスやパフォーマンスに予期しない影響が生じないことを確認します。
確認には以下の手順を含めることをおすすめします。
- ゲームの起動をテストして、起動時のクラッシュや起動時間の速度低下がないか確認します。
テストプロセス中に問題が見つかった場合は、自動保護を無効にすることができます。保護されていないバージョンをオープン トラックや製品版に昇格させないことをおすすめします。
個々のリリースで完全性保護機能をオフにする方法は次のとおりです。
- リリースを準備するときに、[完全性の保護の管理] をクリックします。
- [自動保護] で [以前の保護] または [このリリースの保護をオフにする] を選択します。
- 変更内容を保存します。変更はこのリリースに適用されます。次回リリースをアップロードするときに、最新かつ最強の保護機能がリリースに再び適用されます。
準備が整ったら、Google Play Console でリリースを製品版トラックに公開できます。選択した国のすべての Google Play ユーザーに保護されたアプリが公開されます。
ユーザーが自動保護のメッセージからアクセスしたときのストアの掲載情報をカスタマイズする
自動保護では、アプリを非公式に入手したユーザーに対して、Google Play でアプリを入手するよう求めるメッセージを表示できます。ユーザーはこのメッセージをタップするとストアの掲載情報にリダイレクトされます。ストアの掲載情報に表示されている、Google Play からアプリを入手するためのインストール(または購入や更新)ボタンをタップすると、ユーザーの Google Play ライブラリにアプリが追加されます。
メッセージをタップしたユーザー向けに、ストアの掲載情報のアセット(アプリの名前、アイコン、説明、画像、映像など)をカスタマイズできます。手順は以下のとおりです。
- Google Play Console を開き、[アプリの完全性] ページ([テストとリリース ] > [アプリの完全性])に移動します。
- [自動保護] セクションまでスクロールします。
- [設定] をクリックします。
- [ストアの掲載情報のカスタマイズ] セクションまでスクロールします。
- [掲載情報の作成] をクリックします。
- [ストアのカスタム掲載情報を作成] ページの指示に沿って操作し、[保存] をクリックします。
[ストアのカスタム掲載情報] ページから、自動保護メッセージ用のストアのカスタム掲載情報を直接作成することもできます。
- Google Play Console を開き、[ストアのカスタム掲載情報] ページ([ユーザーを増やす] > [ストアのカスタム掲載情報])に移動します。
- [掲載情報の作成] をクリックし、新しい掲載情報を作成するか既存のリスティングを複製するかを選択して、[次へ] をクリックします。
- [掲載情報] で [ターゲット ユーザー] までスクロールします。
- [URL] を選択し、テキスト ボックスに「playintegrity」と入力します。
- その他の情報をすべて入力して、[保存] をクリックします。
ヒント: URL パラメータ「playintegrity」は完全性のディープリンク用に予約されている特殊なキーワードであるため、ストアのカスタム掲載情報を設定する際に一字一句正確に入力する必要があります。
改ざん対策に対するおすすめの方法
注: この機能は一部の Play パートナーのみご利用いただけます。
以下に、Google Play の改ざん対策を最大限有効に活用するためのおすすめの方法をご紹介します。
自動保護は、ランタイムで実行される他の改ざん対策との互換性がない可能性があるため、併用するとユーザーに問題が発生する恐れがあります。アプリで他のランタイム チェックが実行される場合は、オープン トラックに公開する前に、保護されたアプリを十分にテストしてください。
保護されていないバージョンをオープン トラックに公開したり、Google Play 以外のチャネルで公開したりすると、アプリの保護機能は動作しなくなります。アプリの完全性保護機能を維持するには、アプリの保護されたバージョンをオープン トラックと製品版にのみ公開する必要があります。
Google Play はすべてのトラック(内部テスト版、クローズド テスト版、オープンテスト版、製品版)にわたって、保護されたビルドを自動的に配布します。これらのバージョンを通常どおりに十分にテストする必要があります。具体的には、次のとおりです。
- ゲームの起動をテストして、起動時のクラッシュや起動時間の速度低下がないか確認します。
- ネイティブ コード(C / C++)が(独自のコードまたはサードパーティ ライブラリの)Java にコールバックする時点をテストします。たとえば、広告、ロギング、ソーシャルとの統合、認証、Android 固有の機能(権限の処理など)が挙げられます。
テストプロセス中に問題が見つかった場合は、(以前のリリースですでに使用していた)以前のバージョンの自動保護に戻すことができます。または、Automatic Integrity Protection を無効にすることもできます。保護されていないバージョンをオープン トラックや製品版に昇格させないことをおすすめします。
アプリのビルドを内部アプリ共有に直接アップロードした場合、Google Play は保護機能を追加しません。これは、内部アプリ共有を使用して、デバッグビルドやその他の類似のビルドをアップロードできるようにするためです。
アプリが保護されている結果としてクラッシュ数が増えることがあります。これはおそらく、自動保護が想定どおりに機能していることを示しています。攻撃者がアプリの改変に失敗した場合、ランタイム チェックは主にアプリをクラッシュさせることで、アプリの実行を停止します。
Google Play に起因しないクラッシュは、Android Vitals の安定性の指標には影響を与えません。他のツール(Crashlytics など)を使用してクラッシュを分析していて、インストール元でフィルタする際にパッケージ名が必要になる場合、Google Play ストアのパッケージ名は「com.android.vending」です。
クラッシュ数の異常な増加について懸念されている場合は、できるだけ詳しい情報を記載して Google までお知らせください。担当チームが調査いたします。クラッシュが保護機能に関連していることが判明した場合は、適切に対応いたします。
クラッキングされたバージョンとは、改変された場合または Google Play からのインストールが要求される状況で Google Play の外部からインストールされた場合においても、機能しているアプリのバージョンのことです。
アプリのクラッキングされたバージョンを特定した場合は、Google までお知らせください。
関連コンテンツ
- Google Play Console の完全性と署名のサービスについてご確認ください。
- Android デベロッパー サイトの完全性と署名のサービスについてご確認ください。