如果有人反编译您的Android应用程序,他们可以看到签名证书吗?

时间:2015-08-18 17:13:59

标签: android

如果某人反编译您的.apk文件,他们会以某种方式查看您签名的证书和/或SHA1吗?

我问的原因是我理解在Android代码中将类似秘密密钥的东西放到一个安静的API中是不明智的,因为有人可以反编译.apk然后以纯文本格式查看密钥。这让我想到了 - 其他敏感信息可能会反编译显示出什么?特别是因为某些API使用您应用的SHA1来验证您的应用,并确保只允许它调用API方法。

2 个答案:

答案 0 :(得分:5)

每个APK都在构建过程中签名。在调试版本中,它使用调试密钥签名并登录发布模式,您必须setup keys

一般来说,签名允许用户验证文档的来源,在本例中为APK。它通常有以下步骤:

  1. 您计算要保护的文档的哈希值。
  2. 您使用私钥加密哈希。
  3. 您在其中嵌入了文档的哈希值(如果是Android,则为META-INF / CERT.SF)
  4. 您将文档与公钥一起分发(如果是Android,则为META-INF / CERT.RSA)
  5. 文档的接收者可以重新计算文档的哈希值,并通过使用公钥解密签名将其与文档创建时计算的哈希值匹配。

    哈希值通常是SHA-1哈希值。这并不是秘密,因为它需要验证文档的真实性。

    不幸的是,这种机制不能用来保护任何秘密。签名用于证明数据真实性,而不是保护秘密。

    就保护REST API的密钥而言,将密钥保存在APK中当然不是一个好主意,因为反编译器可以查找它。

    使用code obfuscators可以为您提供一定程度的防范反编译器的保护。

    可以应用的另一种技术如下:

    1. 拥有该应用的登录工具。
    2. 成功登录后,返回API密钥作为对应用的响应。确保使用https作为登录API
    3. 将API密钥保存在内存中,并在需要时使用它。

答案 1 :(得分:2)

  

如果某人反编译您的.apk文件,他们会以某种方式查看您签名的证书和/或SHA1吗?

您无需反编译即可获得与您用于签署APK的私钥对应的公钥的SHA1(或其他哈希值)。这是APK本身的一部分,可以在另一个应用程序中使用一些Java代码检索。