
Uma ferramenta de engano baseada em fontes para red teaming, pesquisa de segurança e qualquer outra coisa.
Uma ferramenta de engano baseada em fontes para red team, pesquisa de segurança e o que mais for.
O EvilFontTool esconde texto legível por máquinas dentro de um documento que exibe texto completamente diferente para um leitor humano. Ele faz isso usando Evil Fonts — fontes que enganam intencionalmente o observador ao renderizar uma letra diferente daquela entendida por um computador. Ao remapear os glifos da fonte, os caracteres visíveis do documento mostram uma coisa aos humanos, enquanto terminais, sistemas de IA e copiar/colar veem outra.
As demonstrações de documentos Word/docx NÃO funcionam em dispositivos móveis devido à forma como os telefones celulares renderizam fontes.
pip install evilfonttool
git clone https://github.com/DoctorEww/EvilFontTool.git
cd EvilFontTool
pip install .
Para desenvolvimento (instalação editável):
pip install -e .
Instaladas automaticamente via pip:
fonttools — análise e manipulação de fontesbrotli — compressão WOFF2 (usado por fonttools)python-docx — geração de DOCXreportlab — geração de PDFpdf2image — conversão de PDF para imagempdfminer.six — extração de texto/layout de PDFPillow — manipulação de imagens para o pipeline de PDFRequisitos de sistema (não instalados pelo pip — devem estar no seu PATH):
pdf, que chama soffice --headless para converter DOCX em PDF. O comando pdf é experimental no Windows e pode não funcionar como esperado.
sudo apt install libreofficebrew install --cask libreofficepdf2image renderizar páginas de PDF para o comando pdf
sudo apt install poppler-utilsbrew install popplerInstale o poppler em ~\Documents\poppler e adicione ao PATH.
irm (irm https://api.github.com/repos/oschwartz10612/poppler-windows/releases/latest).assets[0].browser_download_url -OutFile ~\Documents\poppler.zip
Expand-Archive ~\Documents\poppler.zip ~\Documents\poppler -Force
$bin = (gci ~\Documents\poppler -Recurse -Filter pdftotext.exe)[0].DirectoryName
[Environment]::SetEnvironmentVariable('Path', [Environment]::GetEnvironmentVariable('Path','User') + ";$bin", 'User'); $env:Path += ";$bin"
/usr/share/fontsC:\Windows\Fontspdf é experimental no Windows e pode não funcionar como esperado.doc --ttf-dir <ttffonts_dir> (o EvilFontTool as incorpora por conta própria) ou o Word no Windows. A opção "incorporar fontes" do próprio LibreOffice não funciona para Evil Fonts.O comando pdf não depende de Evil Fonts de forma alguma. Ele renderiza o DOCX como uma imagem (então a página visível é uma imagem, não texto) e, em seguida, desenha o texto real do computador por cima como texto totalmente invisível e selecionável. Copiar/colar e extração de texto leem essa camada invisível. Existem algumas outras ferramentas que fazem isso, mas nada tão fácil quanto o comando pdf quando você já tem um DOCX de que gosta.
Se você quiser um PDF genuíno com Evil Font, precisa criar o documento Word sem letras invisíveis (letras invisíveis não sobrevivem à conversão para PDF). A partir daí, exporte diretamente do Word ou use "Imprimir em PDF". Isso mantém tudo em uma única camada, dando ao documento IOCs diferentes do conhecido truque de duas camadas usado pelo comando pdf. O comando pdf existe puramente porque esse processo manual é tedioso e, às vezes, você só quer uma cópia rápida em PDF de um documento Word.
TLDR;
pdf → PDF de duas camadas, mesmo mecanismo de outras ferramentas (mais conhecido/detectável).Se alguém descobrir como executar a Opção 2 com letras invisíveis, eu devo uma bebida a você. Abra uma issue e eu te creditarei no README.
Toda a funcionalidade é exposta por uma única CLI com quatro subcomandos.
create — Gera a família de fontes para uso em arquivos HTML ou DOCevilfonttool create <reference_font> <output_dir> <font_name>
| Argumento | Descrição |
|---|---|
reference_font | Caminho para uma fonte de origem .ttf ou .woff |
output_dir | Diretório para gravar as fontes e o CSS |
font_name | Prefixo interno do nome para a família de fontes gerada |
Exemplo:
evilfonttool create fonts/Arial.ttf output/ 'Arial'
Saídas:
output/fonts/*.woff — fontes web, uma por caractereoutput/ttffonts/*.ttf — fontes TTF para incorporação em documentosoutput/fonts.css — declarações @font-face para uso na web.txt simples.computer_file deve ser igual ou mais longa que a linha correspondente em human_fileweb — Gera um arquivo HTML com Evil Fontevilfonttool web <human_file> <computer_file> <output_file>
Requer que
fonts.csse as fontes geradas estejam no diretório de saída para que o arquivo HTML possa usá-los (ou altere o caminho no arquivo HTML).
| Argumento | Descrição |
|---|---|
input_human_file | Texto visível para leitores humanos. Pode ter várias linhas |
input_computer_file | Texto visível para máquinas / IA. Pode ter várias linhas |
output_file | Caminho para o arquivo HTML gerado |
Exemplo:
evilfonttool web human.txt computer.txt output/index.html
doc — Gera um arquivo DOCX com Evil Fontevilfonttool doc <human_file> <computer_file> <output_file> <font_name> [--author AUTHOR] [--ttf-dir DIR]
O
font_namedeve corresponder ao nome usado na etapacreate. As fontes TTF devem estar instaladas no sistema, incorporadas via--ttf-dir, ou incorporadas manualmente no Word (arquivo -> opções -> salvar -> incorporar fontes) para que o engano seja renderizado corretamente.
A opção de salvar "incorporar fontes" do próprio Word funciona bem, mas a do LibreOffice não — nunca consegui fazer com que ele incorporasse Evil Fonts corretamente. Use --ttf-dir em vez disso: o EvilFontTool incorpora as fontes por conta própria, diretamente no .docx, sem depender da incorporação do Word ou do LibreOffice.