2015-10-13 12 views
8

私のAndroidプロジェクトでは、Webサービスのアドレスを不明なままにしておきたいと思います。 次のように私はリンクを格納します。Androidプロジェクトに機密文字列を保存するより安全な方法はありますか?

private final String SERVICE_LINK = "mywebservicelink..." 

をしかし、私はAPKのは逆コンパイルすることができましたので、このリンクを知ることができる場合、私は疑問に思います。

どうすれば安全に保存できますか?

ありがとうございました。

+0

安全な解決策を得ることはできません。リバースエンジニアリングですべてを回復できます。いくつかのアプローチは、他のアプローチよりもいくらかの作業を必要とするかもしれませんが、何も本当に安全です。 – Henry

+1

より優れたユーザーは、ソースコードを暗号化するのに優れています。 –

答えて

4

あなたはたとえば、あなたのgradle.properties

https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_properties_and_system_properties

に依存した文字列を設定することができます。

の中であなたのgradle.properties、あなたが定義することができます(通常はルートプロジェクトにあります):

SERVICE_LINK = "mywebservicelink" 

あなたのアプリケーションでbuild.gradle

android { 
    ... 
    defaultConfig { 
     resValue "string", "service_link", SERVICE_LINK 
    } 
    ... 
} 

このサービスリンクは、R.string.service_linkとしてリソースに用意されています。

getString(R.string.service_link); 

EDIT 1:

をあなたは、あなたがProGuardのを使用することができ、あなたのAPKであなたの文字列を非表示にする方法について求めている場合はつまり、あなたは、単に実行して値を取得することができます。しかし、お勧めします。あなたのソースコードに何を入れても、それをリバースエンジニアリングすることはできません。 ProGuardはコードを難読化するため、リバースエンジニアリングが大幅に難しくなります。詳細については、このスレッドが素晴らしいです

How to avoid reverse engineering of an APK file?

+0

これはAPKを調べるときどのように役立ちますか? – Henry

+0

ありがとうございますが、これは私の文字列をどのように到達不能にしていますか? – Kerem

+0

私は自分の答えを編集しました。 – Fadils

1

あなたが代わりに直接割り当てるので、いくつかの操作を行った後SERVICE_LINK変数の値を割り当てることができます。例えば、いくつかの無意味な文字列で文字列演算を使用したり、特定の位置から文字や部分文字列を取得したり、いくつかの算術演算などで得られたASCIIコードから文字を取得したりするのは役に立ちます。

これは、サードパーティの人々があなたの定数を簡単に見つけられないように、複雑さを提供します。彼らは、実行時に変化するダイナミックな値、または無関係なものだと考えるかもしれません。しかし、それが直接 ""あったとしても、それは簡単に見つかりました。

0

経験則として、ネットワークアドレスを隠すことはできません。

ウェブサービス、アドレスなどを検索している人は、自分のネットワークを監視してパッケージを取得できます。

ホストのドメインまたはIPは、常に目立ちます。

関連する問題