Android‎ > ‎

LVL(License Verification Library)の導入

LVLってなぁに?

Googleが提供しているライセンス認証に利用できるライブラリです。

どういうアプリならば使えるのか

GoogleのAndroidMarketで有料アプリとして出品されているアプリであれば利用できます。

どういうことが出来るのか

LVLで保護されているアプリケーションを不正に利用している人や、古いバージョンのアプリを利用している人を判別することが出来ます。
判別させた後は、利用を停止させる、アップデートを促す、などの処置をとることができます。

どういう仕組みなの?

vending(Marketアプリ)のServiceに検証を依頼しています。

どのくらい安全なの?

程度の低いクラッカーに対しては効果を発揮すると思います。
例えば、有料アプリを購入した直後に、rootedな端末でadb pull でapkを引っこ抜き、返品するような手合いです。
ある程度のスキルのあるクラッカーは、バイトコードを書き換え、LVLのコードをバイパスするなどの手段を取ってくる可能性があるため、創意工夫をこらして防衛策を練らないといけないようです。

やってみよう!

まずは、程度の低い奴らを追い払えるところまでの導入を行ってみます。

LVL パッケージのダウンロード

 Eclipseのツールバーにある可愛いアイツをクリックすると出てくるアレ(なんて名前なんだろ?)でMarket Licensing package をダウンロードしておきます。


ライブラリのコピー

$ANDROID_HOME/market_licensing/library を適当なディレクトリのコピーします。
新規Androidプロジェクトを作成し、Create project from existing source. でさっきコピーしたディレクトリを指定します。
こんな感じ!Warningが出ますが、aidlから自動生成したクラスで発生しているので気にしないでおきます。

取り込んだら、念のためプロジェクトのプロパティのAndroidの項を見て、Is Library のチェックはONになっていることを確認しておきます。
画面右側下半分左上のチェックボックスね。

サンプルのコピー

libraryディレクトリと同じ手順で $ANDROID_HOME/market_licensing/sample をコピーしてからEclipseに取り込みます。
そしたら、以下のような状態になるはず。(プロジェクト名はLVLSampleに手で書き換えました。)
エラーが発生している場合は、プロジェクトをCleanしてみてください。

エラーが消えない場合、サンプルプロジェクトからライブラリプロジェクトのリンクができているか確認してみます。
プロジェクトのプロパティのAndroidの項を確認して、正しく参照が設定されていることをチェックしてください。

Androidのライブラリプロジェクトは普通にJavaのビルドパスを通すのではなく、この場所から設定する必要があるので注意しないといけないですね。

ここまで出来たら動かしてみたくなると思うのですが、まだ設定が足りませんのでもうちょっと我慢してください。

公開鍵の設定

LVLの公開鍵を入手するには、Android Marketでデベロッパー登録が済んでいる必要があります。
登録が済んでいる場合は、デベロッパーコンソールでプロフィールの編集画面を表示してみてください。
こんな感じで、公開鍵が表示されます。
簡単にこの画面の使い方を解説しておきます。
  • テストアカウント
    LVLを実装したあなたのアプリからの検証依頼があった場合、本来のステータスではなく、ここで設定した応答を返す人を設定します。
    複数人でデバッグしたり、友達に検証を依頼する場合に、メールアドレスを教えてもらってここに入力するといった使い方になるのかと思います。
  • 公開鍵
    公開鍵です。この後説明します。
  • テスト応答
    検証結果を制御します。自分のアカウントと、テストアカウントにのみ影響があると思われます。
    どの値がなんなのか、はドキュメントを参照してください。
公開鍵をサンプルに含まれているMainActivity.java の58行目、BASE64_PUBLIC_KEYにコピペしてください。
これで準備は完了です。

実行する

まぁ実行するだけです。
先ほどの画面でテスト応答を変えても、デフォルトでは検証結果をキャッシュするServerManagedPolicy.javaが適用されているため、結果がキャッシュされていてすぐに結果が変わったりはしません。
アンインストールしてリトライするか、毎回厳密にチェックしなおすStrictPolicy.javaを利用するようにソースを手直しするかしてみてください。

最後に

これで、LVLの導入は終了です。自身のプログラムでLVLを導入したい場合は、サンプルのMainActivityを真似して導入するとよいと思います。

LVLはそもそもどういう仕組みなの?と疑問に思われた方のために、最小構成を用意しておきました。
こちらは、ライブラリプロジェクトも必要ない、余計なものを削ぎ落とした構成になっています。

参考文献

@vvakameの日記 AndroidのLVL(License Verification Library) とりあえず導入編

Comments