如何保护Google API密钥

时间:2019-06-06 17:37:00

标签: android google-maps google-places

我一直在Android应用程序上进行一些安全测试。我想要解决的一件事是API密钥安全性;特别是谷歌的地方和地图键。有很多关于选项的文章,即将密钥编译到源代码,将它们放置在资源文件中,将它们编译到共享库等。在我的特殊情况下,Maps密钥在清单文件中,而Places密钥在共享库中。我创建了一个签名的APK,以测试获取和使用其中一个密钥的难度。我做了以下事情:

  • 使用apktool对APK进行反向工程,
  • 打开清单并抓住Maps密钥,
  • 使用与原始版本相同的程序包结构创建了一个伪造的应用程序版本,其中包含带有Google地图片段的活动,
  • 将Maps密钥放入伪造的清单中,
  • 运行应用程序,显示地图

然后我:

  • 在伪造的应用程序中使用与原始包相同的包和名称创建一个新类,并使用代码从/ data / data / [包名称]加载共享库,
  • 将共享库从反向工程的APK复制到伪造应用程序的/ data / data / [package name]文件夹中,
  • 运行该伪造的应用程序,然后打印出Locations API密钥

因此,最后,我没有太多的努力,就拥有了两个密钥,然后就可以在伪造的应用程序中使用它们了。

我确定我一定会丢失一些东西。看来,地图的唯一选择是将密钥存储在清单中。是什么阻止某人做我的工作?当然,它不能只是冷漠。我意识到,如果有人尝试使用劫持的API密钥发布应用,则可能会被抓住。但是,有人可以创建一个应用程序,并让人们自己加载它。如果公司每次有人弄乱被劫持的钥匙时都必须更换被劫持的钥匙,对客户来说将是一个巨大的破坏。

2 个答案:

答案 0 :(得分:2)

我认为您需要再次阅读Google API密钥文档。似乎有一种叫做“限制”的东西,应该可以帮助您确保您的密钥受到保护,而不在其他某些应用程序上使用。

我相信限制会阻止来自您未包括在内的其他域的请求无法呈现。

API Key best practices

答案 1 :(得分:1)

有很多方法可以保护您的API密钥安全。下面的链接说明了如何保护密钥。根据您的用例,您可以遵循其中的一个

Using Gradle

Using NDK

Using Server Call