Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
confusable-vision — 793 pares confundíveis ausentes do Unicode TR39, conjunto de dados cross-script inédito no mundo, pontuação SSIM com consciência de fonte em 230 fontes e mais de 22.000 caracteres | Kitploit
Ferramentas/GitHubGitHub/paultendo/confusable-vision
OSINT (Inteligência de Fontes Abertas)ReconhecimentoSegurança WebInteligência de AmeaçasSegurança da Cadeia de SuprimentosPapers e PesquisaAprendizado e EducaçãoRecursos Curados
GitHubpaultendo/confusable-vision

confusable-vision

793 pares confundíveis ausentes do Unicode TR39, conjunto de dados cross-script inédito no mundo, pontuação SSIM com consciência de fonte em 230 fontes e mais de 22.000 caracteres

Ver Repositório
115há 6 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

confusable-vision

Pontuação empírica de similaridade de glifos usando raycasting de contorno vetorial. Renderiza pares de caracteres confusáveis Unicode em 245 fontes do sistema, mede a similaridade estrutural diretamente dos contornos das fontes (sem rasterização) e produz artefatos JSON com pontuações de distância contínua por fonte.

Resultados principais de 52,6 milhões de comparações de caracteres únicos e 190 milhões de comparações de múltiplos caracteres em 22.581 caracteres e 12 sistemas de escrita:

  • 249.976 pares confusáveis únicos de caractere único em 245 fontes, 12 scripts, 66 pares entre scripts. 764.395 descobertas totais no nível da fonte.
  • 2.524.275 pares confusáveis únicos de múltiplos caracteres (bigramas) incluindo rn/m em 95 fontes (33 abaixo da distância 0,40) e oy/Cirílico uk em 16 fontes.
  • Pontuações de distância contínua por fonte, não listas binárias. Cada par tem uma distância de raio medida por fonte, fornecendo confiança consciente da fonte para ferramentas de segurança downstream.
  • 305% mais descobertas que SDF, 29% mais rápido. A assinatura de raio de cinco camadas enriquecida é um superconjunto estrito das descobertas do SDF; pares exclusivos do SDF não se replicaram sob revisão manual.

A saída alimenta diretamente namespace-guard para deteção de confusáveis em tempo de execução em nomes de pacotes, nomes de domínio e identificadores.

Como funciona

O RaySpace emite raios paralelos através de contornos de fontes em 36 ângulos e captura cinco camadas de informação por glifo: contagens de cruzamento, posições de cruzamento, ângulos de cruzamento, distâncias ping (largura do traço em cada cruzamento) e ping max (largura do contador entre cruzamentos). Isso produz uma assinatura compacta por caractere por fonte. Duas assinaturas são comparadas com uma distância L1 ponderada em todas as cinco camadas.

Um filtro em cascata de três estágios torna a comparação exaustiva tratável:

  1. Filtro de largura de avanço (tolerância de 15%) elimina pares com larguras de caractere diferentes. Remove 63% dos candidatos.
  2. Comparação de raios (limiar 2,0, apertado para 1,0 para pares de scripts grandes). Remove outros 33%.
  3. Apenas 3,3% dos candidatos sobrevivem para se tornarem descobertas.

O banco de assinaturas (294.646+ entradas em 245 fontes; mais com --include-uppercase) é pré-calculado uma vez. A descoberta então é executada como aritmética single-threaded no banco, completando 52,6 milhões de comparações de pares em 31 minutos sem threads de trabalho ou GPU.

Início rápido

root@kitploit:~
npm install

# 1. Construir o banco de assinaturas de raios (pré-requisito, ~24 min)
npx tsx scripts/build-signature-bank.ts

# 1b. Incluir maiúsculas Latin A-Z (opcional)
#     Por padrão, o banco inclui apenas codepoints IDNA PVALID (minúsculas,
#     dígitos, símbolos). Use --include-uppercase para adicionar maiúsculas A-Z,
#     útil para identificação de fontes e comparação visual de marcas registadas
#     onde as formas de glifos maiúsculos importam. O construtor é retomável,
#     então isto apenas calcula os codepoints adicionais.
npx tsx scripts/build-signature-bank.ts --include-uppercase

# 1c. Incluir intervalos arbitrários de codepoints (opcional)
npx tsx scripts/build-signature-bank.ts --extra-range=0041-005A

# 2. Descoberta de caractere único (22.581 chars, 12 scripts, ~36 min)
npx tsx scripts/discover-singlechar-sdf.ts --scorer=ray

# 3. Descoberta de múltiplos caracteres (bigramas) (676 bigramas, ~63 min)
npx tsx scripts/discover-multichar-sdf.ts --scorer=ray

# 4. Pontuar confusáveis multi-char conhecidos do TR39 (~5 min)
npx tsx scripts/score-multichar-sdf.ts --scorer=ray
Pipeline SSIM legado

O pipeline original baseado em SSIM pontuou 26,5 milhões de comparações em 230 fontes. Permanece funcional, mas é substituído pelo RaySpace para todas as tarefas de descoberta e pontuação.

