【学习记录】使用 John the Ripper 和 Hashcat破解 RAR、ZIP 与 7z 文件密码(Windows教程)

文章目录

    • 📌 引言
    • 📦 支持类型
    • 🛠️ 所需工具下载地址(Windows 官方编译版)
      • 额外工具
    • 🔐 一、破解RAR 压缩文件密码
      • 步骤 1:获取RAR 文件的加密哈希值
      • 步骤 2:将正确的哈希值复制到 `hash.txt` 文件
      • 步骤 3:在 Hashcat 官方 wiki 查找 `-m` 哈希模式 ID
      • 步骤 4: 使用 Hashcat 破解哈希值
    • 📁 二、破解ZIP 压缩文件密码
      • 步骤 1:提取 ZIP 文件的加密哈希值
      • 步骤 2:将正确的哈希值复制到 `hash.txt` 文件
      • 步骤 3:在 Hashcat 官方 wiki 查找 `-m` 哈希模式 ID
      • 步骤 4:使用 Hashcat 破解 ZIP 哈希值
    • 🗂 三、破解 7z 压缩文件密码
      • 步骤 1:安装 Strawberry Perl
      • 步骤 2:提取 7z 文件的加密哈希值
        • 报错修复:Can't load 'Compress::Raw::Lzma.xs.dll'
      • 步骤 3:将正确的哈希值复制到 `hash.txt` 文件
      • 步骤 4:在 Hashcat 官方 wiki 查找 `-m` 哈希模式 ID
      • 步骤 5:使用 Hashcat 破解 7z 哈希值
    • 📋 示例命令汇总
    • 💡 小结
    • ⚠️ 注意事项

📌 引言

在某些情况下,我们可能需要找回自己或授权范围内文件的压缩密码。例如,RAR、ZIP 或 7z 压缩包被加密后无法访问。本文将详细介绍如何使用 John the RipperHashcat 工具,在 Windows 平台上提取并获取这些加密文件的密码。


📦 支持类型

本教程支持以下文件格式的密码获取:

  • RAR 压缩文件
  • ZIP 压缩文件
  • 7z 压缩文件

🛠️ 所需工具下载地址(Windows 官方编译版)

工具名称功能下载地址
John the Ripper提取加密哈希、字典攻击https://www.openwall.com/john/g/john-1.9.0-jumbo-1-win64.zip
Hashcat高速 GPU 密码破解工具https://hashcat.net/files/hashcat-6.2.7.7z
Strawberry Perl运行 Perl 脚本所需环境https://strawberryperl.com/

额外工具


🔐 一、破解RAR 压缩文件密码

步骤 1:获取RAR 文件的加密哈希值

  1. 下载并解压 john-1.9.0-jumbo-1-win64.zip
  2. 进入 run 目录,找到 rar2john.exe

在 PowerShell 中运行:

rar2john.exe test.rar 

完整的hash值如下图所示:

在这里插入图片描述

步骤 2:将正确的哈希值复制到 hash.txt 文件

  1. 打开记事本或其他文本编辑器。
  2. 将步骤1中获取的哈希值粘贴进去。
  3. 保存文件为 hash.txt

步骤 3:在 Hashcat 官方 wiki 查找 -m 哈希模式 ID

  1. 访问 Hashcat 官方 wiki - Example Hashes

搜索关键词 $rar5$16$,你会看到类似如下信息:

RAR5: hash-mode = 13000 
✅ 表示 RAR5 加密文件应使用 -m 13000

步骤 4: 使用 Hashcat 破解哈希值

hashcat -m 13000 -a 3 hash.txt ?d?d?d?d?d?d?d?d --increment --increment-min=4 --increment-max=8 
-a 3 是掩码攻击模式,表示尝试所有数字组合。

📁 二、破解ZIP 压缩文件密码

步骤 1:提取 ZIP 文件的加密哈希值

  1. 下载并解压 john-1.9.0-jumbo-1-win64.zip
  2. 进入 run 目录,找到 zip2john.exe

在 PowerShell 中运行:

zip2john.exe test.zip 

完整的hash值如下图所示:

在这里插入图片描述

步骤 2:将正确的哈希值复制到 hash.txt 文件

  1. 打开记事本或其他文本编辑器。
  2. 将步骤1中获取的哈希值粘贴进去。
  3. 保存文件为 hash.txt

步骤 3:在 Hashcat 官方 wiki 查找 -m 哈希模式 ID

  1. 访问 Hashcat 官方 wiki - Example Hashes

搜索关键词 $zip2$,你会看到类似如下信息:

 WinZip: hash-mode = 13600 
