同形字攻击利用不同文字系统中字符的视觉相似性(例如,拉丁字母 'a' 与西里尔字母 'а')来伪造域名、文件名或其他标识符,诱骗用户相信自己正在与合法来源交互。
huntglyph 提供了检测方案来识别这些欺骗行为,确保数字安全与清晰。
huntglyph 提供多个命令来分析字符串和文件。
text:分析原始文本字符串分析原始文本字符串中是否存在同形字、混合脚本和不可见字符(潜在的隐写来源)。输入可以作为命令参数提供,也可以通过标准输入(stdin)提供。
示例 1 - 分析包含同形字、混合脚本的文本字符串
$ huntglyph text "gооgle.com"
原始: gооgle.com
指示: ↑↑
清理后: google.com
--------------------------------------------------------------------------------------------------------------------------------
详情:
- 位置 2: 'о' (U+00043E, 西里尔文) 是 'o' (U+00006F, 拉丁文) 的同形字。
- 位置 3: 'о' (U+00043E, 西里尔文) 是 'o' (U+00006F, 拉丁文) 的同形字。
警告: 检测到混合脚本: 拉丁文, 西里尔文
警告: 检测到易混淆字符。
总体风险: 高 (得分: 75)
示例 2 - 分析包含零宽空格的文本字符串
$ huntglyph text "helloworld"
原始: helloworld
指示: ↑
清理后: hello world
--------------------------------------------------------------------------------------------------------------------------------
详情:
- 位置 6: 不可见字符 '' (U+00200B)
警告: 检测到不可见字符。
总体风险: 中等 (得分: 25)
示例 3 - 使用管道 (从 stdin 输入)
$ cat demo/suspicious.txt | huntglyph text
示例 4 - 仅输出规范化风险分数 (0.0-1.0) 对于文本字符串
$ huntglyph text "gооgle.com" --risk-score-only
0.75
inspect:详细的逐字符分解以表格形式详细展示字符串或文件中的每个字符,包括其码点、名称、脚本以及任何可疑属性。
示例 1 - 完整检查。包含同形字、混合脚本
$ huntglyph inspect "аррӏе.com"
┌─────┬──────┬────────────┬──────────┬────────────────────────────────┬────────────────────────────────────┐
│ 位 │ 字符 │ 码点 │ 脚本 │ 名称 │ 详情 │
├─────┼──────┼────────────┼──────────┼────────────────────────────────┼────────────────────────────────────┤
│ 1 │ а │ U+000430 │ 西里尔文 │ 西里尔文小写字母 а │ 同形字 'a' (在单词 'аррӏе' 中) │
│ 2 │ р │ U+000440 │ 西里尔文 │ 西里尔文小写字母 р │ 同形字 'p' (在单词 'аррӏе' 中) │
│ 3 │ р │ U+000440 │ 西里尔文 │ 西里尔文小写字母 р │ 同形字 'p' (在单词 'аррӏе' 中) │
│ 4 │ ӏ │ U+0004CF │ 西里尔文 │ 西里尔文小写字母帕洛奇卡 │ 同形字 'l' (在单词 'аррӏе' 中) │
│ 5 │ е │ U+000435 │ 西里尔文 │ 西里尔文小写字母 е │ 同形字 'e' (在单词 'аррӏе' 中) │
│ 6 │ . │ U+00002E │ 通用 │ 句点 │ │
│ 7 │ c │ U+000063 │ 拉丁文 │ 拉丁文小写字母 c │ │
│ 8 │ o │ U+00006F │ 拉丁文 │ 拉丁文小写字母 o │ │
│ 9 │ m │ U+00006D │ 拉丁文 │ 拉丁文小写字母 m │ │
└─────┴──────┴────────────┴──────────┴────────────────────────────────┴────────────────────────────────────┘
警告: 检测到混合脚本: 西里尔文, 拉丁文
警告: 检测到易混淆字符。
总体风险: 高 (得分: 75)
示例 2 - 仅显示可疑字符
$ huntglyph inspect --suspicious-only "helloworld"
┌─────┬──────┬────────────┬────────┬──────────────────┬───────────┐
│ 位 │ 字符 │ 码点 │ 脚本 │ 名称 │ 详情 │
├─────┼──────┼────────────┼────────┼──────────────────┼───────────┤
│ 6 │ │ U+00200B │ 通用 │ 零宽空格 │ 不可见 │
└─────┴──────┴────────────┴────────┴──────────────────┴───────────┘
警告: 检测到不可见字符。
总体风险: 中等 (得分: 25)
scan:扫描文件或目录扫描文件或目录中的可疑字符,并行分析文本文件。 示例 1 - 扫描单个文件
$ huntglyph scan demo/suspicious.txt
文件: demo/suspicious.txt
风险等级: 高 (得分: 100)
脚本: 拉丁文, 西里尔文
第 1 行:
原始: This file contains a suspicious url: gооgle.com
指示: ↑↑ ↑
清理后: This file contains a suspicious url: google.com
--------------------------------------------------------------------------------------------------------------------------------
详情:
- 位置 39: 'о' (U+00043E, 西里尔文) 是 'o' (U+00006F, 拉丁文) 的同形字。
- 位置 40: 'о' (U+00043E, 西里尔文) 是 'o' (U+00006F, 拉丁文) 的同形字。
- 位置 48: 不可见字符 '' (U+00200B)
示例 2 - 扫描目录 (并设置 4 个工作线程以提高性能)
$ huntglyph scan --workers 4 demo
示例 3 - 仅输出目录的最大累积风险分数 (0.0-1.0)
$ huntglyph scan demo --risk-score-only
1.00
review:交互式审查可疑文件扫描文件或目录,并对每个发现的可疑文件提供交互式提示,允许进行详细检查或跳过。
$ huntglyph review demo
以下命令将下载并安装 huntglyph 到系统标准位置。
推荐(用户级别):
安装到 $HOME/.local/bin(Linux/macOS)或用户特定的 bin 目录(Windows)。
curl -sSfL https://raw.githubusercontent.com/gregory-chatelier/huntglyph/main/install.sh | sh
系统全局(需要 sudo):
安装到 /usr/local/bin。
sudo curl -sSfL https://raw.githubusercontent.com/gregory-chatelier/huntglyph/main/install.sh | sh
自定义目录:
使用 INSTALL_DIR 环境变量指定自定义路径。
curl -sSfL https://raw.githubusercontent.com/gregory-chatelier/huntglyph/main/install.sh | INSTALL_DIR=$HOME/bin sh
该工具已针对 RAID 数据集的子集进行了验证,确认了其在识别同形字和零宽空格操控方面的有效性。
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
| 选项 | 描述 | 命令 |
|---|
--format (default, json) | 输出格式。 | text, inspect |
--workers N | 用于扫描的工作线程数。 | scan |
--suspicious-only | 仅在输出表格中显示可疑字符。 | inspect |
--full | 显示不可见字符的完整详情(转义形式)。 | inspect |
--risk-score-only | 仅输出规范化风险分数 (0.0-1.0)。该分数是累积的(最高 100),基于混合脚本 (25)、易混淆字符 (50)、不可见字符 (25) 和隐藏载荷 (100)。对于 'text',是输入的分数。对于 'scan',是所有扫描文件中的最大分数。 | text, scan |
--version | 打印版本信息。 | 所有命令 |