EH Deobfuscator is a .NET assembly deobfuscation tool written in C# using dnlib for IL code manipulation.
- String Decryption: Automatically detect and decrypt obfuscated strings in .NET assemblies
- Modular Architecture: Plugin system for various deobfuscation processes
- Dependency Injection: DI container for managing dependencies
- Logging: Detailed logging of the deobfuscation process
- Extensibility: Easy addition of new deobfuscation processes
- .NET Framework 4.8
- C# 14.0
- dnlib - for working with .NET metadata
- Dependency Injection - for application architecture
src/
├── EH.Core/ # Core application functionality
├── EH.DeobfuscationCore/ # Deobfuscation system core
├── EH.DeobfuscationCore.Abstraction/ # Abstractions for deobfuscation
├── EH.DeobfuscationProcesses/ # Concrete deobfuscation processes
├── EH.BaseDeobfuscationProcess/ # Base class for processes
├── EH.Logging/ # Logging system
├── EH.Logging.Abstraction/ # Abstractions for logging
├── EH.StringValidation/ # String validation
├── EH.StringValidation.Abstraction/ # Abstractions for validation
└── EH.Merging/ # Assembly merging
- Automatically detects string decryption method calls
- Replaces encrypted strings with decrypted ones
- Logs all decryption operations with method tokens
- Place the target assembly
Assembly-CSharp.dll
in the application directory - Run the deobfuscator
- The system will automatically process the assembly, applying all available deobfuscation processes
- Check the logs to monitor the deobfuscation process
The system maintains detailed logs of all operations:
- Decrypted strings with their values
- Processed method tokens
- Errors and warnings during operation
The project is built on the principles of:
- Dependency Inversion - using abstractions
- Single Responsibility - each process performs one task
- Extensibility - easy addition of new deobfuscation processes
- Configurability - using attributes for DI configuration
To add a new deobfuscation process:
- Inherit from
EhBaseDeobfuscationProcess
- Override the
Deobfuscate
method - Add the
DiDescript
attribute for registration in the DI container
[DiDescript(Order = 3, Lifetime = EDiServiceLifetime.Singleton,
ServiceType = typeof(IEhDeobfuscationProcess), Key = "YourProcess")]
public class YourDeobfuscationProcess : EhBaseDeobfuscationProcess
{
protected override void Deobfuscate(ModuleDefMD module)
{
// Your deobfuscation logic here
}
}
See the LICENSE file for license rights and limitations.