Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
confusable-vision — 793个Unicode TR39未包含的易混淆字符对,全球首个跨脚本数据集,涵盖230种字体和22,000多个字符的字体感知SSIM评分 | Kitploit
工具/GitHubGitHub/paultendo/confusable-vision
OSINT (开源情报)侦察Web安全威胁情报供应链安全论文与研究学习与教育精选资源
GitHubpaultendo/confusable-vision

confusable-vision

793个Unicode TR39未包含的易混淆字符对,全球首个跨脚本数据集,涵盖230种字体和22,000多个字符的字体感知SSIM评分

查看仓库
1156个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

confusable-vision

使用矢量轮廓射线投射进行经验性字形相似度评分。在245种系统字体中渲染Unicode易混淆字符对,直接从字体轮廓(无光栅化)测量结构相似度,并生成带有每个字体连续距离分数的JSON工件。

来自5260万单字符和1.9亿多字符比较的关键结果,涉及22,581个字符和12种书写系统:

  • 249,976个唯一单字符易混淆对,跨越245种字体、12种文字、66个跨文字对。总共764,395个字体级发现。
  • 2,524,275个唯一多字符(双字母)易混淆对,包括rn/m(95种字体中有33个距离低于0.40)和oy/西里尔uk(16种字体)。
  • 每个字体的连续距离分数,而非二元列表。每对在每个字体中有一个测量的射线距离,为下游安全工具提供字体感知的置信度。
  • 比SDF多305%的发现,速度快29%。富化的五层射线签名严格包含SDF的所有发现;SDF独有的对在人工审查中未能复现。

输出直接供给namespace-guard,用于包名、域名和标识符的运行时易混淆检测。

工作原理

RaySpace以36个角度通过字体轮廓投射平行射线,并捕获每个字形的五层信息:交叉计数、交叉位置、交叉角度、ping距离(每次交叉处的笔画宽度)和ping最大值(交叉之间的反白宽度)。这为每个字符在每个字体中生成紧凑的签名。两个签名通过所有五层的加权L1距离进行比较。

三级过滤器级联使得穷举比较可行:

  1. 前进宽度过滤器(15%容差)消除宽度不同的字符对。能剔除63%的候选。
  2. 射线比较(阈值为2.0,对于大字集对收紧至1.0)。再剔除33%。
  3. 仅3.3%的候选存活成为发现。

签名库(294,646+条目跨245种字体;使用--include-uppercase可更多)预先计算一次。然后发现过程在库上作为单线程算术进行,在31分钟内完成5260万对比较,无需工作线程或GPU。

快速开始

root@kitploit:~
npm install

# 1. 构建射线签名库(前提条件,约24分钟)
npx tsx scripts/build-signature-bank.ts

# 1b. 包含大写拉丁字母A-Z(可选)
#     默认库只包含IDNA PVALID码点(小写字母、数字、符号)。使用--include-uppercase添加大写A-Z,
#     对于字体识别和商标视觉比较(大写字形形状重要)很有用。构建器可恢复,所以只计算额外码点。
npx tsx scripts/build-signature-bank.ts --include-uppercase

# 1c. 包含任意码点范围(可选)
npx tsx scripts/build-signature-bank.ts --extra-range=0041-005A

# 2. 单字符发现(22,581个字符,12种文字,约36分钟)
npx tsx scripts/discover-singlechar-sdf.ts --scorer=ray

# 3. 多字符(双字母)发现(676个双字母组,约63分钟)
npx tsx scripts/discover-multichar-sdf.ts --scorer=ray

# 4. 对已知TR39多字符易混淆集评分(约5分钟)
npx tsx scripts/score-multichar-sdf.ts --scorer=ray
旧版SSIM流水线

原始基于SSIM的流水线对跨越230种字体的2650万比较进行了评分。它仍然可用,但所有发现和评分任务已由RaySpace取代。

root@kitploit:~
# TR39易混淆对评分
npx tsx scripts/build-index.ts          # 渲染索引(约160秒,11,370张PNG)
npx tsx scripts/score-all-pairs.ts      # 评分所有对(约65秒,23.5万次比较)

