http://developer.android.com/intl/ja/google/play/billing/billing_best_practices.html
Android in-app-billing のデータが改ざんされていないかの検証
java - How do I verify Android In-app Billing with a server with Ruby? - Stack Overflow
- コンテンツフィードのような、real-time serviceを使うべき。そうすれば常に最新の状態に保てる。
- サーバーを使って購入されたコンテンツを配信すべき。
上記をやってるなら端末(のメモリやSDカード)に保存してもいいが、保存するなら暗号化すべき
Proguardとか使って難読化すべき。 他にも以下のような対処もできる。
- 他のメソッドの中にメソッドを入れる
- StringをConstantsとしてまとめて定義せずにその時々で作成する
- Javaリフレクションでメソッドを実行する(メソッドの文字列実行)
Javaリフレクションメモ(Hishidama's Java Reflection Memo)
Proguardを使ってる場合は、以下の設定を追加しなければならない。
-keep class com.android.vending.billing.**
サンプルコードまんまだと攻撃者に見破られやすいので変更すべき。(処理の開始地点と終了地点とかね!)
セキュアでランダムなワンタイムトークンを使うことでリプレイ攻撃を防げる。 サーバーでワンタイムトークンの検証をするならサーバーでワンタイムトークンを生成して使うべき。
第3回 悪意のある攻撃から身を守るには? | Think IT(シンクイット)
ランダムでユニークなトークンをセットしてリクエストし、レスポンスで返ってきたトークンを検証すべき。またさらに用心するなら、そのトークンをセキュアなサーバーでも検証すべき。
Trademark infringement - Android Developer Help Trademark infringement - Android Developer Help
不正購入が判明した場合に購入コンテンツを取り消しできるようにすべき。
悪意のあるユーザーから守るために、PublickKeyを素のままコードに記載すべきではない。 その変わり分割したりXOR暗号化とかして実際のキーを隠すべき。
Javaで文字列の暗号化/複合化(※外部ライブラリを使わずに) - on the center line.
パブリックキー自体は秘匿情報を持ってないが、ハッカーによって簡単に他のキーに置き換えられたりしたら困るでしょ?(悪意のある開発者のパブリックキーに置き換えたアプリを不正に配布して売上をそいつに奪われたりするのを防ぐことができる)