密码哈希不会从文件中提取。开膛手约翰 (JtR)并没有真正做到这一点。您可以下载 JtR 的代码以了解它是如何完成的。这是一篇关于如何使用 zip2john 和 rar2john 获取 .zip 和 .rar 文件的所谓“非哈希”信息的小文章:http ://www.cybercrimetech.com/2014/07/how-to-cracking- zip-and-rar-protected.html
为了纠正用词不当,JtR 实际上并没有从文件中“检索散列”。它从文件中提取某些信息,例如,如 rar2john 代码中所述:
输出行格式:
*
* 对于使用“rar -hp ...”选项加密的文件,type = 0
* archive_name:$RAR3$\*type\*hex(salt)\*hex(partial-file-contents):type::
::档案名称
*
* 对于使用“rar -p ...”选项加密的文件,type = 1
* archive_name:$RAR3$\*type\*hex(salt)\*hex(crc)\*PACK_SIZE\*UNP_SIZE\*0\*
archive_name\*offset-for-ciphertext\*method:type::file_name
*
* 或者
*
* 存档名称:$RAR3$\*type\*hex(salt)\*hex(crc)\*PACK_SIZE\*UNP_SIZE\*1\*
十六进制(完整加密文件)\*方法:类型::文件名
因此,如上所示,“密码哈希”没有被提取。此外,完全不相信该文件是“完全”加密的(正如其他回答类似问题的人所建议的那样)。取而代之的是,检索关键的未加密和加密文件项(例如盐)以生成“非散列”。JtR 使用这些项目和各种密码猜测来测试解密。它使用 zip 或 rar 密码散列生成函数从猜测中创建散列,该散列又用于生成加密密钥值。然后使用生成的密钥值对加密文件的一小部分、提取的和明确定义的部分进行测试。
因此,虽然 JtR 不是“提取密码哈希”,可以发送到任何 ol'password-hash-checker-rainbow-table-lookup-thingy,但它正在做下一件最好的事情——提取关键的破解信息。破解的步骤基本上是:1)从密码猜测中生成哈希,2)添加一些额外的步骤来检查解密是成功还是失败(很多失败),以及 3)重复。rar 破解如此困难的原因是每个 rar 文件使用不同的盐,更重要的是,在执行解密测试之前需要大量且可变的哈希迭代次数。较新的 zip 过程类似,但迭代不是可变的——我上次检查过——使它更容易一些。
这是所问的“如何完成”的核心,答案是“你没有”在文件被破解之前获取一个 zip 文件的真实密码哈希。
该问题的 CTF 练习中的示例具有误导性。给定的“散列”可能是为练习准备的简单密码散列,以简化任何 ol' 破解者对学生的破解过程,或者它可能是特定的 zip2john“非散列”,导致相当简单的密码JtR 猜测 - 短,常见,或两者兼而有之。提问者没有提供“哈希”或“哈希文件”来验证任何一种方式。