Python Obfuscator (Max)
Seven-layer Python obfuscator running entirely in your browser via Pyodide. Minify, rename identifiers, encrypt strings, mangle integers, pack bytecode via marshal/zlib/base64, multi-layer wrap, XOR-cipher final payload. 100% client-side, your code never leaves the page.
How to Use
- Paste your Python code into the input box.
- Pick which layers to apply - or hit "Max Security" to enable everything.
- Click Obfuscate. On the first click the tool downloads Pyodide (~6 MB, cached after) so CPython itself is used for correct tokenization, compilation, and marshalling.
- Hit Verify to run the obfuscated code inside Pyodide and confirm it still produces the same output.
- Copy or download the result as .py.
The seven layers
What this is + isn't
Frequently Asked Questions
Does my source leave the page?
No. Pyodide is CPython compiled to WebAssembly — it runs entirely inside your browser tab. No server, no upload, no API call.
Is this actually un-reverse-engineerable?
No obfuscator is. The bytecode-pack layer makes `dis` useless until the layers are peeled, but a determined reverse-engineer with `marshal.loads` + `dis` + time can still get the original logic back. Anyone claiming otherwise is selling something.
Will AV engines flag the output?
Possibly. Marshal/base64 packing is a common malware pattern and heuristic scanners may warn. This tool is designed for IP protection, CTFs, and puzzles — not for bypassing security software.
What does Max Security actually do?
Stacks all seven layers in order: minify → rename → encode strings → mangle integers → bytecode pack → multi-layer wrap (3 passes by default) → XOR cipher. Each layer amplifies the next; the final output is a single short line containing a blob that decrypts and executes itself.
Why is the first click slow?
Pyodide is a 6 MB WebAssembly Python runtime. First run downloads and initialises it; subsequent runs are instant (browser cache).
Can the obfuscated code still be imported or packaged?
It remains a valid single-file Python module. It can still be pip-installed, bundled with PyInstaller, or shipped as-is. Importing individual names from it requires a matching `__all__` declaration which this tool preserves.
Common Use Cases
Ship commercial Python scripts
Make the source hard to casually read before distributing.
CTF / puzzle challenges
Build "unreadable" challenges for reverse-engineering competitions.
Minify + strip types
Use only layer 1 (minify) as a pure size reducer.
Learn how packers work
Each layer is visible in the output - inspect the exec wrapper, the marshal blob, the XOR cipher.
Last updated: