如果黑客反编译了我的 APK,他能从这个文件中看到我的 API 密钥吗?我不担心我的源代码存储库。我只是担心黑客能够以某种方式从我的 APK 中看到这个 API 密钥。我正在尝试加密此文件并在运行时对其进行解密,但遇到了一些问题
4 回答
谷歌插件的设置方式,你很难隐藏google-services.json
文件的内容。唯一可行的方法是重新实现插件已经为你做的事情,我不推荐这样做。不幸的是,当按照 Google 想要的方式使用插件时,任何解压缩 APK 的人都可以轻松获取 Firebase/Google API 密钥。
但是,您可以通过配置谁可以使用该 API 密钥来防止滥用该 API 密钥。对于 Android 应用程序,您可以指定您的 API 密钥只能由已由给定密钥库签名并使用给定包名称的 Android 应用程序使用。
要配置这些限制,请遵循此处的文档:https ://cloud.google.com/docs/authentication/api-keys#api_key_restrictions
除了限制 API 密钥之外,如果您使用 Firebase RTD/Firestore,您还应该确保在数据存储上配置安全规则。根据您的用例,您可以阻止匿名用户在数据库的某些部分中读取或写入。
如果您想了解更多详细信息,我发现了一篇关于如何在 Android 应用程序中保护 API 密钥的好文章: https ://proandroiddev.com/developing-secure-android-apps-8edad978d8ba
根据此处的 Firebase 文档:
当您将应用程序连接到 Firebase 项目时,Firebase 控制台会提供您直接添加到本地项目中的 Firebase 配置文件 (Android/iOS) 或配置对象 (Web)。
对于 iOS,您添加一个 GoogleService-Info.plist 配置文件
对于 Android,您添加 google-services.json 配置文件
Firebase 配置文件或配置对象将您的应用与您的 Firebase 项目及其资源(数据库、存储桶等)相关联。
然后它将内容标识为公开:
内容被视为公开内容,包括您的平台特定 ID(在 Firebase 控制台设置工作流程中输入)和特定于您的 Firebase 项目的值,例如您的 API 密钥、实时数据库 URL 和存储桶名称。
请记住,如果您使用实时数据库、Cloud Firestore 或 Cloud Storage,您仍需要遵循 Firebase 描述的安全准则。
另请注意,尽管它们对您的应用程序是公开的,但这些文件不应在开源项目的公共存储库中提供。
应用程序中的所有内容都可以以非常简单的方式读取,因此正如 Google 建议的那样,您必须避免将信息放入 apk 中,尤其是在 firebase/google 云消息传递或此类服务的情况下的服务器密钥。
这显然不安全,但您别无选择,因此限制您的许可证密钥很重要。
解压缩您的 apk(将其重命名为 .zip 并打开,或从 bash 中打开unzip [your apk path]
)
现在- le coup the grace:找到一个名为的文件(在zip的根目录中)resources.arsc
并用任何同意打开它的编辑器打开它。即使是 TextEdit 或 Atom 也足够了。搜索,就AIza
在这里。使用您的用户 ID。
... 或更少的黑客风格方法:只需将您的 APK 拖放到 Android Studio。你可以看到里面的所有东西:在 resources.arsc 中,你会发现所有的键和值、所有的字符串、所有的整数……都在简单漂亮的 GUI 中。
更大的问题:有没有办法告诉 ProGuard 有效地混淆它。或者有没有办法使用与服务器共享的密钥对其进行加密。