0x3444/dedup

GitHub: 0x3444/dedup

一个用于密码破解的单词列表去重工具,通过维护主列表与过滤列表避免重复计算。

Stars: 0 | Forks: 0

# dedup 一个用于密码破解工作流的单词列表去重工具。维护一个**主**列表,记录你针对特定 engagements 尝试过的每一个单词,并输出一个**过滤**列表,仅包含真正全新的单词。 其核心思想很简单:不要浪费 GPU 时间对已经尝试过的单词重新进行哈希计算。 ## 安装 ``` git clone https://github.com/diGiCTF/dedup.git cd dedup ./install.sh # installs to ~/.local/bin (no sudo) # 或 ./install.sh --system # installs to /usr/local/bin (sudo) # 或 ./install.sh --prefix /opt/tools ``` 安装过程中会询问两个问题: 1. **dedup 应将单词列表存储在哪里?**(默认:`~/.dedup`)— 实际保存到 `~/.config/dedup/config`,因此无论你在何处 `cd`,每次调用 `dedup` 都会解析到同一目录。 2. **添加 `dcd` Shell 辅助工具?**(默认:是)— 在你的 `~/.bashrc` 或 `~/.zshrc` 中追加 `dcd() { cd "$(dedup -p)"; }`,这样你就可以通过 `dcd` 快速跳转到单词列表目录。 非交互式安装: ``` ./install.sh --dir ~/.dedup --no-dcd -y ``` 安装程序会在选定的 `bin` 目录中创建一个名为 `dedup` 的符号链接,因此你可以从任何位置调用它: ``` dedup -m ncl2026 new_list.txt ``` 若要卸载,请运行 `./install.sh --uninstall`(如果安装时使用了 `--system` 或 `--prefix`,请一并添加相应参数)。 ## 使用 ``` dedup [options] dedup -l [] [-d ] dedup -p dedup --set-path dedup --normalize [] [--case ] ``` | 标志 | 描述 | |------|------| | `-m`, `--master ` | 命名空间引用。每个 engagement 应有独立的主文件。默认:`default`。 | | `-d`, `--dir ` | 主文件/过滤文件的目录。仅覆盖当前调用的默认解析路径。 | | `-l`, `--locate [name]` | 指定名称时:打印主文件路径到标准输出(便于脚本调用)。无名称时:列出 `` 中的所有命名空间及其行数和大小写模式。若命名主文件不存在则退出非零。 | | `-p`, `--path` | 打印当前解析的 dedup 目录(错误输出中包含源注释)。 | | `--set-path ` | 将 `` 持久化设置为默认 dedup 目录(写入 `~/.config/dedup/config`)。 | | `--case ` | 大小写归一化模式:`lower`(默认)、`upper`、`proper`、`preserve`。 | | `-L` / `-U` / `-P` / `-K` | 分别对应 `--case lower` / `upper` / `proper` / `preserve` 的短选项。 | | `--force-case` | 覆盖命名空间元数据中记录的大小写模式(否则大小写不匹配会报错)。 | | `--normalize [name]` | 使用记录的大小写(或 `--case` 指定的)就地重写主文件。归一化后去重。 | | `-q`, `--quiet` | 抑制摘要输出。 | | `-h`, `--help` | 显示帮助信息。 | | `-` | 从标准输入读取新的单词列表。 | ### 目录解析优先级 每次调用 dedup 按以下优先级解析 dedup 目录: 1. `-d ` — 每次调用的覆盖路径 2. `$DEDUP_DIR` — 环境变量 3. `~/.config/dedup/config` — 持久化配置(由安装程序或 `--set-path` 写入) 4. 当前目录 — 最后备选 ### 定位主文件 ``` # 打印特定主文件的路径(标准输出仅为路径 — 可脚本化) dedup -l ncl2026 # → /home/user/.dedup/dedup_ncl2026_master.txt # 在管道中使用 wc -l "$(dedup -l ncl2026)" grep -i admin "$(dedup -l ncl2026)" # 保护子句:“我是否已启动此命名空间?” if dedup -l ncl2026 >/dev/null 2>&1; then echo "exists"; fi # 列出目录中的每个命名空间 dedup -l # NAMESPACE CASE LINES PATH # ncl2026 lower 14203 /home/user/.dedup/dedup_ncl2026_master.txt # client_acme proper 8821 /home/user/.dedup/dedup_client_acme_master.txt ``` ### 生成的文件 对于给定的引用名称,`` 中会包含三个文件: - `dedup__master.txt` — 你通过该命名空间提交过的每一个唯一单词的累计历史。 - `dedup__filtered.txt` — 与上一次运行的**差值**:仅包含在主文件中不存在的单词。这是你应提交给 hashcat 的内容。 - `dedup__master.meta` — 命名空间元数据(目前仅包含大小写模式)。由系统自动管理,可手动安全编辑。 ## 大小写归一化 默认情况下,`dedup` 在比较和存储前会将每行转换为小写。这意味着 `PRESIDENT47`、`President47` 和 `president47` 都会合并为 `president47`,从而确保你获得一个干净、一致的单词列表供后续工具使用。 ### 模式 | 模式 | 短标志 | 效果 | |---|---|---| | `lower` | `-L` | 对整行应用 `tolower`(默认) | | `upper` | `-U` | 对整行应用 `toupper` | | `proper` | `-P` | 先 `tolower`,再将首字母大写(`president47` → `President47`) | | `preserve` | `-K` | 保持原样;比较时区分大小写 | ``` # 默认 — 不区分大小写 + 清除小写主文件 dedup -m ncl2026 list.txt # 区分大小写:将 Password1 和 password1 视为不同单词 dedup -m ncl2026 -K list.txt # 适当大小写 — 用于基于名称的列表 dedup -m starwars -P names.txt ``` ### 每个命名空间仅支持一种模式 首次写入会锁定该命名空间的大小写模式到 `dedup__master.meta`。后续运行必须匹配——如果尝试混用模式,`dedup` 会因大小写不匹配而报错: ``` Error: namespace 'ncl2026' is recorded as case=lower but --case upper was requested. Pass --force-case to change it, or run: dedup --normalize ncl2026 --case upper ``` 这可防止因单个标志错误而静默污染采用不同大小写约定构建的主文件。 ### 迁移或切换命名空间 若要更改现有命名空间的大小写模式(或清理在大小写元数据存在之前构建的主文件),请使用 `--normalize`: ``` # 使用记录的案例重写主文件(转换后去重) dedup --normalize ncl2026 # 或一次性切换到新的案例模式 dedup --normalize ncl2026 --case proper ``` 主文件会被原子重写,在新大小写规则下重复的条目会被移除,元文件也会更新。 ### 查看命名空间的大小写模式 `dedup -l` 现在会显示大小写列: ``` NAMESPACE CASE LINES PATH ncl2026 lower 14203 /home/user/.dedup/dedup_ncl2026_master.txt starwars proper 812 /home/user/.dedup/dedup_starwars_master.txt legacy - 4120 /home/user/.dedup/dedup_legacy_master.txt ``` `CASE` 列中的 `-` 表示尚未存在元文件(无元数据的主文件);运行 `--normalize` 可采用相应模式。 ## 工作流:NCL 密码破解 适用于 NCL 赛季或 CTF 参与的典型场景。 ### 1. 种子主文件 用你已经尝试过(或计划跳过)的列表初始化主文件: ``` dedup -m ncl2026 /wordlists/rockyou.txt ``` 主文件现在包含 rockyou。在首次运行时,不会有过滤输出——因为主文件中尚无内容可供比对。 ### 2. 过滤新的主题化单词列表 当出现新的挑战时,你可以构建一个主题化列表——例如应用常见变形的星球大战角色名: ``` dedup -m ncl2026 starwars_leet.txt ``` `dedup_ncl2026_filtered.txt` 现在仅包含在 rockyou 中不存在的星球大战相关变形单词。将其提交给 hashcat: ``` hashcat -m 1000 hashes.txt dedup_ncl2026_filtered.txt \ -r /rules/OneRuleToRuleThemAll.rule ``` ### 3. 将已破解的密码回填主文件 当 hashcat 破解出明文后,将这些密码加入主文件,避免将来重复尝试: ``` hashcat -m 1000 hashes.txt --show | cut -d: -f2- | dedup -m ncl2026 - ``` ### 4. 重复处理每个新挑战 每个新的单词列表都会与不断增长的主文件进行比对。随着一个赛季推进,`filtered.txt` 会持续缩小,仅保留全新候选词,hashcat 运行时间也会随之缩短。 ## 命名空间 使用 `-m` 保持不同 engagements 隔离: - `-m ncl2026` — 当前 NCL 赛季 - `-m client_acme` — 客户渗透测试 - `-m ctf_htb` — HTB 靶机 各命名空间互不干扰:对客户 A 尝试过的单词不会跳过客户 B 的处理。 ## 管理存储目录 安装程序会在 `~/.config/dedup/config` 中设置一个持久化目录。任何时候都可查看或修改: ``` # 显示当前解析的目录(及原因) dedup -p # → /home/user/.dedup # (来源:配置) ← 标准错误 # 切换到不同的目录(例如移动到新的 CTF 工作区) dedup --set-path ~/ctfs/ncl2026 # 一次性覆盖,不修改配置 DEDUP_DIR=/tmp/throwaway dedup -m scratch list.txt dedup -d /some/other/dir -m scratch list.txt ``` 如果在安装时选择了 `dcd` 辅助工具,你可以从任意 Shell 跳转到该目录: ``` dcd # cd into whatever `dedup -p` resolves to ``` ## 输出示例 ``` ====================================== Filtered unique lines saved to: /home/user/.dedup/dedup_ncl2026_filtered.txt ====================================== Case mode: lower Already in master: 14203 Duplicates within input: 47 New unique lines added: 1829 Master updated: /home/user/.dedup/dedup_ncl2026_master.txt ``` - **大小写模式** — 输入行在比较前应用了哪种归一化。 - **已在主文件中** — 若不使用本工具,这些单词会被重复尝试。 - **输入中的重复项** — 新单词列表本身在归一化后包含重复项。 - **新增唯一行数** — 过滤文件的大小及追加到主文件的条目数量。 ## 注意事项 - 默认大小写模式为 `lower` — `PRESIDENT47` 与 `president47` 会合并为一条。可通过 `-K`(保留)、`-U`、`-P` 或 `--case <>` 在每次调用中覆盖。 - 原子化主文件更新:运行中途崩溃不会损坏主文件。 - 支持 TTY 模式:交互时输出带 ANSI 颜色,通过管道时输出纯文本。 - 通过 `-` 从标准输入读取,因此可与 `hashcat --show`、`cut`、`awk`、`sort -u` 等工具组合使用。
标签:Cutter, DOS头擦除, GPU 加速, meg, SEO 工具, Shell 脚本, XML 请求, 信息安全, 关键词优化, 单词表, 单词过滤, 单词追踪, 去重, 去重工具, 命名空间, 安全开发, 密码学, 密码安全, 密码破解, 工具安装, 应用安全, 手动系统调用, 数据展示, 文本处理, 红队, 网络调试, 自动化, 词典处理, 路径管理