
Инструмент обмана на основе шрифтов для red teaming, исследований в области безопасности и всего остального.
Инструмент обмана на основе шрифтов для red teaming, исследований безопасности и всего остального.
EvilFontTool скрывает машиночитаемый текст внутри документа, который отображает человеку совершенно другой текст. Это достигается с помощью Evil Fonts — шрифтов, которые намеренно обманывают зрителя, отображая другую букву, чем понимает компьютер. Переопределяя глифы шрифта, видимые символы документа показывают человеку одно, а терминалы, ИИ-системы и копирование/вставка из буфера обмена видят другое.
Демо-файлы Word docx НЕ работают на мобильных устройствах из-за того, как мобильные телефоны отображают шрифты.
pip install evilfonttool
git clone https://github.com/DoctorEww/EvilFontTool.git
cd EvilFontTool
pip install .
Для разработки (устанавливаемый режим):
pip install -e .
Устанавливаются автоматически через pip:
fonttools — разбор и манипуляция шрифтамиbrotli — сжатие WOFF2 (используется fonttools)python-docx — генерация DOCXreportlab — генерация PDFpdf2image — преобразование PDF в изображенияpdfminer.six — извлечение текста/макета из PDFPillow — обработка изображений для PDF-конвейераСистемные требования (не устанавливаются через pip — должны быть в вашем PATH):
pdf, которая вызывает soffice --headless для преобразования DOCX в PDF. Команда pdf является экспериментальной в Windows и может работать некорректно.
sudo apt install libreofficebrew install --cask libreofficepdf2image для рендеринга страниц PDF для команды pdf
sudo apt install poppler-utilsbrew install popplerУстанавливает poppler в ~\Documents\poppler и добавляет в 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 является экспериментальной в Windows и может работать некорректно.pdf не работает со сложными документами Word, например с колонками. Не стесняйтесь открывать issue, если вам нужна функция, которую вы действительно хотите.doc --ttf-dir <ttffonts_dir> (EvilFontTool встраивает их сам) или Word в Windows. Собственная опция LibreOffice «встраивать шрифты» не работает для Evil Fonts.Команда pdf вообще не полагается на Evil Fonts. Она преобразует DOCX в изображение (таким образом, видимая страница — это картинка, а не текст), затем поверх наносит настоящий компьютерный текст как полностью невидимый выделяемый текст. Копирование/вставка и извлечение текста читают этот невидимый слой. Есть несколько других инструментов, которые умеют это делать, но ни один не так прост, как команда pdf, если у вас уже есть подходящий DOCX.
Если вам нужен настоящий PDF на основе Evil Font, нужно создать документ Word без невидимых букв (невидимые буквы не переживают преобразование в PDF). Затем экспортируйте напрямую из Word или используйте «Печать в PDF». Это сохраняет всё в одном слое, давая документу другие IOCs, чем известный двухслойный трюк, используемый командой pdf. Команда pdf существует именно потому, что ручной процесс утомителен, и иногда нужно просто быстро получить PDF-копию документа Word.
Короче;
pdf → двухслойный PDF, тот же механизм, что и в других инструментах (более известный/обнаруживаемый).Если кто-нибудь разберётся, как выполнить Вариант 2 с невидимыми буквами, я ставлю вам выпивку. Откройте issue, и я укажу вас в README.
Все функции доступны через единый CLI с четырьмя подкомандами.
create — Создание семейства шрифтов для использования в HTML или DOC-файлахevilfonttool create <reference_font> <output_dir> <font_name>
| Аргумент | Описание |
|---|---|
reference_font | Путь к исходному шрифту .ttf или .woff |
output_dir | Каталог для записи шрифтов и CSS |
font_name | Префикс внутреннего имени для создаваемого семейства шрифтов |
Пример:
evilfonttool create fonts/Arial.ttf output/ 'Arial'
Результаты:
output/fonts/*.woff — веб-шрифты, по одному на символoutput/ttffonts/*.ttf — TTF-шрифты для встраивания в документыoutput/fonts.css — объявления @font-face для веб-использования.txt.computer_file должна быть не короче соответствующей строки в human_file.web — Создание HTML-файла с Evil Fontevilfonttool web <human_file> <computer_file> <output_file>
Требуется, чтобы
fonts.cssи созданные шрифты находились в выходном каталоге, чтобы HTML-файл мог их использовать (или измените путь в HTML-файле).
| Аргумент | Описание |
|---|---|
input_human_file | Текст, видимый человеку. Может быть многострочным |
input_computer_file | Текст, видимый машинам / ИИ. Может быть многострочным |
output_file | Путь для создаваемого HTML-файла |
Пример:
evilfonttool web human.txt computer.txt output/index.html
doc — Создание DOCX-файла с Evil Fontevilfonttool doc <human_file> <computer_file> <output_file> <font_name> [--author AUTHOR] [--ttf-dir DIR]
font_nameдолжен совпадать с именем, использованным на шагеcreate. TTF-шрифты должны быть установлены в системе, встроены через--ttf-dirили встроены вручную в Word (файл -> параметры -> сохранение -> встроить шрифты), чтобы обман отображался корректно.
Собственная опция сохранения Word «встроить шрифты» работает нормально, а у LibreOffice — нет; мне так и не удалось заставить его правильно встраивать Evil Fonts. Вместо этого используйте --ttf-dir: EvilFontTool встраивает шрифты сам, прямо в .docx, вообще не полагаясь на встраивание Word или LibreOffice.