如何从 APK 反编译中保护 Fabric API 密钥?

Posted

技术标签:

【中文标题】如何从 APK 反编译中保护 Fabric API 密钥?【英文标题】:How to secure Fabric API Key from APK decompilation? 【发布时间】:2019-02-24 18:55:09 【问题描述】:

decompiling 我的 android 应用 APK 文件时,我在清单文件中找到了 fabric ApiKey 键。如何保护 Fabric API Key 免受 APK 反编译?

我已经完成了以下代码更改以从清单文件中隐藏 Fabric API 密钥。但是APK反编译后还是可以看到的。

我添加了我的 Fabric API 密钥

FabricAPIKey=0123456789ABCDEF012345123456789ABCDEF012 在 gradle.properties 中。

在 build.gradle(Module) 中

...........
def FABRIC_API_ID = FabricAPIKey

    .....
    buildTypes 
            debug 
                ..........
                manifestPlaceholders  = [//this is used for defining the variable for manifest file
                    FABRIC_API_KEY:FABRIC_API_ID
                 ]
            
    release ..........
                manifestPlaceholders  = [//this is used for defining the variable for manifest file
                    FABRIC_API_KEY:FABRIC_API_ID
                 ]
            

在 AndroidManifest.xml 中

<meta-data
            android:name="io.fabric.ApiKey"
            android:value="$FABRIC_API_KEY" />

【问题讨论】:

理论上不可能。如果您将密钥与应用程序一起提供,那么只要有调试器和足够的时间,一个有足够动力的黑客最终就可以得到它。 【参考方案1】:

来自 Fabric 的 Mike。 Seva 的观点应该引起人们的注意——“只要有调试器和足够的时间,一个有足够动力的黑客最终可以做到这一点”。

如果需要,您可以将 API 密钥和构建密钥放在一个 fabric.properties 文件中。将您的 api 密钥从您的 android 清单中复制出来,并删除以下内容:&lt;meta-data android:name="com.crashlytics.ApiKey" android:value="YOUR_API_KEY_HERE"/&gt;

然后创建一个名为 fabric.properties 的文件,并将此文件夹放在应用 crashlytics 的模块的根目录中,在其'build.gradle 中的 fabric.properies 文件中,add:apiKey=YOUR_API_KEY_HERE

完成后,刷新您的依赖项以引入更改:./gradlew clean --refresh-dependencies

【讨论】:

当我这样做时,我得到 Fabric 无法初始化,AndroidManifest.xml 中缺少 API 密钥....【参考方案2】:

尝试将其保存在 strings.xml 并在此处引用。

那么 manifest 将只显示 int 格式的资源 id。

但如果你打开 strings.xml 文件,它将被检索到。

【讨论】:

我收到此构建错误“Crashlytics 发现无效的 API 密钥:@string/fabric_api_key。” 您使用的是相同的代码吗? android:value="@string/fabric_api_key" 这是我的

以上是关于如何从 APK 反编译中保护 Fabric API 密钥?的主要内容,如果未能解决你的问题,请参考以下文章

这可以保护我们的apk在android中反编译吗?

逆向工程保护

Apk 保护免受逆向工程 - 使用包名称? [复制]

安卓apk文件如何反编译?

Android Apk的反编译和加密

Android如何防止apk程序被反编译