防止意图拦截

时间:2014-06-04 18:26:04

标签: android security android-intent

假设我想允许合作伙伴应用程序启动我的活动。我的应用程序和合作伙伴应用程序具有不同的开发人员签名。

有些文章建议使用明确的意图来防止意图拦截。避免隐含意图。他们还建议使用权限。

我还阅读了一些关于避免意图的内容,因为特洛伊木马程序可以使用GET_TASK来访问额外的数据。他们建议使用服务而不是活动。但是,此问题似乎已在版本4.1.1中得到纠正,我不知道服务可能有多少漏洞。

我现在怀疑如果能够保护我免受与我的包名相同的应用程序的侵害。

假设用户没有安装我的应用程序。 然后,他访问另一个商店并安装一个应用程序,其名称与我的应用程序在Play商店中的名称相同。

如何保护我和我的伙伴免受这种情况的影响?我的合作伙伴可以用任何方式来验证我的真实身份吗? android有什么方法可以避免它吗?或者我应该实施允许合作伙伴检查我的身份的网络服务?

1 个答案:

答案 0 :(得分:3)

  

如何保护我和我的伙伴免受这种情况的影响?我的合作伙伴可以用任何方式来验证我的真实身份吗?

由于我对谁在这里打电话有点困惑,我将参考应用程序A和应用程序B.应用程序A想要从应用程序B开始活动,但担心应用程序B可能不合法应用程序,即使它具有相同的包名称。

步骤1:App B的作者可以使用Java 7版本的 keytool 来确定App B的发布签名密钥的SHA-256哈希值,用于签名的密钥发布到Play商店的应用。这应该是大写的,冒号分隔的哈希字符串(例如,CA:FE:BA:BE:...)。

步骤2:App A的作者可以保存App B的哈希字符串(由App B的开发人员提供)作为字符串资源。

步骤3:应用A的作者可以添加my CWAC-Security library并呼叫SignatureUtils.getSignatureHash(),传入一些Context和应用B的包名称(在应用A确认该应用之后)实际安装了B)。这将返回已安装的App B副本的计算SHA-256哈希值。这应与字符串资源匹配;如果没有,则安装的应用程序B是被黑客攻击的副本,并使用其他签名密钥签名。