多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

HashCracker 实战指南:C++23 多线程哈希破解工具中的字典攻击与规则变异攻击

HashCracker 实战指南:C++23 多线程哈希破解工具中的字典攻击与规则变异攻击 【免费下载链接】Cybersecurity-ProjectsBuilding 70 Projects ranging from beginner to advanced so anyone can — learn from, build upon, use as a reference, or even copy directly. Gamified Cybersecurity learning 项目地址https://gitcode.com/gh_mirrors/cy/Cybersecurity-Projects点击查看免费下载HashCracker 是 Cybersecurity-Projects 仓库中一个基于 C23 实现的初学者级多线程哈希破解工具位于 PROJECTS/beginner/hash-cracker支持 MD5、SHA-1、SHA-256、SHA-512 四种哈希算法的字典攻击、暴力破解与规则变异攻击。本文将围绕该项目的演示文档 DEMO.md 展开深入解析其两大核心攻击模式——内存映射字典攻击与规则驱动变异攻击的底层实现原理、CLI 操作方式与工程化细节读完你既能照抄命令完成真实哈希破解演示也能理解10K 词表如何扩展成 20.1M 候选这一规则引擎背后的数学与协程机制。一、从 DEMO.md 出发两大核心攻击模式一览DEMO.md 用一句话概括了工具的用法./install.sh → hashcracker --hash hash --wordlist list并通过两个实战场景定义了文章的讨论范围演示场景技术要点运行效果Dictionary Attack字典攻击内存映射词表扫描、哈希类型自动检测、全核工作分区、实时进度条与 h/s 吞吐量28 线程扫描 10.0K 词表约 0.11 秒破解出 SHA-256 明文password平均吞吐 46.9K h/sRule-Based Mutations规则变异攻击变异规则把 10K 词表扩展为 20.1M 候选逐词应用首字母大写、leet 替换、数字追加、反转、大小写翻转等变换28 线程处理 20.1M 候选约 0.20 秒破解出 SHA-1 明文shadow平均吞吐 5.5M h/s这两个截图dictionary.png 与 rules.png来自项目assets/目录真实展示了两种攻击模式的终端输出。下面分别从实现原理层面拆解它们。二、Dictionary Attack内存映射词表 零竞争线程分区2.1 零拷贝的内存映射文件读取DEMO 强调Memory-mapped wordlist scan。对应实现位于 src/io/MappedFile.cpp 与 src/attack/DictionaryAttack.cpp。词表文件通过mmap直接映射进进程地址空间扫描过程不经过用户态拷贝这也是它能zero-copy处理超大词表的原因。DictionaryAttack::create()的构建流程DictionaryAttack.cpp通过MappedFile::open(path)打开词表并获取data()指针与size()在映射缓冲上逐字节统计\n得到总行数文件末尾无换行时补 1 行按线程数将行数均分余数行分配给编号靠前的线程my_line_count lines_per_thread (thread_index remainder ? 1 : 0)用find_next_newline定位出每个线程的start_offset与end_offset字节区间。next()负责逐行产出候选词DictionaryAttack.cpp从current_offset_扫描到下一个换行符剥离行尾的\r以兼容 Windows 格式词表跳过空行分区耗尽时返回AttackComplete信号。这种设计让每个线程只遍历自己专属的字节区间彼此零竞争正对应 DEMO 中work-partitioned across all cores的描述。2.2 哈希类型自动检测DEMO 提到auto-detected hash type。实现位于 src/hash/HashDetector.cpp先校验输入全部为十六进制字符再按十六进制串长度匹配算法——32 位判定 MD5、40 位判定 SHA-1、64 位判定 SHA-256、128 位判定 SHA-512长度常量定义在 src/config/Config.hpp。非十六进制或长度不在枚举内则返回CrackError::InvalidHash。因此 DEMO 中的 64 位哈希5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8会被自动识别为 SHA-25632 位哈希被识别为 MD540 位被识别为 SHA-1。2.3 引擎如何调度多线程与进度显示src/core/Engine.hpp 中的Engine::crackH, A模板函数驱动整个破解会话线程数取cfg.thread_count为 0 时回落到std::thread::hardware_concurrency()DEMO 截图中显示 28 线程即由此得出用ThreadPool为每个线程创建独立的DictionaryAttack实例各自消费不重叠的分区每个 worker 将候选词交给模板Hasher H如SHA256Hasher计算摘要与目标哈希比对首个命中线程通过SharedState::found原子标志通知其余线程停止候选计数采用线程本地累加、每 1024 次迭代批量冲刷到原子计数器的策略降低原子操作竞争(local_count 0x3FF) 0即 1024 的倍数检查后台std::jthread每 100msconfig::PROGRESS_UPDATE_MS刷新一次进度条实时显示候选进度、h/s 与 ETA这就是 DEMO 截图中的live progress bar and h/s throughput。2.4 字典攻击演示与验证./install.sh hashcracker --hash 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 \ --wordlist wordlists/10k-most-common.txt # ✔ CRACKED: password运行后界面见 dictionary.png显示SHA-256 / Dictionary / 28 threads候选总量 10.0K进度条实时推进最终输出CRACKED: password耗时 00:00.11平均 46.9K h/s。三、Rule-Based Mutations把 10K 词表扩展成 20.1M 候选3.1 七类变异规则与2005 倍扩展的计算DEMO 的核心卖点是10K 词表经规则扩展后产生20.1M 候选。这一数字的底层逻辑来自 src/rules/RuleSet.cpp 中RuleSet::apply_all链式拼接的七类生成器规则函数行为每个词产出数首字母大写capitalize_firstpassword→Password1全大写uppercase_allpassword→PASSWORD1Leet 替换leet_speakpassword→p$$w0rd1追加数字append_digitspass→pass0…pass9991000前置数字prepend_digitspass→0pass…999pass1000反转reversepassword→drowssap1大小写翻转toggle_case大写变小写、小写变大写1合计1111000100011 2005个变异候选/词。10K 词表 × 2005 ≈ 20.05M与 DEMO 截图中显示的 20.1M 总量吻合引擎的total_estimate也是按probe-total() * 2005预估见 Engine.hpp。其中 Leet 替换映射表固定为a→、e→3、i→1、o→0、s→$、t→7定义于 RuleSet.cpp数字追加/前置的上限由 Config.hpp 中的MAX_APPEND_DIGIT与MAX_PREPEND_DIGIT默认 999控制即每词各生成0..999共 1000 个变体。3.2 用 C23 协程生成候选流一个值得注意的实现细节是RuleSet的所有规则方法都是C23std::generator协程通过co_yield逐个产出变异候选见 RuleSet.hpp。apply_all则用co_yield std::ranges::elements_of(...)把七个生成器串联成单一惰性候选流RuleSet.cpp避免为每个词一次性物化全部 2005 个字符串内存占用与扫描速度因此显著优化。3.3 RuleAttack包装字典攻击的变异执行器规则模式并不是独立的扫描逻辑而是在 DictionaryAttack 之上叠加一层变异。见 src/attack/RuleAttack.cppRuleAttack::create()内部先构造一个DictionaryAttack实例同样按线程分区load_next_word()对每个基础词调用RuleSet::apply_all生成全部变异存入mutations_缓冲并把原词本身作为第一个候选RuleAttack.cppnext()依次弹出缓冲中的变异候选缓冲耗尽后拉取下一个字典词若开启chain_rules还会把首轮变异再次套用apply_all产生变异的变异进一步扩大候选空间以吞吐换覆盖率。哈希比对与盐处理--salt支持前置/后置拼接复用 Engine.hpp 的统一 worker 循环。3.4 规则攻击演示与验证hashcracker --hash ed9d3d832af899035363a69fd53cd3be8f71501c \ --wordlist wordlists/10k-most-common.txt --rules # ✔ CRACKED: shadow运行界面见 rules.png显示SHA-1 / Rules / 28 threads候选总量 20.1M实时吞吐一度达到 8.4M h/s最终约 0.20 秒破解出明文shadow。直观对比字典模式同样的 28 线程规则模式把候选规模放大了约 2000 倍却以更高的 h/s 覆盖了远超纯词表的密码形态。规则引擎的正确性由 tests/test_rules.cpp 验证断言capitalize_first(password) Password、leet_speak(password) p$$w0rd、append_digits(pass)恰好产出 1000 项pass0..pass999、apply_all(password)候选数大于 2000并验证RuleAttack会把规则应用到每个字典词、chain_rules模式产出更多候选。四、完整 CLI 参考与安装4.1 安装./install.shinstall.sh按发行版自动安装依赖g/gcc-c、CMake、ninja、libssl/openssl、libboost-program-options以 release preset 构建并把二进制软链接到~/.local/bin/hashcracker。依赖 C23 编译器与 Boost.Program_options。4.2 命令行参数main.cpp 通过boost::program_options解析以下参数参数说明默认值--hash hash目标哈希必填—--type md5\|sha1\|sha256\|sha512\|auto哈希算法auto按十六进制串长度自动识别auto--wordlist, -w path词表路径字典/规则模式必填—--bruteforce, -b启用暴力破解模式关闭--charset lower,upper,digits,special暴力破解字符集可逗号组合lower,digits--max-length N暴力破解最大长度6--rules, -r对字典词应用变异规则关闭--chain-rules规则组合叠加变异再变异关闭--salt value/--salt-position prepend\|append盐值及其拼接位置无盐 /prepend--threads, -t N线程数0表示自动取 CPU 核数0自动--output, -o path将破解结果写入 JSON 文件—其中字符集由build_charset按 token 组装main.cpp对应常量CHARSET_LOWER/UPPER/DIGITS/SPECIAL定义于 Config.hpp。4.3 自带演示哈希README.md 提供了三个可立即复现的哈希Hash类型明文5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8SHA-256password8621ffdbc5698829397d97767ac13db3MD5dragoned9d3d832af899035363a69fd53cd3be8f71501cSHA-1shadow# 纯字典攻击 hashcracker --hash 8621ffdbc5698829397d97767ac13db3 --wordlist wordlists/10k-most-common.txt # 规则变异攻击 hashcracker --hash ed9d3d832af899035363a69fd53cd3be8f71501c --wordlist wordlists/10k-most-common.txt --rules # 暴力破解无词表 hashcracker --hash 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 --bruteforce --charset lower --max-length 8仓库自带三份词表可直接使用wordlists/10k-most-common.txt、wordlists/john-the-ripper.txt与wordlists/mixed_it.txt。五、攻击模式的内部调用链小结从 main.cpp 的dispatch_attack可以看出三种模式的选择逻辑与底层绑定--bruteforce → Engine::crackH, BruteForceAttack --rules → Engine::crackH, RuleAttack 默认 → Engine::crackH, DictionaryAttack而RuleAttack内部又包裹一个DictionaryAttack因此规则攻击天然继承字典攻击的内存映射词表读取与线程分区能力只是在上层多了一道RuleSet::apply_all变异流水线。哈希侧则由dispatch_hasher在MD5Hasher / SHA1Hasher / SHA256Hasher / SHA512Hasher四个具体EVPHasher之间运行时切换main.cpp与auto检测结果一一对应。六、局限与使用边界从实现看本工具是教学与演示导向的破解器使用时需注意验证目标合规只应对自己拥有或明确授权测试的哈希进行破解AGPL-3.0 许可下用于安全研究与学习检测能力有限哈希类型按长度判定无法区分同一长度家族内的变体--type可显式指定规避歧义规则深度受限于chain_rules默认单轮规则约 2005 倍扩展叠加--chain-rules可进一步放大候选空间但以吞吐下降为代价暴力破解空间字符集与--max-length组合是指数级增长过大的参数会显著拉长耗时适合小规模可枚举空间。如需进一步了解背后的密码学概念、架构设计与扩展练习可继续阅读该项目的 learn 系列文档词表、单元测试与 CMake 构建配置均可在 PROJECTS/beginner/hash-cracker 目录下直接查阅与复现。赞分享【免费下载链接】Cybersecurity-ProjectsBuilding 70 Projects ranging from beginner to advanced so anyone can — learn from, build upon, use as a reference, or even copy directly. Gamified Cybersecurity learning 项目地址https://gitcode.com/gh_mirrors/cy/Cybersecurity-Projects点击查看免费下载相关推荐hashcracker 实战指南基于 C23 策略模板架构的多线程哈希破解工具hashcracker 实战指南基于 C23 策略模板架构的多线程哈希破解工具 hashcracker 是 Cybersecurity Projectshash_extender实现哈希长度扩展攻击的工具hash_extender实现哈希长度扩展攻击的工具 在网络安全领域哈希长度扩展攻击是一种利用哈希算法弱点的高效攻击手段。今天我要向大家推荐一个开源项目—网络安全python-mini-projects 之 Zip_Bruter基于多线程字典攻击的 ZIP 加密压缩包爆破工具解析python mini projects 之 Zip_Bruter基于多线程字典攻击的 ZIP 加密压缩包爆破工具解析 本篇文章围绕开源仓库 python m示例工程上一篇ChatGPT微盘股实验终极指南如何同时运行多个AI投资组合实现自动化交易下一篇终极FormKit Schema生成器指南用JSON创建动态表单的10个技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表