54
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Androidのリセマラを防ぐ

Last updated at Posted at 2020-08-27

要約

MediaDrmを使ってリセマラを防ぎます

概要

Androidでリセマラ(リセットマラソン)を防ぐために、一意のIDを取得します。
ここでいうリセマラとは、アプリをアンインストール/インストールを繰り返して、初回限定の利益を何度も受ける行為を指します。

公式のドキュメント

リセマラのように何度もアプリを再インストールしてIDを作成することをシビル攻撃というらしいです。
そして、公式にも不正行為防止: 無料コンテンツ制限を適用し、シビル攻撃を検知するというドキュメントがあります。

GUID やインスタンス ID を使用すると、ユーザーがコンテンツ上限の適用を回避するにはアプリを再インストールしなければならなくなるため、ほとんどのユーザーに思いとどまらせることができます。

しかし、これで思いとどまらないのがリセマラという行為なので、もう一つある

APK ごとの識別子である Widevine ID を使用してコンテンツへのアクセスを制限できます。

この、Widevine IDを使ってリセマラを防いでみます。

Widevineとは

Widevineとは、デジタル著作権管理技術プロバイダーです。
他のデジタル著作権管理技術プロバイダーとして、MicrosoftではPlayReady、AppleではFairPlayというものがあり、WidevineはGoogleのデジタル著作権管理技術プロバイダーになります。

Widevine IDを取得する

Widevine IDを取得するために、MediaDrmというものを使います。

val widevineUuid = UUID.fromString("edef8ba9-79d6-4ace-a3c8-27dcd51d21ed")
val id = MediaDrm(widevineUuid).getPropertyByteArray(MediaDrm.PROPERTY_DEVICE_UNIQUE_ID)

といった感じに、MediaDrmをWidevineのUUIDで初期化して、MediaDrm.PROPERTY_DEVICE_UNIQUE_IDを取得することにより、端末固有のIDを取得できます。

本来であれば、暗号化されたコンテンツのメタデータを取得し、それにあったデジタル著作権管理技術プロバイダーを設定する使い方をするのがMediaDrmなのですが、今回の目的はWidevine IDなので、WidevineのUUIDを直接入れています。

ちなみにUUIDの参考先はこちらのサイトです。
https://dashif.org/identifiers/content_protection/

Widevine IDの挙動について

アンインストールして再インストールした場合

初回取得時と同じIDになります。

端末ID取得処理を別アプリに実装した場合

別アプリの場合、違うIDになります。

マルチユーザーの場合

Android同一端末でマルチユーザーの機能を利用している場合、どのユーザーに切り替えても同じIDになります。

まとめ

つかおう!MediaDrm!

54
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?