root@kitploit:~
# Pontuação de pares confusáveis do TR39
npx tsx scripts/build-index.ts          # Índice de renderização (~160s, 11.370 PNGs)
npx tsx scripts/score-all-pairs.ts      # Pontuar todos os pares (~65s, 235K comparações)

# Descoberta de confusáveis inéditos
npx tsx scripts/build-candidates.ts          # Conjunto de candidatos (~23K chars)
npx tsx scripts/build-index.ts --candidates  # Renderizar candidatos (~40min, 89K PNGs)
npx tsx scripts/score-candidates.ts          # Pontuar contra alvos Latinos (~15min, 2,9M comparações)

# Extrair descobertas de alta pontuação de ambos os pipelines
npx tsx scripts/extract-discoveries.ts

O que encontrou

Principais pares confusáveis (caractere único, distância média < 0,10)

"Zeros" = fontes onde os contornos produzem assinaturas de raio bit-identicas (distância 0.000). Latino w/Cirílico ԝ é idêntico em todas as 19 fontes que contêm ambos os glifos.

Avanços entre scripts (caractere único)

O Georgiano Coda (U+10FF) forma um anel confusável de quatro vias com o Latino o, o Cirílico o e o Grego omicron, todos abaixo da distância 0.08.

Resultados principais de múltiplos caracteres

A descoberta oy/uk Cirílico é o destaque inédito: o bigrama Latino "oy" é visualmente idêntico à letra digráfica Cirílica uk (ѹ) a uma distância de 0.000 em Helvetica e 0.0005 em Arial Unicode MS.

Calibração de limiares

Três níveis operacionais recomendados:

  • Estrito (< 0.50): 138 pares de caractere único, falsos positivos quase nulos. Adequado para bloqueio automático (registo IDN, validação de nomes de pacotes) onde falsos positivos têm custo real.
  • Padrão (< 1.00): 4.174 pares de caractere único, bom equilíbrio entre cobertura e precisão. Adequado para sinalização e revisão manual em ferramentas de segurança.
  • Exploratório (< 2.00): Conjunto completo de descobertas. Contém ruído no limite superior, mas útil para pesquisa, auditoria de fontes e construção de conjuntos de treino.

Consulta de fontes

Consulte quais pares confusáveis existem para uma fonte específica. Útil para designers de fontes a lançar um novo tipo de letra, fornecedores de navegadores a avaliar uma alteração de fonte do sistema, ou qualquer pessoa a escolher uma fonte de exibição para contextos sensíveis à segurança, como domínios IDN.

root@kitploit:~
npx tsx scripts/query-font.ts --list-fonts                    # 218 fontes nos dados de descoberta
npx tsx scripts/query-font.ts "Arial"                         # Todos os pares para Arial (SSIM >= 0.7)
npx tsx scripts/query-font.ts "Arial" --threshold 0.8         # Apenas alta confiança
npx tsx scripts/query-font.ts "Arial" --compare "Georgia"     # Diferenciar duas fontes pelo delta SSIM
npx tsx scripts/query-font.ts "Arial" --json                  # JSON para processamento downstream

A correspondência de nomes de fontes é insensível a maiúsculas/minúsculas e substring, então "arial" corresponde a Arial, Arial Black e Arial Unicode MS. O modo de comparação ordena pelas maiores diferenças de SSIM primeiro, revelando exatamente quais pares melhoram ou pioram ao trocar de fontes.

Requer os ficheiros de descoberta do pipeline de pontuação (gitignored, regenerar localmente).

Saída

Cometidos (CC-BY-4.0)

Gerados (gitignored, executar pipeline para regenerar)

FicheiroDescrição
data/output/render-index/

Progresso

  • Validação TR39 (1.418 pares, 230 fontes, pipeline SSIM)
  • Descoberta de confusáveis inéditos (793 pares de alta pontuação de 23.317 candidatos, SSIM)
  • Varredura de confusáveis entre scripts (12 scripts ICANN, 23,6M pares, 563 descobertas, SSIM)
  • Consulta por fonte e comparação de fontes
  • Pontuador de contorno vetorial de cinco camadas RaySpace (substitui SDF e SSIM para descoberta)
  • Descoberta de caractere único RaySpace (249.976 pares únicos, 245 fontes, 12 scripts)
  • Descoberta de múltiplos caracteres RaySpace (2.524.275 pares de bigramas únicos, 245 fontes)
  • Descoberta entre scripts com RaySpace (305% mais pares que SDF, superconjunto estrito)
  • Produzir confusable-weights-v2.json com registos distribucionais por par: média, p50, p90, contagem de fontes, contagem de distância zero, fração zero e nível recomendado (estrito/padrão/exploratório). Distâncias RaySpace substituem SSIM. 4.174 pares no limiar padrão.
  • Formato de banco de assinaturas binário (reduzir tempo de carregamento de 273s para segundos)
  • Pontuar fontes arbitrárias por caminho sem reexecutar pipeline completo

