BrandonRoos/hashdetect
GitHub: BrandonRoos/hashdetect
一款基于长度和结构特征识别常见哈希类型的命令行工具,按置信度排序候选结果并输出对应的 hashcat 和 John the Ripper 格式信息。
Stars: 0 | Forks: 0
# hashdetect
一款命令行工具,通过长度和结构来识别常见的哈希类型,按置信度对候选结果进行排序,并支持将结果导出为 JSON。
给定一个未知的哈希值,`hashdetect` 会告诉你它最可能是什么 —— 并且,由于许多哈希类型具有相同的格式,它会显示*所有*合理的匹配项,并根据每种类型在实际中的常见程度进行排序。它还会为每个匹配项打印 [hashcat](https://hashcat.net/hashcat/) 模式和 [John the Ripper](https://www.openwall.com/john/) 格式,以便你可以直接从识别阶段过渡到破解工作流。
## 功能
- 检测 9 种常见的哈希类型:MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512、NTLM、MD4 和 bcrypt。
- 按置信度对有歧义的匹配项进行排序(例如,一个 32 字符的十六进制字符串可能是 MD5、NTLM 或 MD4 —— 这三种都会显示出来,并按可能性从高到低排序)。
- 默认输出人类可读格式;使用 `--json` 输出机器可读的 JSON。
- 接受单个哈希、包含哈希的文件,或通过 stdin 传入的管道输入。
- 为每个匹配项打印 hashcat 模式和 John the Ripper 格式。
- 提供正确的退出代码,可在 shell 脚本中使用。
## 安装说明
要求 Python 3.10 或更高版本。
```
# 克隆仓库
git clone https://github.com/BrandonRoos/hashdetect.git
cd hashdetect
# 创建并激活虚拟环境
python -m venv .venv
# Windows (PowerShell):
.\.venv\Scripts\Activate.ps1
# macOS / Linux:
source .venv/bin/activate
# 安装依赖(仅在运行测试时需要)
pip install -r requirements.txt
```
该工具本身仅使用 Python 标准库,因此运行它不需要任何额外的依赖项。
## 用法
### 识别单个哈希
```
python -m hashdetect 5f4dcc3b5aa765d61d8327deb882cf99
```
```
Possible matches for 5f4dcc3b5aa765d61d8327deb882cf99:
- MD5 (confidence 60%, length 32, hashcat 0, john raw-md5)
- NTLM (confidence 30%, length 32, hashcat 1000, john nt)
- MD4 (confidence 10%, length 32, hashcat 900, john raw-md4)
```
### 从文件读取哈希
每行一个哈希:
```
python -m hashdetect -f hashes.txt
```
### 从 stdin 读取(管道)
```
# macOS / Linux
cat hashes.txt | python -m hashdetect
# Windows PowerShell
type hashes.txt | python -m hashdetect
```
### JSON 输出
在上述任何命令中添加 `--json` 以获取结构化输出:
```
python -m hashdetect 5f4dcc3b5aa765d61d8327deb882cf99 --json
```
```
[
{
"input": "5f4dcc3b5aa765d61d8327deb882cf99",
"matches": [
{ "name": "MD5", "confidence": 0.6, "length": 32, "hashcat_mode": 0, "john_format": "raw-md5" },
{ "name": "NTLM", "confidence": 0.3, "length": 32, "hashcat_mode": 1000, "john_format": "nt" },
{ "name": "MD4", "confidence": 0.1, "length": 32, "hashcat_mode": 900, "john_format": "raw-md4" }
]
}
]
```
### 帮助
```
python -m hashdetect --help
```
## 工作原理
检测通过两种方式进行:
1. **结构匹配。** 具有独特格式的哈希 —— 例如 bcrypt 的 `$2b$12$...` 格式 —— 会通过正则表达式进行匹配,以捕获其确切结构。这些匹配是明确无误的。
2. **长度和字符集匹配。** 大多数原始哈希只是固定长度的十六进制字符串。例如,一个 64 字符的十六进制字符串可能是 SHA-256,但也可能是 SHA3-256、BLAKE2s 等。`hashdetect` 会返回每一个符合特征的匹配项并对它们进行排序。
置信度是根据分配给每种哈希类型的*流行度*分数(即它在实际中出现的频率)计算得出的。每个匹配项的置信度是其流行度除以所有匹配类型的流行度总和,因此对于给定的输入,这些分数的总和始终为 100%。
## 退出代码
| 代码 | 含义 |
|------|---------|
| 0 | 找到至少一个匹配项(或 JSON 模式,该模式始终返回 0) |
| 1 | 没有已知的哈希类型与输入匹配(文本模式) |
| 2 | 未提供输入(无哈希、无 `-f`、无管道 stdin) |
## 限制
`hashdetect` 通过**格式而非内容**来识别哈希。它无法验证某个字符串是否真正是给定类型的哈希 —— 只能根据长度和模式判断它*可能*是。一个 32 字符的十六进制字符串会被报告为可能的 MD5,是因为它的格式正确,而不是因为工具已确认它是由 MD5 生成的。请将输出视为一组排序后的假设,而不是确切的答案。
## 运行测试
```
pytest
```
## 免责声明
本工具旨在用于合法的安全工作 —— 渗透测试、取证、CTF 和教育 —— 且仅限于您拥有或被授权测试的系统和数据。您有责任遵守所有适用的法律。
## 许可证
本项目基于 MIT 许可证授权 —— 有关详情,请参阅 [LICENSE](LICENSE) 文件。
标签:DOS头擦除, Python, 哈希识别, 安全规则引擎, 密码破解, 无后门, 逆向工具