Kaperf/Password-Cracker-in-python
GitHub: Kaperf/Password-Cracker-in-python
一个使用纯 Python 编写的教学型密码哈希破解工具,用于演示字典攻击、暴力破解、掩码及彩虹表等密码恢复原理。
Stars: 0 | Forks: 0
# Python 密码破解工具
一个使用 Python 编写的教育性命令行密码破解项目。
该应用程序演示了如何使用多种恢复技术来测试密码哈希:
* 字典攻击,
* 暴力破解,
* 掩码攻击,
* 彩虹表。
创建该项目是为了在 Python 中实践面向对象编程、生成器、文件处理、命令行界面、哈希算法和基本密码学概念。
## 功能
### 字典攻击
程序从字典中读取密码,而不会将整个文件加载到内存中。
可选的变异包括:
* 首字母大写,
* 转换为大写,
* 常见数字后缀,
* 常见符号后缀,
* 基本的 leetspeak 替换。
生成的变体示例:
```
password
Password
PASSWORD
password1
password123
p@ssword
```
### 暴力破解
暴力破解模式使用以下参数生成所有可能的密码:
* 可配置的字符集,
* 最小密码长度,
* 最大密码长度。
该实现还包含以下方法:
* 计算总 keyspace,
* 将索引转换为密码,
* 将密码转换为其对应的索引。
这些方法稍后可用于检查点保存以及在多个进程之间划分 keyspace。
### 掩码攻击
掩码模式允许用户描述密码的预期结构。
支持的掩码标记:
| 标记 | 含义 |
| ----- | ----------------------- |
| `?u` | 大写字母 |
| `?l` | 小写字母 |
| `?d` | 数字 |
| `?s` | 特殊字符 |
| `?a` | 任意支持的字符 |
掩码示例:
```
?u?l?l?l?d?d
```
此掩码生成包含以下内容的密码:
1. 一个大写字母,
2. 三个小写字母,
3. 两个数字。
也可以使用字面字符:
```
Admin?d?d
```
这将生成如下候选密码:
```
Admin00
Admin01
Admin02
...
Admin99
```
### 彩虹表
该项目包含一个教育性的彩虹表实现。
它支持:
* 生成密码链,
* 将哈希还原为密码候选,
* 存储链端点,
* 以 JSON 格式保存表,
* 加载先前生成的表,
* 重构链,
* 使用目标哈希搜索密码。
每个彩虹表都存储描述以下内容的元数据:
* 哈希算法,
* 字符集,
* 密码长度,
* 链长度。
元数据必须与攻击配置相匹配。
### 支持的哈希算法
* MD5
* SHA-1
* SHA-224
* SHA-256
* SHA-384
* SHA-512
* SHA3-224
* SHA3-256
* SHA3-384
* SHA3-512
### Salt 支持
该应用程序支持放置可选的 salt:
* 在密码之前,
* 在密码之后。
示例:
```
salt + password
```
```
password + salt
```
### 攻击统计
该应用程序会记录:
* 已测试的候选者数量,
* 用时,
* 当前候选密码,
* 计算出的哈希率,
* 已知 keyspace 时的预计进度,
* 预计剩余时间。
可配置的时间限制可用于自动停止攻击。
## 项目状态
该项目目前处于**开发中**。
主要的攻击算法和面向对象的架构已经实现。某些部分仍需要额外的测试、重构和集成。
当前有效的攻击模式中暂不支持并行处理。
使用 Python 的 `multiprocessing` 模块的实验性 `ParallelAttackManager` 已启动,但要将其正确集成以实现:
* 共享停止事件,
* 进程安全的统计数据,
* 任务分发,
* 结果队列,
* 优雅的进程终止
比预期的要复杂得多。出于这个原因,并行执行被推迟了,目前仍然是一个重要的待办事项。
## 环境要求
* Python 3.10 或更高版本
* 不需要外部 Python 包
该项目仅使用 Python 标准库中的模块,包括:
* `argparse`,
* `hashlib`,
* `itertools`,
* `multiprocessing`,
* `pathlib`,
* `secrets`,
* `json`,
* `time`。
## 安装说明
克隆仓库:
```
git clone https://github.com/Kaperf/Password-Cracker-in-python.git
```
进入项目目录:
```
cd Password-Cracker-in-python
```
显示可用参数:
```
python main.py --help
```
在某些系统上,该命令可能是:
```
python3 main.py --help
```
## 用法
通用命令结构:
```
python main.py \
--hash \
--algorithm \
--mode \
[OPTIONS]
```
可用的攻击模式:
```
dictionary
bruteforce
mask
rainbow
```
## 字典攻击示例
创建或获取一个包含候选密码的字典文件。
运行字典攻击:
```
python main.py \
--hash 25f43b1486ad95a1398e3eeb3d83bc4010015fcc9bedb35b432e00298d5021f7 \
--algorithm sha256 \
--mode dictionary \
--wordlist ./wordlist.txt
```
启用变异和 leetspeak 替换:
```
python main.py \
--hash 25f43b1486ad95a1398e3eeb3d83bc4010015fcc9bedb35b432e00298d5021f7 \
--algorithm sha256 \
--mode dictionary \
--wordlist ./wordlist.txt \
--mutations
```
示例哈希代表为演示目的而创建的测试密码。
## 暴力破解示例
以下命令搜索长度在 1 到 3 个字符之间的小写密码:
```
python main.py \
--hash 77af778b51abd4a3c51c5ddd97204a9c3ae614ebccb75a606c3b6865aed6744e \
--algorithm sha256 \
--mode bruteforce \
--charset abcdefghijklmnopqrstuvwxyz \
--min-length 1 \
--max-length 3
```
示例目标密码为:
```
cat
```
可以使用更小的字符集以加快测试速度:
```
python main.py \
--hash ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad \
--algorithm sha256 \
--mode bruteforce \
--charset abc \
--min-length 1 \
--max-length 3
```
## 掩码攻击示例
搜索包含一个大写字母、三个小写字母和两个数字的密码:
```
python main.py \
--hash 176344d4b7feeec6e6cdc05ac78b35496367bb0620d2b24292dd7c26cda6e550 \
--algorithm sha256 \
--mode mask \
--mask "?u?l?l?l?d?d"
```
示例目标密码为:
```
Test12
```
建议在掩码两侧加上引号,因为某些 shell 会解释特殊字符。
## Salt 示例
测试由以下内容创建的哈希:
```
password + salt
```
```
python main.py \
--hash \
--algorithm sha256 \
--mode dictionary \
--wordlist ./wordlist.txt \
--salt example-salt \
--salt-position after
```
对于:
```
salt + password
```
使用:
```
--salt-position before
```
## 彩虹表示例
生成包含的测试表:
```
python generate_test_table.py
```
该脚本:
1. 创建一个小型的 SHA-256 彩虹表,
2. 将其保存为 `test_rainbow_table.json`,
3. 打印测试密码和哈希,
4. 打印生成链的起始点和端点。
在彩虹表模式中使用打印出的哈希:
```
python main.py \
--hash \
--algorithm sha256 \
--mode rainbow \
--rainbow-table test_rainbow_table.json \
--charset abc
```
字符集必须与彩虹表中存储的元数据相匹配。
## 命令行参数
| 参数 | 描述 |
| ----------------- | ----------------------------------------------- |
| `--hash` | 目标密码哈希 |
| `--algorithm` | 哈希算法 |
| `--mode` | 选定的攻击模式 |
| `--wordlist` | 字典文件的路径 |
| `--charset` | 暴力破解模式中使用的字符 |
| `--min-length` | 最小候选长度 |
| `--max-length` | 最大候选长度 |
| `--mask` | 掩码模式中使用的密码结构 |
| `--mutations` | 启用字典变异 |
| `--salt` | 可选的 salt |
| `--salt-position` | 将 salt 放置在密码之前或之后 |
| `--time-limit` | 最大攻击持续时间(秒) |
| `--rainbow-table` | 已保存的彩虹表文件路径 |
| `--processes` | 保留用于未来的并行处理支持 |
## 输出示例
```
Password has been found: cat
Attack mode: bruteforce
Attempts: 2074
Elapsed time: 0.01 seconds
Hash rate: 207400.00 hashes/second
```
执行时间和哈希率取决于计算机、Python 版本、所选的算法和候选空间。
## 架构
该应用程序使用模块化的面向对象结构。
| 组件 | 职责 |
| ----------------------- | --------------------------------------------- |
| `CrackTarget` | 存储并验证目标哈希 |
| `Crackoptions` | 存储并验证攻击配置 |
| `PasswordHasher` | 生成密码哈希 |
| `CandidateTester` | 测试单个密码候选 |
| `ProgressStats` | 跟踪尝试、时间和进度 |
| `CrackResult` | 存储并格式化最终结果 |
| `BaseAttack` | 定义攻击的通用接口 |
| `DictionaryAttack` | 执行字典攻击 |
| `BruteForce` | 执行暴力破解 |
| `MaskAttack` | 根据掩码生成候选 |
| `ReductionFunction` | 将哈希转换为彩虹链候选 |
| `RainbowChain` | 生成并重构单个链 |
| `RainbowTable` | 存储并加载彩虹表数据 |
| `RainbowTableGenerator` | 创建彩虹表 |
| `RainbowTableAttack` | 搜索彩虹表 |
| `PasswordCracker` | 选择并启动请求的攻击 |
| `CLIParser` | 解析命令行参数 |
| `ParallelAttackManager` | 实验性 multiprocessing 管理器 |
## 简化程序流程
```
CLIParser
|
v
CrackTarget + Crackoptions
|
v
PasswordCracker
|
v
PasswordHasher + CandidateTester
|
v
Selected attack implementation
|
v
CrackResult
```
## 教育目标
该项目演示了:
* 面向对象编程,
* 继承和抽象类,
* 类型注解,
* Python 生成器,
* 笛卡尔积,
* 命令行参数解析,
* 文件流,
* JSON 序列化,
* 密码哈希,
* 验证和错误处理,
* 基本性能测量,
* 彩虹表概念,
* 对 multiprocessing 的初步实验。
## 限制
* 该程序使用纯 Python 编写,未针对高性能破解进行优化。
* 并行执行尚未完成。
* 彩虹表仅适用于生成期间使用的确切算法、字符集、密码长度和还原函数。
* 彩虹表不适用于受唯一 salt 保护的哈希。
* 该项目不支持现代密码存储算法,例如 Argon2、bcrypt 或 scrypt。
* 该项目不应被视为专业审计工具的替代品。
* 某些模块仍需要额外的自动化测试和重构。
## 待办事项
* [ ] 将 `ParallelAttackManager` 与暴力破解集成。
* [ ] 为字典攻击和掩码攻击添加 multiprocessing 支持。
* [ ] 实现进程安全的进度统计。
* [ ] 为暴力破解添加检查点和恢复支持。
* [ ] 添加自动化单元测试。
* [ ] 为命令行界面添加集成测试。
* [ ] 添加不同哈希算法的基准测试结果。
* [ ] 改进异常处理和面向用户的错误消息。
* [ ] 重构模块和类名,以遵循一致的 Python 命名规范。
* [ ] 将项目迁移到 Python 包结构中。
* [ ] 添加使用 GitHub Actions 的持续集成。
### 并行编程待办事项
尝试使用 Python 的 `multiprocessing` 模块进行并行编程。
已经创建了一个初步的进程管理器,但完整的集成被推迟了,因为正确同步 worker、在找到密码后停止所有进程以及收集共享统计数据带来了额外的复杂性。
因此,当前的实现使用的是单进程。完成并集成并行执行被计划为未来的改进。
## 可能的未来改进
* Python 和 C 实现之间的基准比较,
* 可配置的变异规则,
* 用户自定义的掩码字符集,
* 彩虹表重复和冲突统计,
* 二进制彩虹表存储,
* 攻击期间刷新的进度显示,
* 可导出的 JSON 或 CSV 攻击报告,
* 暂停和恢复功能,
* 配置文件,
* 更广泛的文档。
## 作者
由 **Kaperf** 创建,作为 Python 和网络安全的教育作品集项目。
标签:DOS头擦除, Homebrew安装, PoC, Python, SysWhispers, VEH, 字典攻击, 密码学, 密码破解, 手动系统调用, 无后门, 暴力破解, 用户模式钩子绕过, 逆向工具