LVLってなぁに?Googleが提供しているライセンス認証に利用できるライブラリです。
どういうアプリならば使えるのかGoogleのAndroidMarketで有料アプリとして出品されているアプリであれば利用できます。
どういうことが出来るのかLVLで保護されているアプリケーションを不正に利用している人や、古いバージョンのアプリを利用している人を判別することが出来ます。
判別させた後は、利用を停止させる、アップデートを促す、などの処置をとることができます。
どういう仕組みなの?vending(Marketアプリ)のServiceに検証を依頼しています。
どのくらい安全なの?程度の低いクラッカーに対しては効果を発揮すると思います。
例えば、有料アプリを購入した直後に、rootedな端末でadb pull でapkを引っこ抜き、返品するような手合いです。
ある程度のスキルのあるクラッカーは、バイトコードを書き換え、LVLのコードをバイパスするなどの手段を取ってくる可能性があるため、創意工夫をこらして防衛策を練らないといけないようです。
やってみよう!まずは、程度の低い奴らを追い払えるところまでの導入を行ってみます。
LVL パッケージのダウンロードライブラリのコピー$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でデベロッパー登録が済んでいる必要があります。
登録が済んでいる場合は、デベロッパーコンソールでプロフィールの編集画面を表示してみてください。
簡単にこの画面の使い方を解説しておきます。
これで準備は完了です。
実行するまぁ実行するだけです。
先ほどの画面でテスト応答を変えても、デフォルトでは検証結果をキャッシュするServerManagedPolicy.javaが適用されているため、結果がキャッシュされていてすぐに結果が変わったりはしません。
アンインストールしてリトライするか、毎回厳密にチェックしなおすStrictPolicy.javaを利用するようにソースを手直しするかしてみてください。
最後にこれで、LVLの導入は終了です。自身のプログラムでLVLを導入したい場合は、サンプルのMainActivityを真似して導入するとよいと思います。LVLはそもそもどういう仕組みなの?と疑問に思われた方のために、最小構成を用意しておきました。
こちらは、ライブラリプロジェクトも必要ない、余計なものを削ぎ落とした構成になっています。
参考文献Proguard, Android と ライセンシングサーバについて Android Developers Blog: Securing Android LVL Applications Licensing Your Applications | Android Developers ↓ @vvakameの日記 AndroidのLVL(License Verification Library) とりあえず導入編 |



