1

可能重复:
丢失了我在 android 市场上上传的应用程序的密钥库

我正在将新版本的 Android 应用程序推送到 Google Play 商店,我希望它触发应用程序当前用户的更新,而不是将其视为新版本。我没有最初用于签署现有应用程序的私钥,所以我正在尝试以下方法来恢复它。

我可以进入第 3 步,但我不确定 keytool -list -keystore my-signing-key.keystore 命令的 .keystore 文件名是什么,有什么想法吗?

  1. 首先,解压APK并解压文件/META-INF/ANDROID_.RSA(这个文件也可能是CERT.RSA,但应该只有一个.RSA文件)。
  2. 然后发出这个命令:

    keytool -printcert -file ANDROID_.RSA 你会得到这样的证书指纹:

    MD5: B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB SHA1: 16:59:E7:E3:0C:AA:7A:0D :F2:0D:05:20:12:A8:85:0B:32:C5:4F:68 签名算法名称:SHA1withRSA

  3. 然后再次使用 keytool 打印出签名密钥库的所有别名:

    keytool -list -keystore my-signing-key.keystore

您将获得别名列表及其证书指纹:

android_key, Jan 23, 2010, PrivateKeyEntry,
Certificate fingerprint (MD5): B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB

瞧!我们现在可以确定该 apk 已使用此密钥库和别名“android_key”进行签名。

4

1 回答 1

6

除非您拥有保存私钥的原始密钥库文件,否则您无法从 .apk 中提取它。.apk 仅包含公钥和使用私钥生成的签名,但它实际上并不包含私钥本身。

考虑一下 - 如果 .apk 包含实际的私钥,并且提取它的说明非常简单,那么任何人都可以从他们的应用程序中获取 Google、Facebook、Microsoft 或 Amazon 的私钥并用它签署任何恶意软件。(Apple 不会受到这种攻击,因为他们不发布任何 Android 软件 :-P)

因此,除非您有权访问用于签署前一个 .apk 的原始密钥库文件(并且您知道密码短语 - 感谢@323go),否则我担心您会不走运。

于 2012-11-07T21:26:15.060 回答