2013-06-20 8 views
8

Androidの開発者は、プロジェクトでのアプリの公開鍵を格納については、次の言葉:Androidアプリ内セキュリティの推奨 - これはどういう意味ですか?

セキュリティ勧告:非常 によって提供されるようにあなたがいない ハードコード正確なパブリックライセンスキーの文字列値を行うことをお勧めしますグーグルプレイ。代わりに、実行時に部分文字列からパブリックライセンスキー 文字列全体を作成するか、コンストラクタに渡す前に暗号化された ストアから取得することができます。この方法により、悪意のある第三者が APKファイルの公開鍵文字列 を変更するのが難しくなります。

これは自明ですか?彼らが私にしたいことを理解していない。

例のコメントでは同じことが言われていますが、実際には指示の意味を実証していません。代わりに、ちょうどここ *プログラムに組み込まれた全体のリテラル文字列を格納するので

、作品から、実行時にキーまたは *使用のビット操作いくつかの他の文字列と(例えば、XORを構築する:ここではそれが言うものです) *実際のキーを非表示にします。鍵自体は秘密情報ではありませんが、我々は *は攻撃者が公開鍵を自分自身の *に置き換えて、サーバからのメッセージを偽造しやすいようにしたいと考えています。

どのようにして人がこれを行うのですか?

答えて

2

アンドロイドのデベロッパーは、アプリケーションを使ってやりたい支払いのためにGoogle Playと同期する必要のある「公開鍵」を望んでいます。簡単にハッキングできるため、アプリのソースコード内で直接使用しないでくださいいずれかによって。 したがって、サーバー側に公開鍵を格納する方法と、Google Playから応答を受け取ったら、その応答をサーバーに送信し、サーバーでその操作を実行する方法があります。

 /** 
     * String transformation by XOR-ing all characters by value. 
     */ 
     static String stringTransform(String s, int i) { 
     char[] chars = s.toCharArray(); 
     for(int j = 0; j<chars.length; j++) 
     chars[j] = (char)(chars[j]^i); 
     return String.valueOf(chars); 
     } 
+0

Googleは、代わりに実行時に部分文字列からパブリックライセンスキー文字列全体を作成するか、暗号化されたストアから取得することができます。 " "暗号化されたストアから取得する "サーバーから取得していますか?そして、説明されているように、実行時に文字列からそれを構築する安全な方法は何ですか? –

+1

すべてのトランザクション検証ロジックをサーバーに移動し、HTTPSを使用してサーバーに接続します。 – skygeek

+0

と文字列変換のために、あなた自身のロジックを実装するか、または更新された答えを見る必要があります。 – skygeek

1

これは非常に基本的な情報です。のは、この例を見てみましょう:

一部の開発者は、文字列自体としてそこにライセンスを保存することがあります

private static final String LICENSE_1="xxx-yyy-zzz" 
private static final String LICENSE_2="xxz-yyz-zzz" 
private static final String LICENSE_N="xxz-yyz-zzz" 

private ArrayList<String> licenseList=new ArrayList<String>(); 

licenseList.add(LICENSE_N); 

そして、彼ら彼らはこのような何かを行いますので、彼らは、ユーザーが自分のライセンス番号を入力する必要があります

を、私はあなたのlicensをバイパスすることができる唯一の方法は、あなたのコード内で上記のようなものを持っていなかった場合はD

if(licenseList.contains(ExitText.getText().toString()) 
    //allow 
else 
    //disallow 

今、私はこのアプリをコンパイルし、すべてのライセンスを取得することができますローカルで行われているのであれば、GameClHのようにメモリをハッキングしてしまう可能性があります。メモリハッキングは一例に過ぎず、攻撃者がさまざまなことを行う可能性があります。あなたはそれらを止めることはできませんが、あなたは人生をもっと難しくすることができます。

+0

これが脆弱性を証明しました。私はそれを得る。文字列として文字列をデコンボリューションします。しかし、彼らはあなたのアプリを保護するためにあなたに何を求めているのですか?彼らには特別な提案があり、私はそれらを理解していません。 –

+0

申し訳ありませんが、ビット単位での操作がコードでどのように行われているか分かりませんが、あなたのアプリがどのようにクラックする可能性があるかを教えていただけます。こう言っているように、このアプローチはそれをより困難にする。たとえあなたのクライアント側のロジックにビット単位の処理を実装していたとしても、私はあなたのロジックを見ることができるので、私はそれを使ってやりたいことを何でもすることができます。私はあなたのアプリを再コンパイルし、私的なアプリストアやファイルストアに公開することができます。 – Milan

関連する問題