✅ 表示 ZIP 加密文件应使用 -m 13600

步骤 4:使用 Hashcat 破解 ZIP 哈希值

hashcat -m 13600 -a 3 hash.txt ?d?d?d?d?d?d?d?d --increment --increment-min=4 --increment-max=8 

🗂 三、破解 7z 压缩文件密码

步骤 1:安装 Strawberry Perl

由于 john中的7z2john.pl 是一个 Perl 脚本,我们需要先安装 Perl 环境。推荐使用 Strawberry Perl,因为它包含了所有必要的模块,并且易于安装。

  1. 访问 Strawberry Perl 官方网站
  2. 下载适合你系统的版本(通常是最新稳定版)
  3. 运行安装程序,并按照提示完成安装。

步骤 2:提取 7z 文件的加密哈希值

  1. 下载并解压 john-1.9.0-jumbo-1-win64.zip
  2. 进入 run 目录,找到 7z2john.pl

在 PowerShell 中运行:

perl 7z2john.pl test.7z 

完整的hash值如下图所示:

在这里插入图片描述
报错修复:Can’t load ‘Compress::Raw::Lzma.xs.dll’

如果遇到如下报错:

Can't load 'D:/Desktop/BlackTechnology/strawberry-perl/perl/vendor/lib/auto/Compress/Raw/Lzma/Lzma.xs.dll' for module Compress::Raw::Lzma: load_file: 找不到指定的模块。 at D:/Desktop/BlackTechnology/strawberry-perl/perl/lib/DynaLoader.pm line 206. 

请执行以下操作:

  1. 右键点击 此电脑 / 我的电脑
  2. 选择 属性 > 高级系统设置 > 环境变量
  3. 关闭当前终端窗口,重新打开一个新的 PowerShell 或 CMD。
  4. 再次运行脚本即可解决问题。

编辑 Path,添加以下两个路径(根据你的实际安装路径修改):

D:\Tools\strawberry-perl\perl\bin D:\Tools\strawberry-perl\c\bin 

步骤 3:将正确的哈希值复制到 hash.txt 文件

  1. 打开记事本或其他文本编辑器。
  2. 将步骤2中获取的哈希值粘贴进去。
  3. 保存文件为 hash.txt

步骤 4:在 Hashcat 官方 wiki 查找 -m 哈希模式 ID

  1. 访问 Hashcat 官方 wiki - Example Hashes

搜索关键词 $7z$,你会看到类似如下信息:

7-Zip: hash-mode = 11600 
✅ 表示 7z 加密文件应使用 -m 11600

步骤 5:使用 Hashcat 破解 7z 哈希值

hashcat -m 11600 -a 3 hash.txt ?d?d?d?d?d?d?d?d --increment --increment-min=4 --increment-max=8 

📋 示例命令汇总

文件类型提取哈希命令破解命令
RARrar2john.exe test.rarhashcat -m 12500 -a 3 hash.txt ?d?d?d?d?d?d?d?d
ZIPzip2john.exe test.ziphashcat -m 17220 -a 3 hash.txt ?d?d?d?d?d?d?d?d
7zperl 7z2john.pl test.7zhashcat -m 11600 -a 3 hash.txt ?d?d?d?d?d?d?d?d

💡 小结

通过本文你可以完整掌握:

  • 如何使用 John the Ripper 提取 RAR、ZIP、7z 文件的加密哈希;
  • 如何在 Hashcat 官方 Wiki 查找正确的 -m 模式 ID;
  • 如何编写 Hashcat 命令进行密码破解。
  • 📌 关键点在于:准确识别加密格式并匹配对应的 Hashcat 模式 ID。

⚠️ 注意事项

  • 合法性提醒:请确保你有权访问目标文件,未经授权破解他人文件属违法行为。
  • 性能建议:推荐使用支持 CUDA 或 OpenCL 的 GPU 来加速破解过程。
  • 密码复杂度影响:密码越复杂,破解时间越长。建议结合字典攻击提高效率。
  • 字典攻击更优:如果能获取部分信息(如生日、姓名等),建议使用字典攻击(-a 0)+ 字典文件。

📌 如果你对密码破解技术感兴趣,或者正在学习渗透测试相关知识,这篇文章可以帮助你了解压缩文件密码的提取与破解方法。

💬 欢迎留言交流你在项目中使用这些技术的经验,或者你遇到的相关问题,我们一起探讨安全技术的发展与实践!

Read more

【算法详解】理解KMP,真的那么难吗?—— 一篇讲透它的核心思想

【算法详解】理解KMP,真的那么难吗?—— 一篇讲透它的核心思想

