Skip to main content

Evil Font steganography tool for security research

Project description

EvilFontTool

A font-based deception tool for red teaming, security research, and whatever else.

EvilFontTool hides machine-readable text inside a document that displays completely different text to a human reader. It does this using Evil Fonts — fonts that intentionally deceive the viewer by rendering a different letter than understood by a computer. By remapping font glyphs, the document's visible characters show humans one thing while terminals, AI systems, and clipboard copy paste see another.

Evil Font Demo !!DON'T MISS THIS!!

View the Demo → Here (hosted on GitHub Pages)


Table of Contents


How It Works — Blog Post Coming Soon


Installation

git clone https://github.com/DoctorEww/EvilFontTool.git
cd EvilFontTool
pip install .

For development (editable install):

pip install -e .

Dependencies

  • fonttools — font parsing and manipulation
  • python-docx — DOCX generation

Where can I find fonts to use?


Usage

All functionality is exposed via a single CLI with three subcommands.

create — Generate the font family for use in HTML or DOC files

evilfonttool create <reference_font> <output_dir> <font_name>
Argument Description
reference_font Path to a .ttf or .woff source font
output_dir Directory to write fonts and CSS into
font_name Internal name prefix for the generated font family

Example:

evilfonttool create fonts/Arial.ttf output/ 'Arial'

Outputs:

  • output/fonts/*.woff — web fonts, one per character
  • output/ttffonts/*.ttf — TTF fonts for document embedding
  • output/fonts.css@font-face declarations for web use

web — Generate an evil font HTML file

evilfonttool web <human_file> <computer_file> <output_file>

Requires fonts.css and the generated fonts to be in the output directory so the HTML file can use it (or change the path in the HTML file).

Example:

evilfonttool web human.txt computer.txt output/index.html

doc — Generate a evil font DOCX file

evilfonttool doc <human_file> <computer_file> <output_file> <font_name>

The font_name must match the name used in the create step. The TTF fonts must be installed on the system or embedded in the document. When saving the doc file you can choose in the file -> options -> save to embed the fonts in the file so its portable.

Example:

evilfonttool doc human.txt computer.txt output/secret.docx MyFont

Input File Format

  • Plain .txt files, one sentence or phrase per line
  • Each line in computer_file must be equal to or longer than the corresponding line in human_file
  • Lines are matched positionally (line 1 to line 1, etc.)

Ethical Use & Disclaimer

You are responsible for how you use this tool. Deploying this technique against systems or individuals without explicit authorization is unethical and may be illegal. The authors provide this tool to help defenders understand and test for this class of vulnerability — not to enable attacks.


Contributing

Contributions are welcome. If you've found a new attack surface, an improvement to the font generation pipeline, or a defense technique worth documenting, please open an issue or PR.

  1. Fork the repo
  2. Create a feature branch (git checkout -b feature/my-feature)
  3. Commit your changes
  4. Open a pull request with a clear description of what changed and why

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evilfonttool-2.0.0.tar.gz (9.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evilfonttool-2.0.0-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file evilfonttool-2.0.0.tar.gz.

File metadata

  • Download URL: evilfonttool-2.0.0.tar.gz
  • Upload date:
  • Size: 9.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for evilfonttool-2.0.0.tar.gz
Algorithm Hash digest
SHA256 1d043ad63b964d91dbe199b2f5e7e07373d3704c599faf550accc08154a06859
MD5 c0dc26afb7fd5800641bfac5a6ade466
BLAKE2b-256 795faed68ad41ea4afa7cf31c9e475ff7232cfdb1bc2c95b9ee8443b110d2790

See more details on using hashes here.

Provenance

The following attestation bundles were made for evilfonttool-2.0.0.tar.gz:

Publisher: python-publish.yml on DoctorEww/EvilFontTool

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file evilfonttool-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: evilfonttool-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for evilfonttool-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1287c2d25844f31033ac3dac82cbf4ef4aa9c820b0a67874a622418a1f5ecfc9
MD5 ef2f091b1cc096df3850f89a7a5e5dc0
BLAKE2b-256 cc3465948d6982ef3683c21e181653932cc233ce44b077a3bacdbfc70af1d664

See more details on using hashes here.

Provenance

The following attestation bundles were made for evilfonttool-2.0.0-py3-none-any.whl:

Publisher: python-publish.yml on DoctorEww/EvilFontTool

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page