Relacionados

  • namespace-guard (v0.16.0+) consome confusable-weights.json para pontuação de risco visual medida via confusableDistance({ weights })
  • REPORT.md: relatório técnico completo do pipeline SSIM (12 secções, análise por fonte, apêndices)

Posts de blogue

Artigos em paultendo.github.io cobrindo as descobertas e a metodologia por detrás deste projeto:

Metodologia e descobertas do RaySpace:

  • RaySpace: medindo similaridade de glifos com raycasting de contorno vetorial
  • De scanners CT a caracteres confusáveis: a arte anterior por detrás do RaySpace
  • Confusáveis de múltiplos caracteres: quando rn se torna m
  • 250.000 pares confusáveis. 102 que importam para nomes de domínio.

Descobertas do pipeline SSIM:

  • Renderizei 1.418 pares confusáveis Unicode em 230 fontes. A maioria não é confusável ao olho.
  • 793 caracteres Unicode parecem letras Latinas mas não estão (ainda) em confusables.txt
  • 28 caracteres CJK e Hangul parecem letras Latinas
  • 248 pares confusáveis entre scripts que nenhum padrão cobre
  • 148x mais rápido: reconstruindo um pipeline de varredura Unicode para escala entre scripts
  • Quando a similaridade de forma mente: artefactos de rácio de tamanho na deteção de confusáveis
  • O novo DDoS: confusáveis Unicode não enganam LLMs, mas podem quintuplicar a sua fatura de API

Contexto

Artigos cobrindo o espaço de problema mais amplo que motivou este projeto:

  • Um modelo de ameaça para falsificação de identificadores Unicode
  • Tornando o risco Unicode mensurável
  • O seu LLM lê codepoints Unicode, não glifos. Isso é uma superfície de ataque.
  • Quem é realmente protegido pela deteção de confusáveis?
  • A Unicode envia um mapa de confusáveis. Precisa de dois.
  • confusables.txt e NFKC discordam em 31 caracteres

Licença

  • Código (src/, scripts/): MIT
  • Dados gerados (data/output/): CC-BY-4.0. Livre para usar, partilhar e adaptar para qualquer fim, incluindo comercial, com atribuição.
  • Atribuição: Paul Wood FRSA (@paultendo), confusable-vision
Baixar ferramenta
FonteAlvoScriptsMédiaFontesZeros
w U+0077ԝ U+051DLatino-Cirílico0.0001919
j U+006Aϳ U+03F3Latino-Grego0.0132118
i U+0069і U+0456Latino-Cirílico0.0186250
s U+0073ѕ U+0455Latino-Cirílico0.0186246
c U+0063с U+0441Latino-Cirílico0.0196145
o U+006Fо U+043ELatino-Cirílico0.0206144
j U+006Aј U+0458Latino-Cirílico0.0216048
x U+0078х U+0445Latino-Cirílico0.0235950
p U+0070р U+0440Latino-Cirílico0.0246146
e U+0065е U+0435Latino-Cirílico0.0326144
a U+0061а U+0430Latino-Cirílico0.0426145
FonteAlvoScriptsMédiaFontes
ο U+03BFჿ U+10FFGrego-Georgiano0.0572
ヘ U+30D8へ U+3078Katakana-Hiragana0.12211
丶 U+4E36ヽ U+30FDHan-Katakana0.1259
二 U+4E8Cニ U+30CBHan-Katakana0.24911
口 U+53E3ロ U+30EDHan-Katakana0.26811
BigramaAlvoMédiaFontesNotas
ll॥ U+0965 (danda dupla Devanágari)0.1768Entre scripts
oyѹ U+0479 (uk Cirílico)0.32216Novo bigrama confusável entre scripts
rnm U+006D0.5319533 fontes abaixo de 0.40
blы U+044B (yeru Cirílico)0.79749Entre scripts
Limiar médioPares únicos de caractere únicoPares únicos de múltiplos caracteres
< 0.5013813
< 1.004.1741.631
< 1.5059.700(ruído)
< 2.00249.9762.524.275
FicheiroDescrição
data/output/confusable-discoveries.json110 pares TR39 com SSIM alta (>= 0.7) ou pixel-idênticos
data/output/candidate-discoveries.json793 pares inéditos não no TR39, SSIM média >= 0.7
data/output/confusable-weights.json1.397 arestas ponderadas para integração com namespace-guard
data/output/cross-script-discoveries.json563 pares confusáveis entre scripts
data/output/cross-script-summary.jsonResumo entre scripts por par de scripts
data/output/multichar-discoveries.jsonDescobertas confusáveis de múltiplos caracteres
PNGs de renderização + índice (pipeline SSIM)
data/output/singlechar-sdf-scores.jsonlPontuações RaySpace de caractere único
data/output/multichar-rayspace-scores.jsonlPontuações RaySpace de múltiplos caracteres
data/output/signature-bank/Banco de assinaturas de raios (294.646 entradas, 7,9GB comprimidos)