场景:假设通过对.apk
文件进行逆向工程,攻击者获取应用中使用的推送注册服务的SENDER ID
。攻击者开发了一个类似的假应用程序,该应用程序具有相同/不同的程序包名称,并且已上载到与Google Play不同的应用商店。
我的问题:他/她可以在应用中使用相同的SENDER ID吗?对于安装该假应用程序的用户,这有什么影响?
相关问题: google cloud messaging security问题似乎有点类似。 Android GCM: same sender id for more application问题的回答也提供了有价值的信息。阅读接受的答案结论似乎是绝对可能的,这就是为什么建议不要在推送消息中包含敏感数据。
但这似乎不是问题的解决方案。我无法理解上述安全失效的影响。
答案 0 :(得分:16)
发件人ID(又名Google API项目ID)与唯一的应用程序包名称无关。事实上,多个应用程序可以使用相同的发件人ID注册到GCM,这将允许使用相同的API密钥向所有这些应用程序发送GCM消息。当然,每个应用程序都有不同的注册ID(即使在同一台设备上)。
如果有人知道您的发件人ID,他们可以使用该发件人ID注册到GCM,但如果不知道API密钥,他们将无法向假应用程序或真实应用程序发送GCM消息。当他们注册GCM时,GCM会收到他们的假应用程序的包ID。因此,如果您向真实应用的注册ID发送消息,则无法访问虚假应用。为了让假应用程序从您的服务器获取消息,它需要将自己的注册ID发送到您的服务器并欺骗您的服务器以使其相信它是真正的应用程序。在我们的服务器应用程序中,您必须提到我们的API密钥如果您想发送所需的任何通知。
答案 1 :(得分:1)
他们将无法使用您的GCM发件人ID发布通知。
请记住,当您获得发件人ID时,您还必须提交应用程序的包名称和发布签名密钥的SHA-1签名。该签名绑定到GCM发件人ID,以便只有您的发布密钥签名的应用程序才能注册和接收GCM通知。
Google Play也不允许发布包含重复包名的应用,因此任何人都无法创建包含Play商店中已有包名的虚假应用。
然而,没有任何东西是100%安全的。我认为黑客也可以找出你的SHA-1签名密钥并以这种方式破解APK,以欺骗系统认为应用程序是由你的发布密钥签名的。我已经看到应用程序被“破解”,这样可以绕过Android许可库。这可能会让GCM服务器认为假应用程序有权接收GCM消息。但是,“破解”的应用仍然不允许发布到Google Play,因此合法用户获得该应用的风险非常小。