Skip to content

Cloud-W/UnityObfuscator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

8 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Unity Obfuscator

A comprehensive, open-source Unity Editor plugin for obfuscating IL2CPP assemblies. Protect your game code from decompilation and reverse engineering without modifying source files.

๐ŸŽฏ Overview

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

๐Ÿ“ฆ Installation

  1. Clone or download this repository
  2. 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/
  3. Restart Unity Editor
  4. Open Tools > Unity Obfuscator

๐Ÿš€ Quick Start

Method 1: Editor Window (Recommended for first-time use)

  1. Open Tools > Unity Obfuscator
  2. Configure your settings
  3. Click Run Obfuscation to test
  4. Review the results in Console and Library/ObfuscatorReports/
  5. Enable Auto Run on Build for automatic obfuscation

Method 2: Automatic Build Integration

Enable auto-run in configuration:

{
  "enableObfuscation": true,
  "autoRunOnBuild": true
}

Now obfuscation happens automatically during builds!

Method 3: Command Line (CI/CD)

# Run obfuscation
Unity -quit -batchmode -projectPath . \
  -executeMethod UnityObfuscator.Editor.ObfuscatorCLI.RunObfuscation

# Rollback
Unity -quit -batchmode -projectPath . \
  -executeMethod UnityObfuscator.Editor.ObfuscatorCLI.Rollback

๐Ÿ“– Documentation

๐Ÿ”ง Configuration

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"]
}

๐ŸŽฏ How It Works

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.

๐Ÿ”’ What Gets Obfuscated?

Name Obfuscation

// 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) { }
}

String Encryption

// Before
string apiKey = "sk_live_abc123xyz";

// After
string apiKey = ObfuscatedString.Decrypt("eJw7Kj4+Pi...");

Protected Elements

  • Unity framework classes (UnityEngine., UnityEditor.)
  • Serialized fields ([SerializeField])
  • Unity callbacks (Start, Update, etc.)
  • System libraries
  • Your custom exclusions

๐Ÿ›ก๏ธ Safety Features

Automatic Backups

Every obfuscation creates a timestamped backup:

Library/ObfuscatorBackups/
โ”œโ”€โ”€ 20250112_143000/
โ”‚   โ”œโ”€โ”€ Assembly-CSharp.dll
โ”‚   โ””โ”€โ”€ Assembly-CSharp.pdb
โ”œโ”€โ”€ 20250112_154500/
โ””โ”€โ”€ 20250112_165000/

One-Click Rollback

Something wrong? Restore instantly:

  • Editor: Tools > Unity Obfuscator > Rollback
  • CLI: Unity -executeMethod UnityObfuscator.Editor.ObfuscatorCLI.Rollback

Comprehensive Logging

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

๐ŸŽฎ Unity Integration

Editor Window

Unity Obfuscator Window

Access via: Tools > Unity Obfuscator

Features:

  • Visual configuration
  • One-click obfuscation
  • Instant rollback
  • Configuration management

Build Hook

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

Menu Integration

Tools/
โ””โ”€โ”€ Unity Obfuscator/
    โ”œโ”€โ”€ [Open Window]
    โ””โ”€โ”€ Run Tests

๐Ÿค– CI/CD Integration

GitHub Actions Example

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: Android

GitLab CI Example

obfuscate:
  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/

๐Ÿ“Š Tests

Run integration tests:

Tools > Unity Obfuscator > Run Tests

Tests include:

  • Configuration validation
  • String encryption/decryption
  • Backup manager
  • Logging system

๐Ÿ†š Comparison

Feature Unity Obfuscator Commercial Tools
Name Obfuscation โœ… โœ…
String Encryption โœ… โœ…
Control Flow ๐Ÿ”ง External โœ… Built-in
IL2CPP Compatible โœ… โœ…
Editor Integration โœ… โœ…
CLI/CI Support โœ… โš ๏ธ Limited
Backup/Rollback โœ… โš ๏ธ Limited
Open Source โœ… โŒ
Price FREE $$$

โš ๏ธ Important Notes

What This Plugin CANNOT Do

  • 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

Compatibility

  • โœ… 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)

Performance Impact

  • Build time: +10-30 seconds (depending on project size)
  • Runtime: Negligible (except string encryption adds ~0.1ms per decryption)

๐Ÿ› Troubleshooting

Common Issues

"Mono.Cecil library not found"

"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.

๐Ÿ“ Project Structure

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

๐Ÿค Contributing

Contributions welcome! Areas for improvement:

  • Enhanced control flow obfuscation
  • Symbol stripping
  • Anti-tampering checks
  • Performance optimizations
  • Additional Unity version support

๐Ÿ“œ License

MIT License - See LICENSE file for details.

Free for personal and commercial use.

๐Ÿ™ Acknowledgments

Inspired by:

  • Unity Obfuscation Pro
  • Obfuscator-LLVM
  • Mono.Cecil project

Built with:

๐Ÿ“ฎ Support

๐Ÿ—บ๏ธ Roadmap

  • 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!

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages