00johndoe/password_cracker

GitHub: 00johndoe/password_cracker

一款轻量级纯 Python 密码哈希破解工具,提供字典、暴力、规则和混合四种攻击模式,适用于 CTF 竞赛、渗透测试和密码强度审计等安全研究场景。

Stars: 0 | Forks: 0

# ================================================================================ PYPASSWORDCRACKER 一个用于安全研究、渗透测试和 CTF 挑战的 Python 密码哈希破解工具。 使用 Python 3 编写。 作者 : John Doe GitHub : 语言 : Python 3.8+ 许可证 : MIT 版本 : 1.0.0 ⚠ 法律声明:此工具仅用于经过授权的安全测试。 仅限在您拥有或获得明确测试许可的系统与哈希上使用。 未经授权的使用是违法行为。完整免责声明请参阅第 14 节。 ## 目录 1. 概述 2. 功能 3. 系统要求 4. 安装说明 5. 快速入门 6. 攻击模式 6.1 字典攻击 6.2 暴力破解 6.3 基于规则的攻击 6.4 混合攻击 6.5 批量攻击 7. 实用命令 7.1 hashit — 对明文密码进行哈希 7.2 identify — 识别哈希类型 7.3 gen — 生成字典 8. 支持的哈希算法 9. 字符集 10. 变异规则(规则引擎) 11. 性能指南 12. 输出与进度显示 13. 项目结构 14. 法律免责声明与道德规范 15. 许可证 1. 概述 PyPasswordCracker 是一个完全基于 Python 标准库(加上可选的用于彩色输出的 colorama)构建的命令行密码哈希破解工具。它实现了专业渗透测试人员和安全研究人员使用的四种经典攻击策略: • 字典攻击 — 使用字典中的已知/常见密码进行测试 • 暴力破解 — 枚举所有可能的字符组合 • 基于规则的攻击 — 对字典中的单词应用智能变异(黑客语、大小写更改、后缀) • 混合攻击 — 将字典与暴力破解的后缀/前缀相结合 它支持 MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 和 bcrypt 哈希,并且可以根据哈希长度自动检测算法。 典型用例: - CTF(夺旗赛)竞赛挑战 - 在实验室环境中审计密码强度 - 从内部学习哈希破解的工作原理 - 从您自己的系统中恢复遗忘的密码 - 测试您的哈希算法和加盐方案是否足够安全 2. 功能 攻击模式 ──────────── [+] 字典攻击 — 逐行读取字典,每秒处理数百万个单词 [+] 暴力破解 — 系统性枚举,可配置字符集和长度范围 [+] 基于规则的攻击 — 每个单词生成 100+ 种变异:大小写变体、黑客语、数字后缀、追加年份、反转、双写和前缀注入 [+] 混合攻击 — 将字典单词与可配置的暴力破解后缀和/或前缀组合 [+] 批量破解 — 读取包含多个哈希的文件,全部破解并报告找到的结果 哈希支持 ──────────── [+] MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 [+] bcrypt (需要:pip install bcrypt) [+] 根据哈希长度/前缀自动检测算法 可用性 ───────── [+] 实时旋转进度指示器,显示速率(哈希/秒)和最近尝试的候选值 [+] 根据哈希长度自动检测算法 — 无需 --algo [+] 批量模式 — 一次破解整个包含哈希的文件 [+] 内置字典生成器(组合式,支持任意字符集) [+] hashit 子命令 — 使用任何受支持的算法对任何明文进行哈希 [+] identify 子命令 — 根据哈希字符串猜测算法 [+] 整洁的 JSON 友好型结果输出 [+] 带有颜色的终端输出(CRITICAL / found / not-found) [+] 优雅的 Ctrl+C 处理 — 在中断时显示统计信息 架构 ──────────── [+] 纯 Python — 无 C 扩展,无编译模块 [+] 单文件设计 — 可放置在任何运行 Python 的地方 [+] 模块化:RuleEngine、Cracker、Progress、LivePrinter 均可独立导入并在您自己的脚本中使用 3. 系统要求 运行时 ─────── Python 3.8 或更高版本 必装依赖 ───────────────── colorama >= 0.4.6 (彩色输出) pip install colorama 可选依赖 ───────────────── bcrypt >= 4.0.0 (支持 bcrypt 哈希) pip install bcrypt 该工具支持优雅降级 — 如果缺少 colorama,输出将为纯文本。 如果缺少 bcrypt,将跳过或不支持 bcrypt 哈希,并给出明确的错误提示。 操作系统支持 ────────── Linux、macOS、Windows — 任何带有 Python 3.8+ 的平台 4. 安装说明 通过源码安装 ─────────── ``` git clone https://github.com/00johndoe/pypasswordcracker.git cd pypasswordcracker # Minimal install pip install colorama # With bcrypt support pip install colorama bcrypt # Verify python3 cracker.py --help ``` 单文件使用 ───────────────── cracker.py 没有编译组件。只需将其复制到任何安装了 Python 3.8+ 和 colorama 的机器上即可直接运行。 推荐的字典 ───────────────────── 该工具在进行字典/规则/混合攻击时需要字典文件。常用的选项有: ``` rockyou.txt — 14 million real passwords from the 2009 RockYou breach Available at: https://github.com/brannondorsey/naive-hashcat or via: wget https://github.com/brannondorsey/naive-hashcat/ releases/download/data/rockyou.txt SecLists — Collection of wordlists for security testing https://github.com/danielmiessler/SecLists Generate your own: python3 cracker.py gen --output mini.txt \ --charset lower+d --min-len 3 --max-len 5 ``` 5. 快速入门 步骤 1:创建测试哈希 ``` python3 cracker.py hashit --password "secret" --algo md5 # Output: 5f4dcc3b5aa765d61d8327deb882cf99 ``` 步骤 2:使用字典攻击破解 ``` python3 cracker.py dict \ --hash 5f4dcc3b5aa765d61d8327deb882cf99 \ --wordlist rockyou.txt ``` 步骤 3:如果字典中没有,尝试规则攻击 ``` python3 cracker.py rules \ --hash 5f4dcc3b5aa765d61d8327deb882cf99 \ --wordlist rockyou.txt ``` 步骤 4:最后手段 — 暴力破解(对于长密码速度较慢) ``` python3 cracker.py brute \ --hash 5f4dcc3b5aa765d61d8327deb882cf99 \ --algo md5 --charset lower+d --max-len 6 ``` 自动检测算法(不需要 --algo): ``` python3 cracker.py dict \ --hash 5f4dcc3b5aa765d61d8327deb882cf99 \ --wordlist rockyou.txt --auto ``` 6. 攻击模式 ───────────────────────────────────────────────────────────────────────────── 6.1 字典攻击 ───────────────────────────────────────────────────────────────────────────── 将字典文件中的每一行原样与目标哈希进行比对。 对于常见密码而言这是最快的攻击方式。适用于: - 在已知数据泄露库中找到的密码 - 弱密码或默认密码 - 未经修改的常见单词 语法: python3 cracker.py dict --hash --wordlist [选项] 选项: --hash 目标哈希字符串(必填) --algo 哈希算法:md5 sha1 sha256 sha512 等(如果省略并使用了 --auto,则根据哈希长度自动检测) --auto 自动检测算法 --wordlist 字典文件路径(必填) --encoding 文件编码(默认:utf-8) 示例: # 自动检测算法的 MD5 python3 cracker.py dict \ --hash 5f4dcc3b5aa765d61d8327deb882cf99 \ --wordlist rockyou.txt --auto ``` # SHA-256, explicit algo python3 cracker.py dict \ --hash e3b0c44298fc1c149afb... \ --algo sha256 --wordlist /usr/share/wordlists/rockyou.txt # Latin-1 encoded wordlist python3 cracker.py dict \ --hash --wordlist rockyou.txt --encoding latin-1 ``` 性能:500,000 – 5,000,000 候选/秒(取决于硬件) ───────────────────────────────────────────────────────────────────────────── 6.2 暴力破解 ───────────────────────────────────────────────────────────────────────────── 在长度范围内尝试所有可能的字符组合。 只要密码在配置的搜索空间内,就一定能找到。 适用于短密码(≤6 个字符)。密码越长,耗时呈指数级增长。 语法: python3 cracker.py brute --hash [选项] 选项: --hash 目标哈希(必填) --algo 算法(如果使用 --auto 或省略则自动检测) --charset 要枚举的字符集(参见第 9 节,默认:lower+d) --min-len 最小候选长度(默认:1) --max-len 最大候选长度(默认:6) --prefix 附加到所有候选者前面的固定字符串(例如 "user") --suffix 附加到所有候选者后面的固定字符串 示例: # 所有小写字母 + 数字,最长 5 个字符 python3 cracker.py brute \ --hash 5f4dcc3b5aa765d61d8327deb882cf99 \ --algo md5 --charset lower+d --max-len 5 ``` # Digits only, exactly 4 chars (PIN cracking) python3 cracker.py brute \ --hash --algo sha256 \ --charset digits --min-len 4 --max-len 4 # Known prefix "admin" + 3-char suffix python3 cracker.py brute \ --hash --algo md5 \ --charset alnum --min-len 3 --max-len 3 --prefix "admin" ``` 组合计数: charset=lower+d (36 个字符): max-len=4 → 1,727,604 种组合 max-len=5 → 62,193,780 种组合 max-len=6 → 2,238,976,116 种组合 charset=digits (10 个字符): max-len=4 → 11,110 种组合 charset=alnum (62 个字符): max-len=4 → 15,018,570 种组合 ───────────────────────────────────────────────────────────────────────────── 6.3 基于规则的攻击 ───────────────────────────────────────────────────────────────────────────── 对字典中的每个单词应用一组变异规则,为每个单词生成约 100+ 种变体。 这是针对“几乎”存在于字典中的密码(例如,由 "password" 派生出的 "P@ssw0rd1")最有效的攻击方式。 语法: python3 cracker.py rules --hash --wordlist [选项] 对每个单词应用的变异: • 大小写变体: lower / upper / capitalize / title / swapcase • 黑客语: a→@ e→3 i→1 o→0 s→$ l→1 t→7 b→8 • 反转: "password" → "drowssap" • 双写: "dog" → "dogdog" • 常见数字后缀: 1 12 123 1234 12345 99 00 • 符号后缀: ! !! . * • 年份后缀: 1970–2025 • 常见前缀: 1 ! the my mr ms • 去除数字前缀/后缀 示例: python3 cracker.py rules \ --hash --algo sha256 \ --wordlist rockyou.txt ``` python3 cracker.py rules \ --hash --wordlist /usr/share/wordlists/rockyou.txt \ --encoding latin-1 ``` 性能:约 50,000 – 500,000 候选/秒(由于需要生成变体,比字典攻击慢 100 倍,但能覆盖更多现实中的密码)。 ───────────────────────────────────────────────────────────────────────────── 6.4 混合攻击 ───────────────────────────────────────────────────────────────────────────── 将字典单词与系统生成的后缀和/或前缀相结合。例如,尝试将列表中的每个单词附加所有 2 位数字的组合:"password01"、"password02" …… "password99"。 语法: python3 cracker.py hybrid --hash --wordlist [选项] 选项: --suffix-len 暴力破解后缀的长度(默认:3) --prefix-len 暴力破解前缀的长度(默认:0) --charset 暴力破解部分的字符集(默认:digits) 示例: # 单词 + 2位数字后缀(从 word00 到 word99) python3 cracker.py hybrid \ --hash --wordlist rockyou.txt \ --suffix-len 2 --charset digits ``` # Word + 3-char lowercase suffix python3 cracker.py hybrid \ --hash --wordlist words.txt \ --suffix-len 3 --charset lower # 1-digit prefix + word (1password, 2password, ...) python3 cracker.py hybrid \ --hash --wordlist words.txt \ --prefix-len 1 --suffix-len 0 --charset digits ``` ───────────────────────────────────────────────────────────────────────────── 6.5 批量攻击 ───────────────────────────────────────────────────────────────────────────── 破解来自文件中的哈希列表(每行一个哈希)。每个哈希都会独立地与字典进行比对。除非指定了 --algo,否则将自动检测每个哈希的算法。 语法: python3 cracker.py batch --file --wordlist [选项] 选项: --file 包含哈希(每行一个)的文件路径(必填) --wordlist 字典文件(必填) --algo 强制所有哈希使用单一算法(可选) --mode dict | rules | dict+rules(默认:dict+rules) --encoding 字典编码 输入文件格式 (hashes.txt): 5f4dcc3b5aa765d61d8327deb882cf99 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 e3b0c44298fc1c149afb4c8996fb92427ae41e4... 示例: # 使用 dict + rules 破解所有 MD5 哈希 python3 cracker.py batch \ --file hashes.txt --wordlist rockyou.txt ``` # Dictionary only (faster), forced sha256 python3 cracker.py batch \ --file hashes.txt --wordlist rockyou.txt \ --algo sha256 --mode dict ``` 输出显示每个哈希的 已破解/总数 计数: [1/5] 5f4dcc3b5aa765... algo: md5 ✔ CRACKED password [2/5] abc123def456... algo: sha256 ✘ NOT FOUND 7. 实用命令 ───────────────────────────────────────────────────────────────────── 7.1 hashit — 对明文密码进行哈希 ───────────────────────────────────────────────────────────────────────────── 语法: python3 cracker.py hashit --password --algo 示例: python3 cracker.py hashit --password "hunter2" --algo md5 python3 cracker.py hashit --password "MyP@ssw0rd" --algo sha256 python3 cracker.py hashit --password "correct horse" --algo sha512 输出: Plaintext: hunter2 Algorithm: md5 Hash: 2ab96390c7dbe3439de74d0c9b0b1767 ───────────────────────────────────────────────────────────────────────────── 7.2 IDENTIFY — 识别哈希类型 ───────────────────────────────────────────────────────────────────────────── 根据字符串长度和前缀猜测哈希算法。 语法: python3 cracker.py identify --hash 示例: python3 cracker.py identify --hash 5f4dcc3b5aa765d61d8327deb882cf99 # → md5 (长度 32) ``` python3 cracker.py identify --hash $2b$12$... # → bcrypt ``` 长度 → 算法映射: 32 个字符 → MD5 40 个字符 → SHA-1 56 个字符 → SHA-224 64 个字符 → SHA-256 96 个字符 → SHA-384 128 个字符 → SHA-512 $2b$... 前缀 → bcrypt ───────────────────────────────────────────────────────────────────────────── 7.3 gen — 生成字典 ───────────────────────────────────────────────────────────────────────────── 通过枚举特定长度范围内字符集的所有组合来生成字典文件。适用于创建有针对性的小字典或自定义暴力破解输入文件。 语法: python3 cracker.py gen --output [选项] 选项: --output 输出文件路径(必填) --charset 字符集(默认:lower+d) --min-len 最小单词长度(默认:1) --max-len 最大单词长度(默认:4) --append 附加到现有文件而不是覆盖它 示例: # 所有 3-4 个字符的小写+数字组合(约 170 万个单词) python3 cracker.py gen --output custom.txt \ --charset lower+d --min-len 3 --max-len 4 ``` # All 4-digit PINs python3 cracker.py gen --output pins.txt \ --charset digits --min-len 4 --max-len 4 # All 6-char lowercase (26^6 = 308M — will prompt confirmation) python3 cracker.py gen --output big.txt \ --charset lower --min-len 6 --max-len 6 ``` 注意:当文件条目超过约 1000 万条时,写入前会提示确认。 8. 支持的哈希算法 算法 哈希长度 备注 ─────────── ───────────────────────────────────────────────────────────────── MD5 32 位十六进制字符 速度快但在密码学上已被破解。在较旧的数据库和 CTF 挑战中非常常见。 SHA-1 40 位十六进制字符 已被弃用不建议用于安全领域。在一些遗留系统中仍然存在。 SHA-224 56 位十六进制字符 截断版的 SHA-256。不常见。 SHA-256 64 位十六进制字符 现代标准。用于 Linux shadow 文件、PBKDF2 以及许多 Web 框架中。 SHA-384 96 位十六进制字符 较大的 SHA-2 变体。 SHA-512 128 位十六进制字符 最大的 SHA-2 变体。安全性高但破解速度较慢。 bcrypt $2b$... 前缀 在设计上属于内存密集型。破解极其缓慢。需要:pip install bcrypt 自动检测: 在任何单哈希命令中传入 --auto,工具就会根据哈希长度自动检测算法,从而无需使用 --algo。 重要限制: - 本工具不支持带盐的哈希(例如来自 /etc/shadow 的 "$6$salt$hash"),除非您手动分离并处理盐值。 - 未内置 NTLM、LM 和 Windows 特定的哈希格式。 - PBKDF2、Argon2 和 scrypt 需要自定义实现。 9. 字符集 名称 字符 数量 ────────────────────────────────────────────────────────────────── lower a-z 26 upper A-Z 26 alpha a-zA-Z 52 digits 0-9 10 alnum a-zA-Z0-9 62 lower+d a-z + 0-9 ← 暴力破解的默认值 36 common a-z + digits + !@#$. 41 symbols 所有可打印 ASCII 字符 94 自定义字符集: 直接传入原始字符串以代替命名集合: --charset "abc123!?" (工具会直接将此字符串作为字符集使用。) 按用例推荐: PIN 码恢复 → digits (长度 4-6,速度非常快) 简单密码 → lower+d (长度 ≤5,时间可控) 复杂密码 → 规则攻击通常比暴力枚举 alnum 效果更好 CTF 十六进制字符串 → digits + abcdef 10. 变异规则(规则引擎) 基于规则的攻击会对每个基础单词调用 RuleEngine.generate(word)。 会应用以下变异(每个单词生成约 100+ 种变体): 大小写变异 ────────────── original → "password" lowercase → "password" uppercase → "PASSWORD" capitalize → "Password" title case → "Password" swapcase → "PASSWORD" / "pASSWORD" 黑客语替换 ──────────────────────── a → @ e → 3 i → 1 o → 0 s → $ l → 1 t → 7 b → 8 ``` "password" → "p@$$w0rd" "password" → "P@$$w0rd" (+ capitalize) ``` 反转 ──────── "password" → "drowssap" "password" → "Drowssap" (+ capitalize) 双写 ──────── "dog" → "dogdog" "dog" → "dogdog" (小写) 数字后缀 ────────────── 应用于单词 / 小写 / 首字母大写形式: 1 12 123 1234 12345 99 00 符号后缀 ─────────────── ! !! . * 年份后缀(1970–2025) ───────────────────────── "summer" + "2023" → "summer2023" "summer" + "2024" → "summer2024" 等等。 常见前缀 ─────────────── 1 ! the my mr ms RuleEngine 可以作为独立的类导入: from cracker import RuleEngine for variant in RuleEngine.generate("admin"): print(variant) 11. 性能指南 典型速度(Python 3.12,现代 CPU,单线程): ``` MD5 ~4,000,000 – 8,000,000 hashes/sec SHA-1 ~3,000,000 – 6,000,000 hashes/sec SHA-256 ~1,500,000 – 3,000,000 hashes/sec SHA-512 ~ 800,000 – 1,500,000 hashes/sec bcrypt ~ 10 – 50 hashes/sec (by design — very slow) ``` 最大化性能建议: 1. 优先使用字典攻击 — 它是最快的模式 2. 对于暴力破解,尽量使用较短的 max-len(每增加 1 个字符,时间就会乘以字符集大小 — 在使用 lower+d 时,max-len=7 大约需要 800 亿次尝试) 3. 基于规则的攻击比纯字典攻击慢 10-100 倍,但能找到更多的密码 4. 避免对 bcrypt 进行暴力破解 — 在标准硬件上,对于超过 4 个字符的密码在计算上是不可行的 bcrypt 注意事项: 一个 cost factor 为 12 的 bcrypt 哈希在 Python 中每次尝试大约需要 250ms。 以 4 次哈希/秒的速度计算,对 6 个字符的纯小写字母进行暴力破解大约需要 3 亿年。请仅使用有针对性的字典。 扩展技巧: - 以分割的字典范围运行多个实例 - 对于严格的破解任务,请使用 GPU 加速工具(hashcat、JohnTR),它们可通过 CUDA/OpenCL 实现 10-1000 倍的加速 12. 输出与进度显示 实时进度行(运行时原地更新): ⠋ dictionary tried: 4,521 rate: 892,340/s last: password123 成功时的结果: ✔ PASSWORD CRACKED! Hash: 5f4dcc3b5aa765d61d8327deb882cf99 Plaintext: password Mode: dictionary Tried: 4,521 Rate: 892,340 hashes/sec Elapsed: 0.005s 失败时的结果: ✘ Password not found. Mode: brute-force Tried: 2,238,976,116 Rate: 3,142,880 hashes/sec Elapsed: 712.4s 批量模式输出(按哈希): [1/10] 5f4dcc3b5aa765... algo: md5 ✔ CRACKED password [2/10] aabbccdd1122... algo: sha256 ✘ NOT FOUND ... Batch results: 7 / 10 cracked 13. 项目结构 pypasswordcracker/ ├── cracker.py 主工具(单文件,包含所有逻辑) ├── README.txt 本文件 └── LICENSE MIT 许可证 cracker.py 内部的主要组件: ``` ALGOS Dict mapping algo names to (hashlib_fn, hex_length) CHARSETS Dict mapping charset names to character strings detect_algo() Guess algorithm from hash length/prefix hash_password() Hash a plaintext string with given algorithm verify() Check if candidate matches target hash RuleEngine Generates 100+ mutation variants per base word .generate(word) → Iterator[str] Progress Thread-safe attempt counter with rate tracking LivePrinter Spinning in-place terminal progress display Cracker All attack mode implementations .dictionary() → (result, stats) .bruteforce() → (result, stats) .rules() → (result, stats) .hybrid() → (result, stats) .batch() → {hash: result} generate_wordlist() Write combinatorial wordlist to file main() / argparse Subcommand CLI dispatcher ``` 在您自己的代码中使用这些组件: from cracker import Cracker, hash_password, verify, RuleEngine ``` c = Cracker() result, stats = c.dictionary( target="5f4dcc3b5aa765d61d8327deb882cf99", algo="md5", wordlist_path="rockyou.txt" ) ``` 14. 法律免责声明与道德规范 ⚠ 使用本工具前请阅读本声明 本软件仅供教育及经过授权的安全测试目的使用。 允许的用途: ✔ 破解您自己的密码哈希(例如,您自己创建但忘记了明文的哈希) ✔ 获得书面授权的渗透测试项目 ✔ CTF(夺旗赛)竞赛挑战 ✔ 受控实验室环境中的学术研究 ✔ 安全意识培训和演示 ✔ 测试您自己的密码存储实现的强度 禁止的用途: ✘ 破解您不拥有或未获得书面测试授权的系统的哈希 ✘ 未经同意破解用户凭据 ✘ 任何违反《计算机欺诈和滥用法》(CFAA)、英国《计算机滥用法》、欧盟 NIS 指令或您所在司法管辖区同等法律的任何活动 ✘ 为未经授权访问任何系统、账户或数据提供便利 责任声明: 作者对本软件的任何非法、不道德或有害使用不承担任何责任。运行本工具即表示您接受全部责任,确保您的使用符合所有适用的法律和法规。 密码存储提醒: 如果此工具帮助您了解了哈希破解,请将这一知识用于建设性的方面:始终使用带有盐的适当 KDF(密钥派生函数,例如 bcrypt、Argon2 或 PBKDF2)来存储密码。切勿在生产系统中存储 MD5 或无盐的 SHA 密码哈希。 15. 许可证 MIT License Copyright (c) 2026 John Doe 特此免费授予任何获得本软件副本和相关文档文件(“软件”)的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、再授权和/或售卖本软件的权利,再授权和/或出售本软件的副本,以及在遵守以下条件的情况下,允许拥有本软件的人员这样做: 上述版权声明和本许可声明应包含在本软件的所有副本或大部分内容中。 本软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途的适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其他交易而引起的、与之相关的任何索赔、损害或其他责任承担任何责任,无论是在合同诉讼、侵权行为还是其他方面。 # ================================================================================ README 结束
标签:bcrypt, CTF工具, DOS头擦除, MD5, PoC, Python, SHA-1, SHA-256, SHA-512, SysWhispers, VEH, 哈希识别, 字典攻击, 字列表生成器, 密码字典, 密码安全, 密码破解, 攻击路径可视化, 无后门, 暴力破解, 混合攻击, 漏洞搜索, 用户模式钩子绕过, 网络安全, 规则攻击, 逆向工具, 隐私保护, 黑客工具