2016-12-08 23 views
1

私はこのソリューションをどこからでも探していますが、まだ動作させることはできません。私のGoogle APIキーはresフォルダ内の文字列に保存されています。私は自分のプロジェクトでproguardを有効にしてプロパティを設定し、後でAPKを生成しました。 Googleキーをもう一度(Androidスタジオまたはhttp://www.javadecompilers.com/apktoolを使用して)ProGuardを使用してAndroidでGoogle鍵を難読化する方法

マニフェストでAPIキーを使用するにはresフォルダにAPIキーを格納することをおすすめしますが、そのキーのリバースエンジニアリングセキュリティを支援する方法は決して説明していません。

マイAndroidManifest.xmlは、コードのこの部分を持っています

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.proyecto.cutcsa.cutcsa" > 
    ... 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/app_icon" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" 
     android:name="android.support.multidex.MultiDexApplication"> 

     ... 

     <meta-data 
      android:name="com.google.android.geo.API_KEY" 
      android:value="@string/google_key" /> 

    ... 
    </application> 

</manifest> 

build.gradleは次があります。

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "23.0.3" 
    useLibrary 'org.apache.http.legacy' 

    defaultConfig { 
     applicationId "com.proyecto.cutcsa.cutcsa" 
     minSdkVersion 16 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     multiDexEnabled true 
    } 
    buildTypes { 
     release { 
      debuggable false 
      minifyEnabled true 
      shrinkResources true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 

     debug { 
      debuggable false 
      minifyEnabled true 
      shrinkResources true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

    dexOptions { 
     javaMaxHeapSize "4g" 
    } 
} 
dependencies { 
    ... 
} 

そして、私の `proguard-rules.pro -optimizationpasses 5

-dontusemixedcaseclassnames  

-dontskipnonpubliclibraryclasses 

-dontpreverify 

-verbose 

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class com.android.vending.licensing.ILicensingService 

-assumenosideeffects class android.util.Log { 
    public static *** d(...); 
    public static *** v(...); 
} 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-dontwarn java.awt.** 

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
}  

誰かがこの問題を教えてくれますか?私は本当にそれを感謝します。前もって感謝します!

+0

https://github.com/GoogleCloudPlatform/android-docs-samples/blob/master/speech/Speech/app/src/main/java/com/google/cloud/android/speech/AccessTokenLoader.java#L68あなたのデザインは良くありません。ドキュメントに記載されているように、応答にトークンを提供するプロセスをホストする必要があります。 –

+0

@Robert Rowntreeあなたの答えに感謝します。なぜ私のデザインは良くないと言いますか? Googleでは、次のようにAPIキーを使用して作業することを提案しています。 https://developers.google.com/maps/documentation/android-api/start さらに、コメントに投稿したサンプルはどのように機能しますか?私はそれをどのように呼びますか?どうやって使うの?敬具! –

+0

あなたがコードリンクのグーグルから発行された警告の理由を知っていれば、あなたは良いです。サーバー(SECURE)からのアクセストークンを要求する警告....モバイルクライアントに関する注釈は、api-keyのいずれかを格納するか、または例としてCREDENTIAL全体を格納するクライアントとは異なります。難読化しても、./res/rawのKEYまたは./res/rawのCREDENTIALは最高のセキュリティではありません。 –

答えて

0

APIキーのような文字列値をわかりにくくするために、ProGuardの商用バージョンであるDexGuardを見ることができます。リソース値のインライン化と文字列の暗号化をサポートしているため、APKから機密データをリバースエンジニアリングするのがはるかに難しくなります。

関連する問題