我一直在对 Android 应用程序进行一些安全测试。我想要解决的一件事是 API key 安全性;特别是谷歌地点和 map 键。有很多帖子讨论这些选项,即将 key 编译到源代码中,将它们放入资源文件中,将它们编译到共享库中等。在我的特定情况下,Maps 键位于 list 文件中,而 Places 键位于 list 文件中位于共享库中。我创建了一个签名的 APK 来测试获取和使用其中一个 key 的难度。我做了以下事情:
- 使用 apktool 对 APK 进行逆向工程,
- 打开 list 并捕获 map 键,
- 创建了应用程序的虚假版本,其包结构与原始应用程序相同,其中包含带有 Google map fragment 的 Activity,
- 将 map key 放入虚假 list 中,
- 运行应用程序,显示 map
然后我:
- 在假应用中创建了一个新类,其包和名称与原始应用相同,并包含从/data/data/[包名称] 加载共享库的代码,
- 将逆向工程 APK 中的共享库复制到假冒应用的/data/data/[package name] 文件夹中,
- 运行虚假应用,然后打印出 Locations API key
最终,我毫不费力就获得了两个 key ,然后可以在应用程序的假版本中使用它们。
我确信我一定错过了一些东西。看起来 map 的唯一选择是将 key 存储在 list 中。是什么阻止某人做我所做的事情?肯定不能只是冷漠。我意识到,如果有人尝试使用被劫持的 API key 发布他们的应用程序,他们可能会被捕获。但是,有人可以创建一个应用程序并让人们侧面加载它。如果每次有人弄乱公司都必须更换被劫持的 key ,这对客户来说将是一个巨大的干扰。
最佳答案
我相信您需要再次查看 Google API key 的文档。似乎有一些称为限制的东西应该能够帮助您确保您的 key 受到保护并且不会在其他应用程序上使用。
我相信这些限制可以防止来自您未包含的其他域的请求无法呈现。
关于android - 如何保护 Google API key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56482557/