如何在android中存储API凭据并避免反编译攻击?

如何在android中存储API凭据并避免反编译攻击?,android,google-play-services,apk,build.gradle,decompiling,Android,Google Play Services,Apk,Build.gradle,Decompiling,我的最终目标是保护我的API凭据的安全,而这不能通过反编译apk来发现 目前,我的API凭证硬编码在build.gradle(应用程序模块)文件中 当我用这个反编译我自己的apk时,我可以找到API url和其他凭证 现在我正在寻找一个解决方案,更感兴趣的是了解“googleservices.json”文件是如何解析的。 如果有一个解决方案可以在运行时或编译时读取app文件夹下的**my cred.json**文件(与**google services.json**存在的目录相同),我想我可

我的最终目标是保护我的API凭据的安全,而这不能通过反编译apk来发现

目前,我的API凭证硬编码在
build.gradle(应用程序模块)
文件中

当我用这个反编译我自己的apk时,我可以找到API url和其他凭证

现在我正在寻找一个解决方案,更感兴趣的是了解“googleservices.json”文件是如何解析的。

如果有一个解决方案可以在运行时或编译时读取app文件夹下的
**my cred.json**
文件(与
**google services.json**
存在的目录相同),我想我可以保护我的凭据不被反编译源代码(如果我错了,请纠正我)


请告诉我如何阅读
**my cred.json**
任何其他保护应用程序凭据的解决方案

在我看来,没有办法保护Android设备上的此类私钥。因此,解决方案就是不将其存储在Android设备上。但您可以将其存储在外部服务器上。在我的例子中,这个密钥在每个会话中只使用一次,以生成会话令牌。因此,我简单地创建了一个小型java应用程序,它根据用户id和api密钥创建会话令牌。该应用程序托管在谷歌应用程序引擎上,但任何托管服务都应该完成这项工作。然后,您的Android应用程序必须调用此应用程序(servlet)以获取适当的令牌,然后使用该令牌调用API


我知道这并不能直接回答你的问题,但这很简单,可以避免你的密钥被反向工程。

经过一些研究,我发现你无法可靠地将应用程序凭据隐藏到android应用程序中。目前正在介绍几种解决方案,但没有一种是100%安全的,因为撤销android应用程序非常容易

你只能通过模糊使攻击者失去时间。。。 这里有一些混淆应用程序凭据的方法,但没有一种是真正安全的,即使是C++/JNI

让它100%安全的唯一方法是设置您自己的服务器来保存凭据,并为您进行登录,甚至请求。我认为最好的方法是使用OAuth2身份验证过程


这取决于您拥有的时间和您的安全需求。

这只是一个部分答案,但在您使用复杂的模糊处理方法之前,我建议您首先检查每个API如何实际验证您的应用程序:目前大多数API服务要求您注册应用程序的证书才能工作,因此,即使使用API密钥,也无法使用应用程序的配额,因为无法访问用于签署应用程序的私钥

也许是吹毛求疵,但却是一个关键术语:逆向工程与反编译不是一回事。您所做的是对二进制文件进行反编译,Java让您可以轻松地进行反编译。逆向工程是通过只观察系统的输入和输出而不看源代码来重建系统的艺术。