我的最终目标是保护我的API凭据的安全,而无法通过反编译apk来发现它。
当前,我的API凭据已硬编码在 buid.gradle(app module)
文件中。
使用此site反编译自己的apk时,我可以找到API网址和其他凭据。
现在,我正在寻找一种解决方案,并且对了解如何解析“ google-services.json”文件更感兴趣。
如果有一种解决方案,可以在运行时或编译时(位于**my-cred.json**
所在的目录)读取app文件夹下的**google-services.json**
文件,我认为我可以保护自己的凭据免于反编译源文件(正确如果我错了我
请告诉我一种阅读**my-cred.json**
或任何其他解决方案来保护应用程序凭据的方法
答案 0 :(得分:1)
我认为无法保护Android设备上的这种私钥。因此,解决方案就是不将其存储在Android设备上。但是您可以将其存储在外部服务器上。在我的情况下,此密钥每个会话仅使用一次,以生成会话令牌。因此,我只是创建了一个小型Java应用程序,该应用程序通过用户ID和api密钥创建了会话令牌。该应用程序托管在Google App Engine上,但任何托管服务都可以完成。然后,您的Android应用程序必须调用此应用程序(servlet)以获得正确的令牌,然后该令牌才能用于调用API。
我知道这不能直接回答您的问题-但这很简单,可以避免对您的密钥进行逆向工程。
答案 1 :(得分:1)
这只是部分答案,但是在您进入复杂的混淆方法之前,我建议您首先检查每个API如何对您的应用程序进行实际身份验证:如今,大多数API服务都要求您将应用程序的证书注册为可以使用,因此即使使用您的API密钥,一个人也无法使用应用程序的配额,因为一个人将无法访问用于签名应用程序的私钥。
答案 2 :(得分:0)
经过一些研究,我发现您无法可靠地将应用程序凭据隐藏到android应用程序中。描述了几种解决方案,但都不是100%安全的,因为反向开发android应用程序非常容易。
您只能混淆使攻击者有空余时间... 这里有一些混淆应用程序凭据的方法,但是,即使C ++ / JNI,也没有一种是真正安全的。 https://rammic.github.io/2015/07/28/hiding-secrets-in-android-apps/。
只有100%安全的方法是设置您自己的服务器来保存凭据,并为您甚至请求进行登录。我认为最好的方法是使用OAuth2身份验证过程。
这取决于您拥有的时间和您的安全需求。