
Un outil de déception basé sur les polices de caractères pour le red teaming, la recherche en sécurité, et tout le reste.
Un outil de déception basé sur les polices pour le red teaming, la recherche en sécurité, et tout le reste.
EvilFontTool dissimule du texte lisible par machine dans un document qui affiche un texte complètement différent au lecteur humain. Pour ce faire, il utilise des Evil Fonts — des polices qui trompent intentionnellement l'observateur en affichant une lettre différente de celle comprise par un ordinateur. En remappant les glyphes de la police, les caractères visibles du document montrent une chose aux humains tandis que les terminaux, les systèmes d'IA et le copier-coller en voient une autre.
Les démos au format Word docx ne fonctionnent PAS sur mobile à cause de la manière dont les téléphones mobiles rendent les polices.
pip install evilfonttool
git clone https://github.com/DoctorEww/EvilFontTool.git
cd EvilFontTool
pip install .
Pour le développement (installation éditable) :
pip install -e .
Installées automatiquement via pip :
fonttools — parsing et manipulation de policesbrotli — compression WOFF2 (utilisé par fonttools)python-docx — génération de DOCXreportlab — génération de PDFpdf2image — conversion PDF vers imagepdfminer.six — extraction de texte/disposition PDFPillow — traitement d'images pour le pipeline PDFExigences système (non installées par pip — doivent être dans votre PATH) :
pdf, qui fait appel à soffice --headless pour convertir le DOCX en PDF. La commande pdf est expérimentale sous Windows et peut ne pas fonctionner comme prévu.
sudo apt install libreofficebrew install --cask libreofficepdf2image pour rendre les pages PDF de la commande pdf
sudo apt install poppler-utilsbrew install popplerInstallez poppler dans ~\Documents\poppler et ajoutez-le au chemin.
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 est expérimentale sous Windows et peut ne pas fonctionner comme prévu.pdf ne fonctionne pas avec les documents Word complexes, ex. les colonnes. N'hésitez pas à ouvrir une issue si vous voulez vraiment qu'une fonctionnalité soit prise en charge.doc --ttf-dir <ttffonts_dir> (EvilFontTool les intègre lui-même) ou Word sous Windows. L'option "intégrer les polices" de LibreOffice ne fonctionne pas avec les Evil Fonts.La commande pdf ne repose pas du tout sur les Evil Fonts. Elle convertit le DOCX en image (la page visible est donc une image, pas du texte), puis dessine le vrai texte machine par-dessus sous forme de texte entièrement invisible et sélectionnable. Le copier-coller et l'extraction de texte lisent cette couche invisible à la place. Il existe quelques autres outils capables de faire cela, mais rien d'aussi simple que la commande pdf quand vous avez déjà un DOCX qui vous convient.
Si vous voulez un véritable PDF Evil Font, vous devez créer le document Word sans lettres invisibles (les lettres invisibles ne survivent pas à la conversion PDF). Ensuite, exportez directement depuis Word ou utilisez "Imprimer au format PDF". Cela conserve tout sur une seule couche, donnant au document des IOC différents du célèbre truc à deux couches utilisé par la commande pdf. La commande pdf existe uniquement parce que ce processus manuel est fastidieux, et parfois vous voulez juste une copie PDF rapide d'un document Word.
TLDR;
pdf → PDF à deux couches, même mécanisme que les autres outils (plus connu/détectable).Si quelqu'un trouve comment réussir l'option 2 avec des lettres invisibles, je lui dois un verre. Ouvrez une issue et je vous créditerai dans le README.
Toutes les fonctionnalités sont exposées via une seule interface CLI avec quatre sous-commandes.
create — Générer la famille de polices pour une utilisation dans les fichiers HTML ou DOCevilfonttool create <reference_font> <output_dir> <font_name>
| Argument | Description |
|---|---|
reference_font | Chemin vers une police source .ttf ou .woff |
output_dir | Répertoire dans lequel écrire les polices et le CSS |
font_name | Préfixe de nom interne pour la famille de polices générée |
Exemple :
evilfonttool create fonts/Arial.ttf output/ 'Arial'
Sorties :
output/fonts/*.woff — polices web, une par caractèreoutput/ttffonts/*.ttf — polices TTF pour l'intégration dans les documentsoutput/fonts.css — déclarations @font-face pour une utilisation web.txt simples.computer_file doit être égale ou plus longue que la ligne correspondante du human_fileweb — Générer un fichier HTML Evil Fontevilfonttool web <human_file> <computer_file> <output_file>
Nécessite que
fonts.csset les polices générées soient dans le répertoire de sortie pour que le fichier HTML puisse les utiliser (ou modifiez le chemin dans le fichier HTML).
| Argument | Description |
|---|---|
input_human_file | Texte visible par les lecteurs humains. Peut comporter plusieurs lignes |
input_computer_file | Texte visible par les machines / l'IA. Peut comporter plusieurs lignes |
output_file | Chemin du fichier HTML généré |
Exemple :
evilfonttool web human.txt computer.txt output/index.html
doc — Générer un fichier DOCX Evil Fontevilfonttool doc <human_file> <computer_file> <output_file> <font_name> [--author AUTHOR] [--ttf-dir DIR]