LVL (License Verification Library) を使ってみた



今回はAndroidアプリの不正利用を防ぐためのライブラリ「LVL」を使ってみました。

LVLとは

Androidアプリケーションの不正な利用を制止するための仕組みです。
Developerがこのライブラリを導入すると、Googleの強力なサーバー認証システムを利用して正規ユーザーか、不正利用ユーザーかを判別することが可能です。
去年の秋頃にAndroidSDKToolsに導入されたようですが、公式HPの説明を見てもイマイチ使い方が分かりませんでしたが、とりあえず使ってみました。

LVLは必要なのか



不正利用の防止はコピーガード機能とLVLを使えますが、コピーガード機能については不完全です。
現状ではAndroid端末のrootを取得すれば、コピープロテクトのかかっているアプリでもコピーが可能です。
(専用ツールが存在するようです)
詳しい手順は記述できませんが、返品可能期間が15分になった現在でもそれは可能です。


特に日本以外で有料アプリを公開する場合はLVLを実装したほうが無難ですね。
下記リンク先のディスカッションが参考になります
http://www.mailinglistarchive.com/html/android-group-japan@googlegroups.com/2010-10/msg00221.html

LVLの仕組みについて

LVLの詳しい仕組みについては、本家サイトが参考になります。
http://developer.android.com/intl/ja/guide/publishing/licensing.html
英語が苦手な方は本家サイトを見るより、ソースコードを見たほうが手っ取り早いと思います。
肝となるソースはLicenseValidator、LicenseChecker、ServerManagedPolicyでしょうか。


LicenseValidatorはレスポンスコードを判定します。
LicenseCheckerはサーバーとのやり取りに使われる?
ServerManagedPolicyはサーバーからの認証結果を暗号化して保存します。
次回サーバーに接続できなかったときは、こちらのキャッシュしたデータを使ってるみたいです。
保存するデータは最終レスポンスコード、VT、GT、RT、UT等ですが、UTはあまり気にしなくても良いです。
VTは次回ライセンス認証を行うまでの有効な期間をミリ秒で表します。
GTはローカルで使用できるアプリケーションの有効な期間をミリ秒で表します。
RTはローカルで使用できるアプリケーションの有効な起動回数を表します。
ありえないとは思いますが、有料アプリをダウンロードした直後、ネットに接続していない状態でアプリを起動すると
VT,GT,RTのデフォルト値が参照されますので、ハードコーディングしていない場合は、NOT_LICENSEDになると思います。

LVLの実装

LVLに付属しているサンプルソースを参考にすれば、かんたんに実装できると思います。

検証方法

LVLの検証方法ですが、デベローパーコンソールのプロフィール編集リンクを辿ると、LVLに関する設定項目があります。
ストアカウント:テスト応答を受信するアカウントです。このアカウントと結びついた端末にテスト応答を返します。
ライセンステスト応答:ここで設定した値がテスト応答のレスポンスコードになります。


検証したいLVLのアプリケーションを一旦マーケットにアップロードします。(下書き状態で大丈夫です)
アップロードしておかないと、レスポンスコードがアプリケーションエラーで返ってくると思います。
ストアカウントとテスト応答を設定して、正常に処理できるかテストします。VT,GT,RT値も返ってくるので確認できます。


単に不正利用を防止するだけなら上記の実装で十分ですが、アプリケーションが改竄されることを考えるとまだまだ物足りない感じですね。


参考サイト
http://mokkouyou.blog114.fc2.com/blog-entry-72.html#comment35
http://d.hatena.ne.jp/vvakame/searchdiary?word=LVL&.submit=%B8%A1%BA%F7&type=detail
http://y-anz-m.blogspot.com/2010/10/androidlvl-securing-android-lvl.html
http://developer.android.com/intl/ja/guide/publishing/licensing.html#app-publishing
http://android-developers.blogspot.com/2010/09/securing-android-lvl-applications.html

http://android-developers.blogspot.com/2010/09/securing-android-lvl-applications.html