如何从 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 清单中复制出来,并删除以下内容:<meta-data android:name="com.crashlytics.ApiKey" android:value="YOUR_API_KEY_HERE"/>
然后创建一个名为 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。”以上是关于如何从 APK 反编译中保护 Fabric API 密钥?的主要内容,如果未能解决你的问题,请参考以下文章