15

私のフォルダーassets/dataには、アプリの静的データを含む XML ファイルがたくさんあります。

誰かが APK を取得し、その一部を変更してデバイスにインストールするのは非常に簡単です。

フォルダの整合性をチェックして、ユーザーが静的データを変更できないようにしたいと考えていassets/dataます。

最初はMD5 checksumを使用することを検討していましたが、使用するファイルの量 (50-100) に対してはおそらく遅すぎるでしょう。

何か提案はありますか?

編集:

このアプリは、各レベルを説明する XML ファイルを含むゲームです。

4

4 に答える 4

6

資産を単独で保護する方法ではなく、変更や再パッケージ化から効果的に保護する方法について説明しますが、最終的に同じ手法を暗号化に適用することもできます。不完全ですが、変更を大幅に困難にすることができます。

証明書を使用してアプリケーションに署名します。彼らはあなたのものを取り除くことができますが、それを元に戻すときに他の誰も同じ証明書を作成することはできません. したがって、実行時にアプリケーションの署名をチェックして、期待どおりであることを確認できます。

これを行うための安価で厄介なコードを次に示します。

   PackageManager pm = context.getPackageManager();

   PackageInfo info = pm.getPackageInfo( context.getPackageName(), PackageManager.GET_SIGNATURES );

   if ( info.signatures[ 0 ].toCharsString().equals( YOUR_SIGNATURE ) )
   {
     //signature is OK
   }

ここで、YOUR_SIGNATURE は定数で、署名済みアプリでこのコードを実行することで取得されます。

さて、あなたがすでにほのめかした2つの問題が残っています:

  1. ソースコードの定数を証明書に合わせて変更し、アプリを再パッケージ化して再署名するだけの人をどのように止めることができますか?

  2. 誰かが check メソッドを見つけてそれを削除するのをどのように止めることができますか?

両方への回答: 絶対に不可能ではありませんが、難読化によってかなりうまく機能します。無料の Proguard (より便利な商用の Dexguard) は、これを行うためのツールです。後者の現在の 350 ユーロのコストであきらめることができます。一方で、私はこのように保護されたアプリをリバース エンジニアリングしようとしましたが、リスクが非常に高くない限り、苦労する価値はありません。

ある程度、(1) 自分で難読化を行うこともできます。実行時に署名「定数」を複雑なプログラムによる方法で組み立てて、見つけて置き換えるのを困難にします。

(2) は実際にはソフトウェア設計の問題です。チェックを削除するのが非常に複雑または煩わしいものになります。難読化すると、そもそも見つけにくくなるだけです。

さらなる注意として、 Google Licensingのようなものがこの領域で保護を提供するかどうかを調べたいと思うかもしれません. 経験がないので、自己責任でお願いします。

于 2013-02-06T09:20:41.250 に答える
2

否定的ですが、一種の答えです。

人があなたの apk を持っていてそれをデコードした場合、チェックサムを使用したとしても、コード部分を新しいチェックサムで更新することができます。これじゃ勝てないと思います。それを保護するために多大な努力を払うことができますが、誰かが apk を取得して変更できると仮定すると、保護を元に戻すこともできます. 私の商業的なものでは、デコードを非自明にしようとしていますが、防弾ではありません。それ以上のことは、努力する価値がなく、不可能であることも知っています。

于 2013-01-29T04:34:24.547 に答える
1

おそらく、xml ファイルを圧縮して、assets/data フォルダーに入れることができます。次に、その .zip でチェックサムを実行します。最初の実行時に、ファイルを解凍して .xml レイアウトを取得できます。アーカイブを解凍するには、 ZipFile クラスを使用して複数のファイルの zip アーカイブからファイルを解凍するを参照してください。

于 2013-01-29T04:36:04.060 に答える
0

おそらく最も信頼できる方法は、アプリの起動時にレベル ファイルのタイム スタンプとサイズをチェックしてレベル XML データをサーバーからダウンロードすることです。これにより、時間の経過とともにレベル データを更新することもできます。もちろん、これは、ホストするサーバーの追加費用が発生することを意味し、これが別の問題になる可能性があります.

于 2013-02-05T15:44:40.013 に答える