安卓 - 忘记了密钥库密码。我能解密密钥库文件吗?

37

我丢失了用于签名我的应用程序的keystore文件的密码。我现在无法更新我的应用程序,我认为我必须通过使用新的keystore签署它来将其发布为新应用程序。是否有可能解密keystore文件,因为我有keystore文件并且密码存在于keystore文件中。或者任何人可以提供给我用于暴力破解密码的程序链接。如果您中的任何人已能够恢复keystore文件的密码,请分享您的方法。谢谢。


这个不容易做到,至少不是轻而易举的。另外,密钥库并不包含您的密码。它仅在运行时用于解密(一旦您想要访问它)。 - harism
2
不对,你需要阅读一些有关密码学的文本。密码并没有保存在那里,只有一个哈希值。但是Harism是正确的,如果你的密码超过4或5位数字,你很难轻易地破解它。 - Thommy
不,它不会。就像正确实现的用户数据库一样,它们仅存储密码的某种哈希值,使得几乎不可能恢复实际密码。至于密钥库,我不知道确切的机制,但它们绝对不包含用户可读的密码。 - harism
好的,谢谢回复。所以没有其他方法可以通过那种方式找回密码了。我想唯一的选择就是暴力破解了。 - anujprashar
应该尝试使用 https://www.npmjs.com/package/keystore-password-recovery。 - vmontanheiro
显示剩余3条评论
7个回答

48

1
谢谢您推荐这个工具!我发现自己处于类似的情况中,因为我需要发布一些针对一个我已经有一年没接触的项目的错误修复。我“有点”记得密码,但它似乎不起作用。使用这个带有“智能单词列表”功能的工具,我能够在文本文件中写下几个猜测,并尝试不同的单词排列、编号和大小写选项,几秒钟内就找到了我的密码。这个工具为我节省了很多麻烦。再次感谢! - olen_garn
太棒了,我在一个txt文件中写下了可能的密码列表,猜测密码只花费了0秒钟!强烈推荐,非常感谢! - Hammad Tariq
1
有人能告诉我如何恢复密码的步骤吗? - WISHY
5
好尴尬啊……我的密码竟然是我放在单词列表里的一个词。干杯! - JstnPwll
1
@GB_Bhayaniツ 步骤1:运行“java -jar 'thatJarFileDirectory'”。步骤2:在终端上阅读说明。示例命令:“java -jar /Users/aowalhome/Downloads/Android_Keystore_Password_Recover_1.07.jar -m 3 -k /Users/aowalhome/Desktop/KEYSTORE//keystore.jks -d /Users/aowalhome/Desktop/dictioanry.txt -l 3”。dictionary.txt的示例:https://users.cs.duke.edu/~ola/ap/linuxwords - Ashik
显示剩余2条评论

39

有3种方法可以恢复丢失的密钥库密码:

  1. 如果您的日志完好无损,那么您可以在Android Studio日志文件中找到密码:转到~/Library/Logs -> AndroidStudio->idea.log.1并搜索“Pandroid.injected.signing.key.password”,然后就能看到密钥密码。

  2. 您可以从.gradle目录中检索密码。查看.gradle\2.4\taskArtifacts\taskArtifacts.bin。这似乎不适用于Gradle的新版本(2.10及以上)。

  3. 使用AndroidKeystoreBrute按照Alex Kutsko的答案猜测或暴力破解您的密码。

解决方案链接


1
你刚刚救了我的工作。谢谢!下次我会把密码发邮件给自己。 - Neon Warge
2
“search for Pandroid.injected.signing.key.password” 技巧适用于Android Studio 2.2及之前的版本。在2.3及以后的版本中,它被屏蔽在日志之外。 (幸运的是,我还保留着我的2.2日志!) - Beer Me
1
它在2.3中。在文件中继续搜索一下。第一个实例被掩盖了。 - edhnb
6
第一种方法我相信已经不再适用了,密码已被替换为“*******”。 - Wouter Vandenputte
2
需要更新以让用户知道在Android 3中所有的“password”实例都被掩盖。 - T.Woody
显示剩余5条评论

32

我也曾遇到这个类似的问题!

有几种方法可以找回密码:

  1. 使用Android Studio的日志文件
  2. 使用taskArtifacts
  3. 使用暴力破解

详细答案在这里

如果以上方法都不行,还有一种重置keystore密码的方法

代码在这里

  1. 下载这里的zip文件

  2. 将JAVA安装到您的计算机上

  3. 将所有文件(密钥库、提取的java文件)放在一个文件夹中

  4. 在那里打开命令提示符。 (Shift + 右键单击 -> 在此处打开命令窗口)

  5. 运行javac ChangePassword.java

  6. 运行java ChangePassword <keystore file> <new keystore file>

    例如:java ChangePassword oldkey.jks newkey.jks

  7. 在询问时输入密码。 记住新jks文件的新密码。

使用新密码打开jks文件


5

我已经有几个月没有进行Android开发及其IDE工具操作了。

花费了几个小时才弄清楚,我在第二次尝试时实际上已输入了正确的密码。下一个对话框显示的错误图标与我输入错误密码时完全相同,但实际上它说我需要为选定的密钥输入密码!

这并不是与原问题相关,但您很可能已经输入了正确的密码!这就是UI设计的问题所在..


5
我分享一个简单的方法,希望我的方法能解决您的问题。
第一种方法 - 点击 .gradle->最新的Gradle版本->任务历史->taskHistory.bin
第二种方法 - 点击 .gradle->最新的Gradle版本->任务工件->taskArtifacts.bin

这在Android 3.0中已经过时了。 - T.Woody
在我的情况下,这并不是过时的。密码位于.gradle/4.4/taskHistory/taskHistory.bin.gradle/4.6/taskHistory/taskHistory.bin中。 - Alex

3
使用我与密码破解软件hashcat一起发布的工具是破解密码最高效的方式:

https://github.com/floyd-fuh/JKS-private-key-cracker-hashcat

如果您有一张强大的图形卡(GPU),破解速度会更快。否则,hashcat将使用您的CPU。
归结为以下两个命令:
java -jar JksPrivkPrepare.jar your_JKS_file.jks > hash.txt
./hashcat -m 15500 -a 3 hash.txt

这种方法更有效的原因是它直接破解私钥密码,而不是密钥库密码。它使用了一种其他密码破解程序从未使用过的算法。大多数密码破解程序效率不高(因为它们将整个密钥库文件计算到SHA1计算中),在最坏的情况下甚至可能破解密钥库密码(这可能不是用于密钥解密的私钥密码)。如果您需要更多细节,可以阅读我撰写的POC || GTFO期刊文章,该文章可以在此处或其他各种免费镜像上找到:POC||GTFO journal - 15:12 Nail in the Java Key Store Coffin 例如,如果您拥有NVidia 1080图形卡,可以在大约8小时内尝试所有长度为8的字母数字密码。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接