A comprehensive, open-source Unity Editor plugin for obfuscating IL2CPP assemblies. Protect your game code from decompilation and reverse engineering without modifying source files.
Unity Obfuscator integrates seamlessly into your Unity build pipeline, automatically obfuscating managed assemblies before IL2CPP conversion. It provides enterprise-grade protection with a simple, configurable interface.
Key Features:
- ๐ Name Obfuscation: Types, methods, fields, and properties
- ๐ String Encryption: AES-256 encryption for string literals
- ๐ก๏ธ IL2CPP Compatible: Works perfectly with Unity's IL2CPP
- ๐ Backup & Rollback: Automatic safety net
- ๐ฎ Unity Integration: Editor window + build hooks
- ๐ค CI/CD Ready: Command-line interface for automation
- ๐ง Flexible: Use built-in or external obfuscators
- ๐ Detailed Reports: Complete obfuscation logs
- Clone or download this repository
- Add Mono.Cecil (required for built-in obfuscation):
# Download Mono.Cecil curl -L -o cecil.zip https://www.nuget.org/api/v2/package/Mono.Cecil/0.11.5 unzip cecil.zip cp lib/netstandard2.0/Mono.Cecil.dll Assets/UnityObfuscator/Libs/ - Restart Unity Editor
- Open Tools > Unity Obfuscator
- Open Tools > Unity Obfuscator
- Configure your settings
- Click Run Obfuscation to test
- Review the results in Console and
Library/ObfuscatorReports/ - Enable Auto Run on Build for automatic obfuscation
Enable auto-run in configuration:
{
"enableObfuscation": true,
"autoRunOnBuild": true
}Now obfuscation happens automatically during builds!
# Run obfuscation
Unity -quit -batchmode -projectPath . \
-executeMethod UnityObfuscator.Editor.ObfuscatorCLI.RunObfuscation
# Rollback
Unity -quit -batchmode -projectPath . \
-executeMethod UnityObfuscator.Editor.ObfuscatorCLI.Rollback- Complete Documentation - Full feature guide
- Troubleshooting - Common issues and solutions
- Configuration Reference - All settings explained
Edit Assets/UnityObfuscator/Config/obfuscator_config.json:
{
"enableObfuscation": true,
"autoRunOnBuild": false,
"targetAssemblies": ["Assembly-CSharp.dll"],
"obfuscateTypeNames": true,
"obfuscateMethodNames": true,
"obfuscateFieldNames": true,
"encryptStrings": false,
"excludedNamespaces": ["UnityEngine", "UnityEditor"]
}Your C# Code
โ
Unity Compilation
โ
DLL Assemblies (Library/ScriptAssemblies/)
โ
Copy to Build Staging Area (Temp/StagingArea/)
โ
[OBFUSCATION HAPPENS HERE] โ IPostBuildPlayerScriptDLLs hook
โ
Obfuscated DLL Assemblies
โ
IL2CPP Conversion (uses obfuscated DLLs)
โ
Native Binary
The plugin hooks into Unity's build pipeline using IPostBuildPlayerScriptDLLs, obfuscating assemblies after they are copied to the build staging area but before IL2CPP conversion. This ensures IL2CPP converts the obfuscated code, not the original.
// Before
public class PlayerController {
private int healthPoints;
public void TakeDamage(int amount) { }
}
// After (example)
public class a {
private int b;
public void c(int d) { }
}// Before
string apiKey = "sk_live_abc123xyz";
// After
string apiKey = ObfuscatedString.Decrypt("eJw7Kj4+Pi...");- Unity framework classes (UnityEngine., UnityEditor.)
- Serialized fields ([SerializeField])
- Unity callbacks (Start, Update, etc.)
- System libraries
- Your custom exclusions
Every obfuscation creates a timestamped backup:
Library/ObfuscatorBackups/
โโโ 20250112_143000/
โ โโโ Assembly-CSharp.dll
โ โโโ Assembly-CSharp.pdb
โโโ 20250112_154500/
โโโ 20250112_165000/
Something wrong? Restore instantly:
- Editor: Tools > Unity Obfuscator > Rollback
- CLI:
Unity -executeMethod UnityObfuscator.Editor.ObfuscatorCLI.Rollback
Every operation is logged to Library/ObfuscatorReports/:
[2025-01-12 14:30:00] Starting Obfuscation Process
[2025-01-12 14:30:01] Found 1 target assemblies
[2025-01-12 14:30:01] Obfuscated 42 types and 215 members
[2025-01-12 14:30:02] Obfuscation Complete: 1/1 assemblies processed
Access via: Tools > Unity Obfuscator
Features:
- Visual configuration
- One-click obfuscation
- Instant rollback
- Configuration management
Automatically runs during builds:
- IPostBuildPlayerScriptDLLs implementation
- Runs after DLLs are copied to staging area
- Before IL2CPP conversion
- Obfuscates the actual DLLs used by IL2CPP
- Can cancel build on failure
Tools/
โโโ Unity Obfuscator/
โโโ [Open Window]
โโโ Run Tests
name: Build with Obfuscation
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Obfuscate Assemblies
uses: game-ci/unity-builder@v2
with:
targetPlatform: Android
customParameters: -executeMethod UnityObfuscator.Editor.ObfuscatorCLI.RunObfuscation
- name: Build IL2CPP
uses: game-ci/unity-builder@v2
with:
targetPlatform: Androidobfuscate:
stage: build
script:
- /opt/Unity/Editor/Unity -quit -batchmode
-projectPath $CI_PROJECT_DIR
-executeMethod UnityObfuscator.Editor.ObfuscatorCLI.RunObfuscation
-logFile obfuscation.log
artifacts:
paths:
- Library/ObfuscatorReports/Run integration tests:
Tools > Unity Obfuscator > Run Tests
Tests include:
- Configuration validation
- String encryption/decryption
- Backup manager
- Logging system
| Feature | Unity Obfuscator | Commercial Tools |
|---|---|---|
| Name Obfuscation | โ | โ |
| String Encryption | โ | โ |
| Control Flow | ๐ง External | โ Built-in |
| IL2CPP Compatible | โ | โ |
| Editor Integration | โ | โ |
| CLI/CI Support | โ | |
| Backup/Rollback | โ | |
| Open Source | โ | โ |
| Price | FREE | $$$ |
- Prevent all reverse engineering - Determined attackers can still reverse engineer
- Protect native code - Only protects managed C# assemblies
- Work with Assembly Definition References - Currently targets ScriptAssemblies only
- Obfuscate already-built games - Must be integrated during build
- โ Unity 2019.4 - 2022.3+ (LTS versions recommended)
- โ IL2CPP builds (Android, iOS, WebGL, Windows, etc.)
- โ Mono builds (with caveats)
โ ๏ธ .NET Standard 2.0/2.1- โ .NET Framework 3.5 (legacy)
- Build time: +10-30 seconds (depending on project size)
- Runtime: Negligible (except string encryption adds ~0.1ms per decryption)
"Mono.Cecil library not found"
- Download from https://www.nuget.org/packages/Mono.Cecil/
- Place in
Assets/UnityObfuscator/Libs/
"Assembly not found"
- Compile scripts first: Assets > Reimport All
- Verify path in configuration
Serialization issues
- Disable field obfuscation or add exclusions
- Preserve
[SerializeField]attributes
IL2CPP build fails
- Use rollback immediately
- Disable type obfuscation
- Add problematic namespaces to exclusions
See TROUBLESHOOTING.md for detailed solutions.
Assets/UnityObfuscator/
โโโ Editor/
โ โโโ ObfuscatorConfig.cs # Configuration model
โ โโโ ObfuscatorRunner.cs # Main orchestration
โ โโโ CecilObfuscator.cs # Built-in obfuscator
โ โโโ BackupManager.cs # Backup/rollback
โ โโโ ObfuscatorLogger.cs # Logging
โ โโโ ObfuscatorWindow.cs # Editor UI
โ โโโ ObfuscatorBuildHook.cs # Build integration
โ โโโ ObfuscatorCLI.cs # Command-line interface
โ โโโ ObfuscatorTests.cs # Integration tests
โ โโโ StringEncryption.cs # AES utilities
โโโ Runtime/
โ โโโ ObfuscatedString.cs # Runtime decryption
โโโ Libs/
โ โโโ Mono.Cecil.dll # (Download separately)
โโโ Config/
โ โโโ obfuscator_config.json # Default config
โโโ README.md # Full documentation
โโโ TROUBLESHOOTING.md # Issue resolution
Contributions welcome! Areas for improvement:
- Enhanced control flow obfuscation
- Symbol stripping
- Anti-tampering checks
- Performance optimizations
- Additional Unity version support
MIT License - See LICENSE file for details.
Free for personal and commercial use.
Inspired by:
- Unity Obfuscation Pro
- Obfuscator-LLVM
- Mono.Cecil project
Built with:
- Mono.Cecil - IL manipulation
- Unity Editor API
- ๐ Documentation
- ๐ Issues
- ๐ฌ Discussions
- Unity Package Manager distribution
- Enhanced control flow obfuscation
- Resource obfuscation
- Symbol stripping
- Anti-debugging features
- Assembly merging
- Unity 6 support
Made with โค๏ธ for the Unity community
If this plugin helps you, consider โญ starring the repository!