# 新型易混淆发现
npx tsx scripts/build-candidates.ts          # 候选集(约2.3万个字符)
npx tsx scripts/build-index.ts --candidates  # 渲染候选(约40分钟,8.9万张PNG)
npx tsx scripts/score-candidates.ts          # 对照拉丁目标评分(约15分钟,290万次比较)

# 从两个流水线提取高分发现
npx tsx scripts/extract-discoveries.ts

发现了什么

易混淆对排名(单字符,平均距离 < 0.10)

"零距离字体数" = 轮廓产生比特完全相同的射线签名的字体(距离0.000)。拉丁w/西里尔ԝ在所有19种同时包含这两个字形的字体中完全相同。

跨文字突破(单字符)

格鲁吉亚文Coda(U+10FF)与拉丁o、西里尔o和希腊omicron形成一个四向易混淆环,所有距离均低于0.08。

多字符头条结果

oy/西里尔uk 发现是最突出的新发现:拉丁双字母"oy"在Helvetica中与西里尔合体字母uk(ѹ)视觉上完全一致(距离0.000),在Arial Unicode MS中为0.0005。

阈值校准

平均阈值单字符唯一对

三个推荐操作级别:

  • 严格(< 0.50):138个单字符对,接近零误报。适用于自动封锁(IDN注册、包名验证),此时误报有实际成本。
  • 标准(< 1.00):4,174个单字符对,覆盖率和精确度良好。适用于安全工具中的标记和人工审查。
  • 探索(< 2.00):完整发现集。高端存在噪声,但适用于研究、字体审计和构建训练集。

字体查询

查询特定字体存在哪些易混淆对。对于发布新字体的字体设计师、评估系统字体变更的浏览器厂商,或任何为安全敏感场合(如IDN域名)选择显示字体的人有用。

root@kitploit:~
npx tsx scripts/query-font.ts --list-fonts                    # 发现数据中的218种字体
npx tsx scripts/query-font.ts "Arial"                         # Arial的所有对(SSIM >= 0.7)
npx tsx scripts/query-font.ts "Arial" --threshold 0.8         # 仅高置信度
npx tsx scripts/query-font.ts "Arial" --compare "Georgia"     # 通过SSIM差值比较两种字体
npx tsx scripts/query-font.ts "Arial" --json                  # JSON格式供下游处理

字体名称匹配不区分大小写且为子串匹配,因此"arial"匹配Arial、Arial Black和Arial Unicode MS。比较模式按最大SSIM差异排序,首先显示切换字体时哪些对变得更好或更差。

需要评分流水线生成的发现文件(已被git忽略,需在本地重新生成)。

输出

已提交(CC-BY-4.0)

生成文件(已git忽略,运行流水线重新生成)

文件描述
data/output/render-index/渲染的PNG + 索引(SSIM流水线)
data/output/singlechar-sdf-scores.jsonl

进度

  • TR39验证(1,418对,230种字体,SSIM流水线)
  • 新型易混淆发现(从23,317个候选中得到793个高分对,SSIM)
  • 跨文字易混淆扫描(12种ICANN文字,2360万对,563个发现,SSIM)
  • 按字体查询和字体比较
  • RaySpace五层矢量轮廓评分器(取代SDF和SSIM用于发现)
  • 单字符RaySpace发现(249,976个唯一对,245种字体,12种文字)
  • 多字符RaySpace发现(2,524,275个唯一双字母对,245种字体)
  • 使用RaySpace的跨文字发现(比SDF多305%的对,严格超集)
  • 生成confusable-weights-v2.json,包含每对分布记录:均值、p50、p90、字体数、零距离数、零距离占比以及推荐级别(严格/标准/探索)。RaySpace距离替代SSIM。标准阈值下有4,174对。
  • 二进制签名库格式(将273秒加载时间降至数秒)
  • 通过路径对任意字体评分,无需重新运行完整流水线

相关

  • namespace-guard(v0.16.0+)通过confusableDistance({ weights })消费confusable-weights.json,进行基于测量的视觉风险评分
  • REPORT.md:SSIM流水线的完整技术报告(12个章节、按字体分析、附录)

