98 lines
6.2 KiB
Markdown
98 lines
6.2 KiB
Markdown
# OMG-Fuscator
|
||
Advanced Python code obfuscator for renaming identifiers, encrypting strings, flattening control flow, and injecting junk code.
|
||
|
||
Quick start: use the CLI in [main.py](main.py) or the library API via [AdvancedObfuscator()](obfuscator.py:17).
|
||
|
||
## Features
|
||
- Symbol-tree–guided renaming via [AdvancedObfuscator._build_symbol_tree()](obfuscator.py:93) and [RenameTransformer()](transformers/rename.py:10).
|
||
- String literal encryption with multi-layer XOR and Base85 unpacked at runtime via [StringEncryptor.encrypt_string()](utils/encryption.py:42) and injected expressions from [RenameTransformer.visit_Constant()](transformers/rename.py:373).
|
||
- Control-flow flattening (state machine) in [ControlFlowFlattener()](transformers/control_flow.py:10), orchestrated by [AdvancedObfuscator._flatten_control_flow()](obfuscator.py:171) and applied in [ControlFlowFlattener.visit_FunctionDef()](transformers/control_flow.py:38).
|
||
- Junk code injection during code generation in [AdvancedObfuscator._generate_final_code()](obfuscator.py:185); extra utilities in [utils/junk_gen.py](utils/junk_gen.py).
|
||
- Debug diagnostics and JSON emission through [AdvancedObfuscator.log_debug()](obfuscator.py:51), [AdvancedObfuscator.detect_issues()](obfuscator.py:60), and final write in [AdvancedObfuscator.obfuscate()](obfuscator.py:250).
|
||
|
||
## Requirements
|
||
- Python 3.9+ (uses ast.unparse)
|
||
- No external dependencies; standard library only
|
||
|
||
## Installation
|
||
- Clone or download this repository into a working directory.
|
||
- Optional: create and activate a virtual environment.
|
||
- There are no packages to install.
|
||
|
||
## CLI usage
|
||
The CLI entrypoint is [main.py](main.py) with handler [main()](main.py:6).
|
||
|
||
Examples:
|
||
- Test mode (prints and executes obfuscated sample code): python [main.py](main.py) --test
|
||
- Obfuscate a file with verbose logging and default output name: python [main.py](main.py) -i path/to/app.py -v
|
||
- Obfuscate to a specific file: python [main.py](main.py) -i path/to/app.py -o path/to/app_obf.py
|
||
|
||
Arguments:
|
||
- -i, --input: Input .py file path
|
||
- -o, --output: Output file path (default: input_stem_obfuscated.py)
|
||
- -v, --verbose: Enable verbose console logs
|
||
- --test: Run built-in demo
|
||
|
||
## Library usage
|
||
- Import from [obfuscator.py](obfuscator.py): instantiate [AdvancedObfuscator()](obfuscator.py:17).
|
||
- Call [AdvancedObfuscator.obfuscate()](obfuscator.py:250) with a string of source code; it returns the obfuscated Python source string.
|
||
- Optionally pass debug_mode=True to [AdvancedObfuscator()](obfuscator.py:17) to emit a JSON report under ./debug/.
|
||
|
||
Minimal flow:
|
||
1) Parse to AST: [AdvancedObfuscator.obfuscate()](obfuscator.py:254)
|
||
2) Rename + encrypt: [AdvancedObfuscator._rename_and_encrypt()](obfuscator.py:142), [RenameTransformer()](transformers/rename.py:10)
|
||
3) Flatten control flow: [AdvancedObfuscator._flatten_control_flow()](obfuscator.py:171), [ControlFlowFlattener()](transformers/control_flow.py:10)
|
||
4) Generate code and inject junk: [AdvancedObfuscator._generate_final_code()](obfuscator.py:185)
|
||
|
||
## Project structure
|
||
- [main.py](main.py) – CLI interface and example/test runner.
|
||
- [obfuscator.py](obfuscator.py) – Core engine ([AdvancedObfuscator()](obfuscator.py:17)).
|
||
- [transformers/rename.py](transformers/rename.py) – Identifier renaming and string encryption ([RenameTransformer()](transformers/rename.py:10)).
|
||
- [transformers/control_flow.py](transformers/control_flow.py) – Control-flow flattener ([ControlFlowFlattener()](transformers/control_flow.py:10)).
|
||
- [utils/encryption.py](utils/encryption.py) – String encryption ([StringEncryptor()](utils/encryption.py:6)).
|
||
- [utils/junk_gen.py](utils/junk_gen.py) – Junk statements for noise.
|
||
- [utils/name_gen.py](utils/name_gen.py) – Obfuscated name generation.
|
||
- [transformers/symbol_tree.py](transformers/symbol_tree.py) – Global symbol graph for consistent renames.
|
||
- [transformers/class_analyzer.py](transformers/class_analyzer.py), [transformers/attribute_transformer.py](transformers/attribute_transformer.py), [transformers/class_mapper.py](transformers/class_mapper.py) – Class/method/attribute support utilities.
|
||
|
||
## Debugging and diagnostics
|
||
- Enable debug mode by constructing [AdvancedObfuscator(debug_mode=True)](obfuscator.py:17).
|
||
- Transformation events are collected through [AdvancedObfuscator.log_debug()](obfuscator.py:51).
|
||
- Issue detection (e.g., name collisions) is performed in [AdvancedObfuscator.detect_issues()](obfuscator.py:60).
|
||
- A comprehensive JSON report is written from [AdvancedObfuscator.obfuscate()](obfuscator.py:265) under ./debug/.
|
||
|
||
## Notes and limitations
|
||
- Control-flow flattening may increase code size and reduce performance for small functions; tiny functions are skipped in [ControlFlowFlattener.visit_FunctionDef()](transformers/control_flow.py:46).
|
||
- Obfuscation can impact reflection, dynamic imports, serialization, or frameworks that rely on exact names.
|
||
- String encryption decrypts at runtime; extremely performance‑sensitive hot paths may incur overhead.
|
||
- Avoid obfuscating code that uses eval/exec on source strings that expect original identifiers.
|
||
|
||
## License
|
||
Specify a license for this project (e.g., MIT). If adding a LICENSE file, reference it here.
|
||
## Documentation
|
||
|
||
Generate Doxygen HTML docs for this codebase.
|
||
|
||
- Prerequisites (install one of the following):
|
||
- Windows (chocolatey): choco install doxygen.install
|
||
- macOS (Homebrew): brew install doxygen
|
||
- Linux (apt): sudo apt-get update && sudo apt-get install doxygen
|
||
|
||
- Generate:
|
||
- From the repository root, run: doxygen [Doxyfile](Doxyfile)
|
||
- Open the generated site: [docs/html/index.html](docs/html/index.html)
|
||
|
||
- Notes:
|
||
- Configuration extracts Python docstrings and Markdown.
|
||
- Source browsing and inline sources are enabled.
|
||
- Key modules documented include:
|
||
- [obfuscator.py](obfuscator.py)
|
||
- [transformers/rename.py](transformers/rename.py)
|
||
- [transformers/control_flow.py](transformers/control_flow.py)
|
||
- [transformers/symbol_tree.py](transformers/symbol_tree.py)
|
||
- [transformers/class_analyzer.py](transformers/class_analyzer.py)
|
||
- [transformers/class_mapper.py](transformers/class_mapper.py)
|
||
- [transformers/attribute_transformer.py](transformers/attribute_transformer.py)
|
||
- [utils/encryption.py](utils/encryption.py)
|
||
- [utils/junk_gen.py](utils/junk_gen.py)
|
||
- [utils/name_gen.py](utils/name_gen.py) |