
Una herramienta de engaño basada en fuentes para red teaming, investigación de seguridad y cualquier otra cosa.
Una herramienta de engaño basada en fuentes para red teaming, investigación de seguridad y lo que sea.
EvilFontTool oculta texto legible por máquina dentro de un documento que muestra un texto completamente distinto a un lector humano. Lo hace mediante Evil Fonts — fuentes que engañan deliberadamente al espectador renderizando una letra distinta de la que entiende el ordenador. Al reasignar los glifos de la fuente, los caracteres visibles del documento muestran a los humanos una cosa, mientras que terminales, sistemas de IA y copiar y pegar ven otra.
Las demos de Word docx NO funcionan en móviles debido a la forma en que los teléfonos móviles renderizan las fuentes.
pip install evilfonttool
git clone https://github.com/DoctorEww/EvilFontTool.git
cd EvilFontTool
pip install .
Para desarrollo (instalación editable):
pip install -e .
Se instalan automáticamente vía pip:
fonttools — análisis y manipulación de fuentesbrotli — compresión WOFF2 (usada por fonttools)python-docx — generación de DOCXreportlab — generación de PDFpdf2image — conversión de PDF a imagenpdfminer.six — extracción de texto/diseño de PDFPillow — manejo de imágenes para el pipeline de PDFRequisitos del sistema (no los instala pip — deben estar en tu PATH):
pdf, que invoca a soffice --headless para convertir DOCX a PDF. El comando pdf es experimental en Windows y puede que no funcione como se espera.
sudo apt install libreofficebrew install --cask libreofficepdf2image para renderizar páginas PDF para el comando pdf
sudo apt install poppler-utilsbrew install popplerInstala poppler en ~\Documents\poppler y añádelo a la ruta.
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 es experimental en Windows y puede que no funcione como se espera.pdf no funciona con documentos de Word complejos, p. ej. columnas. No dudes en abrir un issue si hay alguna característica que realmente quieras que admita.doc --ttf-dir <ttffonts_dir> (EvilFontTool las incrusta por sí mismo) o Word en Windows. La opción "incrustar fuentes" de LibreOffice no funciona con Evil Fonts.El comando pdf no depende en absoluto de Evil Fonts. Renderiza el DOCX a una imagen (de modo que la página visible es una imagen, no texto), y luego dibuja el texto real de la computadora encima como texto totalmente invisible y seleccionable. Copiar y pegar y la extracción de texto leen esa capa invisible en su lugar. Hay algunas otras herramientas que pueden hacer esto, pero ninguna tan fácil como el comando pdf cuando ya tienes un DOCX que te gusta.
Si quieres un PDF con Evil Fonts de verdad, necesitas construir el documento de Word sin letras invisibles (las letras invisibles no sobreviven a la conversión a PDF). A partir de ahí, exporta directamente desde Word o usa "Imprimir a PDF". Esto mantiene todo en una sola capa, dando al documento IOCs distintos al conocido truco de dos capas usado por el comando pdf. El comando pdf existe únicamente porque ese proceso manual es tedioso, y a veces solo quieres una copia rápida en PDF de un documento de Word.
Resumen;
pdf → PDF de dos capas, mismo mecanismo que otras herramientas (más conocido/detectable).Si alguien descubre cómo lograr la Opción 2 con letras invisibles, te debo una bebida. Abre un issue y te daré crédito en el README.
Toda la funcionalidad se expone a través de una única CLI con cuatro subcomandos.
create — Genera la familia de fuentes para usar en archivos HTML o DOCevilfonttool create <reference_font> <output_dir> <font_name>
| Argumento | Descripción |
|---|---|
reference_font | Ruta a una fuente .ttf o .woff |
output_dir | Directorio donde se escribirán las fuentes y el CSS |
font_name | Prefijo del nombre interno para la familia de fuentes generada |
Ejemplo:
evilfonttool create fonts/Arial.ttf output/ 'Arial'
Salidas:
output/fonts/*.woff — fuentes web, una por carácteroutput/ttffonts/*.ttf — fuentes TTF para incrustar en documentosoutput/fonts.css — declaraciones @font-face para uso web.txt planos.computer_file debe ser igual o más larga que la línea correspondiente en human_fileweb — Genera un archivo HTML con Evil Fontevilfonttool web <human_file> <computer_file> <output_file>
Requiere que
fonts.cssy las fuentes generadas estén en el directorio de salida para que el archivo HTML pueda usarlas (o cambia la ruta en el archivo HTML).
| Argumento | Descripción |
|---|---|
input_human_file | Texto visible para los lectores humanos. Puede tener varias líneas |
input_computer_file | Texto visible para máquinas / IA. Puede tener varias líneas |
output_file | Ruta para el archivo HTML generado |
Ejemplo:
evilfonttool web human.txt computer.txt output/index.html
doc — Genera un archivo DOCX con Evil Fontevilfonttool doc <human_file> <computer_file> <output_file> <font_name> [--author AUTHOR] [--ttf-dir DIR]
El
font_namedebe coincidir con el nombre usado en el pasocreate. Las fuentes TTF deben estar instaladas en el sistema, incrustadas mediante--ttf-dir, o incrustadas manualmente en Word (archivo -> opciones -> guardar -> incrustar fuentes) para que el engaño se renderice correctamente.