🫧 励志不掉头发的内向程序员:个人主页  ✨️ 个人专栏: 《C++语言》《Linux学习》 🌅偶尔悲伤,偶尔被幸福所完善 👓️博主简介: 文章目录 * 前言 * 一、相关概念 * 二、前缀函数 * 三、计算前缀函数 * 四、用前缀函数解决字符串匹配 * 五、kmp 算法模板 * 六、next 数组版本 * 七、周期和循环节 * 总结 前言 本文用尽量详细的语言来讲解说明 kmp 算法内容,学习之前需要知道一点点动态规划的基础,如果不知道最好去了解了解。我们一起来看看算法吧。 一、相关概念 在学习 kmp 算法之前,我们得先提前了解最基本的 “ 动态规划 ” 的知识,否则可能学习的时候会有一些困难,因为它的原理类似于动态规划。 字符串: * 用字符构成的的序列就是字符串。 这个概念很简单,但是我们这里有个小技巧:就和动态规划那样,

By Ne0inhk
【数据结构与算法】21.合并两个有序链表(LeetCode)

【数据结构与算法】21.合并两个有序链表(LeetCode)

文章目录 * 合并两个有序链表:高效算法解析与实现 * 问题描述 * 核心思路:双指针尾插法 * 完整代码实现 * 关键点解析 * 1. 边界条件处理 * 2. 头节点初始化 * 3. 节点比较与插入 * 4. 剩余节点处理 * 常见错误与修正 * 优化方案:哨兵节点 * 算法应用场景 * 总结 * 总结 合并两个有序链表:高效算法解析与实现 链表合并是数据结构中的经典问题,在算法面试和实际开发中经常出现。本文将深入解析如何高效合并两个有序链表,并展示C语言的实现方案。 问题描述 给定两个升序排列的链表list1和list2,要求将它们合并为一个新的升序链表并返回。新链表应该通过拼接给定链表的节点来完成。 示例: 输入:list1 = [1,2,4], list2 = [1,3,4] 输出:[1,1,2,3,4,4] 核心思路:

By Ne0inhk
Flutter 三方库 collection — 鸿蒙应用全方位集合操作与算法增强利器,实现鸿蒙深度适配下的高效容器过滤与优先级队列实战全解析(适配鸿蒙 HarmonyOS Next ohos)

Flutter 三方库 collection — 鸿蒙应用全方位集合操作与算法增强利器,实现鸿蒙深度适配下的高效容器过滤与优先级队列实战全解析(适配鸿蒙 HarmonyOS Next ohos)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net。 Flutter 三方库 collection — 鸿蒙应用全方位集合操作与算法增强利器,实现鸿蒙深度适配下的高效容器过滤与优先级队列实战全解析 前言 在鸿蒙(OpenHarmony)应用开发中,数据结构的选择往往决定了逻辑的成败。当标准的 List、Set、Map 无法满足更高级的需求(例如:需要一个自动按优先级排序的任务队列,或者需要判断两个深度嵌套的 Map 是否完全一致)时,开发者就需要引入更强大的集合支持。 collection 是 Dart 官方维护的最核心基础库之一。它不仅补充了大量缺失的容器类型(如 PriorityQueue、Heap),还为原生集合提供了极其丰富的扩展工具类(如 ListEquality、CanonicalizedMap)。在 Flutter for OpenHarmony 的底层架构实践中,它是处理复杂业务逻辑、优化检索效率的必备“基石”。 一、原理解析 / 概念介绍

By Ne0inhk
【数据结构】常见时间复杂度以及空间复杂度

【数据结构】常见时间复杂度以及空间复杂度

时间复杂度与空间复杂度 * 一、复杂度的概念 * 二、时间复杂度 * 1、大O的渐进表示法 * 2、函数clock计算运算时间 * 3、常见复杂度对比 * 3.1常数项复杂度 * 3.2线性时间复杂度 * 案例1 * 案例2 * 3.3平方阶复杂度 * 3.4对数复杂度 * 3.5递归函数 * 单递归 * 双递归 * 三、空间复杂度 * 冒泡排序O(1) * 三个反置O(N) 一、复杂度的概念 * 一个算法的好坏,主要是对比两者的时间和空间两个维度,也就是时间和空间复杂度。 * 时间复杂度主要衡量一个算法运行的快慢,空间复杂度主要衡量一个算法运行需要的额外空间 二、时间复杂度 * 算法的时间复杂度是一个函数式T(N),算法中的基本操作的执行次数,为算法的时间复杂度。 * 注:编译器的不同,编译所需要的时间也不同。越新的编译器,编译的时间往往比旧的编译器快 * 当一个算法函数式为T(

By Ne0inhk