2011-12-31 7 views
1

私はサーバーベースのアプリケーションのバージョン無効化システムを実装しようとしています。apk署名に基づいて情報を取得する

サーバーに要請すると、クライアントはキーワードを追加し、そのパスワードがホワイトリストにない場合、サーバーはエラーで応答し、アプリケーションはマーケット更新があることを警告するメッセージを表示します(通常、そのバージョンがハッキングされているか、正当なバージョンで使用されていたが、クラックされたバージョンが同じコードを使用しているためブラックリストに登録されているため)。 パスワードを生成するために、コンパイルされたバージョンを識別する実行時に復元された鍵が必要です(apkが再コンパイルされても動作しません)。

最初はコードで取得したapkの署名このような:ハッカーは私のAPKの署名を取得することができますので、

public static int getSignature() { 
    try { 
     Signature sigs[] = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).signatures; 
     return sigs[0].hashCode(); 
    } catch (NameNotFoundException ignore) { 
    } 
    return 0; 
} 

しかし、あるはかなり愚かである(デバイスにインストールし、上記のコードでプログラムを実行している(my.apk.package名の代わりgetPackageNameを使用して())

次に、getSignature()メソッドを変更してthの代わりに偽のコードを返すe実際の署名。

私の質問は、情報(署名に依存しているか類似している)がありますが、値が変更され、そうでない可能性がある別の署名でコードが再コンパイルされた場合、これは、長い読み取りおよびいくつかの仕事かもしれ http://developer.android.com/guide/publishing/licensing.html

、ちょっと、それはです:簡単にアプリが有料のものである場合、あなたが見てしたいことがあり

おかげ

答えて

2

を推測しますセキュリティのための価格。

2

何でもあなたの.apkの中にはほとんど誰もが読むことができるので、あなたは運がないと思います。根っこのデバイスで

アプリの難読化を検討する必要があります。 ProGuardを使用します。

関連する問題