博客文章

关于此项目发现和方法论的文章发布在paultendo.github.io上:

RaySpace方法论和发现:

  • RaySpace: 使用矢量轮廓射线投射测量字形相似度
  • 从CT扫描到易混淆字符:RaySpace背后的已有技术
  • 多字符易混淆:当rn变成m时
  • 25万个易混淆对。其中102个对域名有意义。

SSIM流水线发现:

  • 我将1,418个Unicode易混淆对在230种字体中渲染。大多数对肉眼来说并不易混淆。
  • 793个Unicode字符看起来像拉丁字母但尚未收录在confusables.txt中
  • 28个CJK和韩文字符看起来像拉丁字母
  • 248个跨文字易混淆对,任何标准都未覆盖
  • 快148倍:为跨文字规模重建Unicode扫描流水线
  • 当形状相似度撒谎时:易混淆检测中的尺寸比例伪影
  • 新型DDoS:Unicode易混淆不能欺骗LLM,但能让你的API账单翻5倍

背景

涵盖推动此项目的更广泛问题空间的文章:

  • Unicode标识符欺骗的威胁模型
  • 使Unicode风险可度量
  • 你的LLM读取的是Unicode码点,而非字形。这是一个攻击面。
  • 易混淆检测实际上保护了谁?
  • Unicode提供了一张易混淆映射图。你需要两张。
  • confusables.txt与NFKC在31个字符上存在分歧

许可

  • 代码(src/, scripts/):MIT
  • 生成数据(data/output/):CC-BY-4.0。可自由用于任何目的(包括商业用途),需署名。
  • 署名:Paul Wood FRSA (@paultendo),confusable-vision
下载工具
源目标文字平均字体数零距离字体数
w U+0077ԝ U+051D拉丁-西里尔0.0001919
j U+006Aϳ U+03F3拉丁-希腊0.0132118
i U+0069і U+0456拉丁-西里尔0.0186250
s U+0073ѕ U+0455拉丁-西里尔0.0186246
c U+0063с U+0441拉丁-西里尔0.0196145
o U+006Fо U+043E拉丁-西里尔0.0206144
j U+006Aј U+0458拉丁-西里尔0.0216048
x U+0078х U+0445拉丁-西里尔0.0235950
p U+0070р U+0440拉丁-西里尔0.0246146
e U+0065е U+0435拉丁-西里尔0.0326144
a U+0061а U+0430拉丁-西里尔0.0426145
源目标文字平均字体数
ο U+03BFჿ U+10FF希腊-格鲁吉亚0.0572
ヘ U+30D8へ U+3078片假名-平假名0.12211
丶 U+4E36ヽ U+30FD汉字-片假名0.1259
二 U+4E8Cニ U+30CB汉字-片假名0.24911
口 U+53E3ロ U+30ED汉字-片假名0.26811
双字母目标平均字体数备注
ll॥ U+0965(天城文双段符)0.1768跨文字
oyѹ U+0479(西里尔uk)0.32216新型跨文字双字母易混淆
rnm U+006D0.5319533种字体低于0.40
blы U+044B(西里尔yeru)0.79749跨文字
多字符唯一对
< 0.5013813
< 1.004,1741,631
< 1.5059,700(噪声)
< 2.00249,9762,524,275
文件描述
data/output/confusable-discoveries.json110个TR39对,高SSIM(>= 0.7)或像素完全一致
data/output/candidate-discoveries.json793个不在TR39中的新对,平均SSIM >= 0.7
data/output/confusable-weights.json1,397个加权边,用于namespace-guard集成
data/output/cross-script-discoveries.json563个跨文字易混淆对
data/output/cross-script-summary.json按文字对分类的跨文字摘要
data/output/multichar-discoveries.json多字符易混淆发现
单字符RaySpace分数
data/output/multichar-rayspace-scores.jsonl多字符RaySpace分数
data/output/signature-bank/射线签名库(294,646个条目,7.9GB压缩)