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 manipulationpython-docx— DOCX generation
Where can I find fonts to use?
- Ubuntu:
/usr/share/fonts - Windows:
C:\Windows\Fonts - https://fonts.google.com/
- The internet??
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 characteroutput/ttffonts/*.ttf— TTF fonts for document embeddingoutput/fonts.css—@font-facedeclarations for web use
web — Generate an evil font HTML file
evilfonttool web <human_file> <computer_file> <output_file>
Requires
fonts.cssand 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_namemust match the name used in thecreatestep. 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
.txtfiles, one sentence or phrase per line - Each line in
computer_filemust be equal to or longer than the corresponding line inhuman_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.
- Fork the repo
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes
- 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d043ad63b964d91dbe199b2f5e7e07373d3704c599faf550accc08154a06859
|
|
| MD5 |
c0dc26afb7fd5800641bfac5a6ade466
|
|
| BLAKE2b-256 |
795faed68ad41ea4afa7cf31c9e475ff7232cfdb1bc2c95b9ee8443b110d2790
|
Provenance
The following attestation bundles were made for evilfonttool-2.0.0.tar.gz:
Publisher:
python-publish.yml on DoctorEww/EvilFontTool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evilfonttool-2.0.0.tar.gz -
Subject digest:
1d043ad63b964d91dbe199b2f5e7e07373d3704c599faf550accc08154a06859 - Sigstore transparency entry: 1058152848
- Sigstore integration time:
-
Permalink:
DoctorEww/EvilFontTool@f74f9a1ddc4d28e7617a8666c2211b03c0ddee69 -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/DoctorEww
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@f74f9a1ddc4d28e7617a8666c2211b03c0ddee69 -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1287c2d25844f31033ac3dac82cbf4ef4aa9c820b0a67874a622418a1f5ecfc9
|
|
| MD5 |
ef2f091b1cc096df3850f89a7a5e5dc0
|
|
| BLAKE2b-256 |
cc3465948d6982ef3683c21e181653932cc233ce44b077a3bacdbfc70af1d664
|
Provenance
The following attestation bundles were made for evilfonttool-2.0.0-py3-none-any.whl:
Publisher:
python-publish.yml on DoctorEww/EvilFontTool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evilfonttool-2.0.0-py3-none-any.whl -
Subject digest:
1287c2d25844f31033ac3dac82cbf4ef4aa9c820b0a67874a622418a1f5ecfc9 - Sigstore transparency entry: 1058152892
- Sigstore integration time:
-
Permalink:
DoctorEww/EvilFontTool@f74f9a1ddc4d28e7617a8666c2211b03c0ddee69 -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/DoctorEww
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@f74f9a1ddc4d28e7617a8666c2211b03c0ddee69 -
Trigger Event:
release
-
Statement type: