Table of ContentsVersion: 2024.2On this page📘 Eazfuscator.NET Documentation Copyright © 2008–2024 GapotchenkoTable of ContentsWhat Is Eazfuscator.NET?1. Introduction1.1. Definition of Obfuscation1.2. Why .NET Applications Need Obfuscation1.2.1. In Theory1.2.2. In Practice1.3. When to Use Obfuscation1.4. Drawbacks of The Obfuscation2. Quick Start3. How Does Eazfuscator.NET Work?3.1. Obfuscation Techniques3.1.1. Symbol Renaming3.1.2. String Encryption3.1.3. Constant Literals Pruning3.1.4. Overload Induction3.1.5. Class Hierarchy Linerization3.1.6. XML Documentation Filter3.1.7. XAML Renaming3.2. Optimization Techniques3.2.1. Merging of String Literal Duplicates3.2.2. Sealing of Terminal Classes3.2.3. String Compression3.2.4. Code Optimizations4. Advanced Features4.1. About Advanced Features4.2. Declarative Obfuscation Using Custom Attributes4.2.1. System.Reflection.ObfuscateAssemblyAttribute4.2.2. System.Reflection.ObfuscationAttribute4.2.3. .NET Compact Framework, Silverlight, Windows Store and .NET Core Projects4.2.4. Indirect Declarative Obfuscation4.2.5. Obfuscation Attribute Priorities4.3. Conditional Obfuscation4.3.1. Types4.3.2. Type Members4.3.3. Options are Combinable4.3.4. Diagnostics4.4. Symbol Encryption4.5. Advanced Symbol Renaming Options4.5.1. Symbol Renaming with Printable Characters4.5.2. Type Renaming Patterns4.6. Advanced String Encryption Options4.7. Code Control Flow Obfuscation4.8. Assemblies Merging4.8.1. Introduction4.8.2. Instructions4.8.3. Tuning4.8.4. Internalization4.8.5. Distribution Considerations4.8.6. Custom Parameters for Merging4.9. Assemblies Embedding4.9.1. Introduction4.9.2. Embedding vs. Merging4.9.3. Instructions4.9.4. Tuning4.9.5. Distribution Considerations4.9.6. Ahead-of-Time Compilation Limitations4.9.7. Troubleshooting4.10. Resource Encryption4.10.1. Introduction4.10.2. Instructions4.10.3. Compression4.10.4. Selective Resource Encryption4.10.5. Options are Combinable4.11. Serialization Tuning4.11.1. Overview4.11.2. Binary Serialization and Obfuscation4.11.3. Self-Interoperability4.11.4. Non-stable Self-Interoperable Serialization4.11.5. Stable Self-Interoperable Serialization4.12. Debugging4.12.1. Introduction to Debugging After Obfuscation4.12.2. How It Works4.12.3. Possible Security Risks4.12.4. Tuning4.12.5. Debug Renaming4.13. PEVerify Integration5. Sensei Features5.1. About Sensei Features5.2. Code Inlining5.2.1. Introduction5.2.2. Instructions5.2.3. Method Flattening5.3. Module Initializers5.3.1. Introduction5.3.2. Instructions5.3.3. Execution Order5.4. Private Protected Visibility5.5. Custom Attributes Removal5.6. Design-Time Usage Protection5.6.1. Overview5.6.2. How It Works5.6.3. Default Behavior5.6.4. Instructions5.6.5. Tuning5.7. Resource Sanitization5.7.1. Introduction5.7.2. Instructions5.7.3. Minification5.7.4. Selective Resource Sanitization5.7.5. Options are Combinable5.8. Method Parameters Obfuscation5.8.1. Renaming5.8.2. Optional Parameters Pruning5.9. Deterministic Obfuscation6. Virtualization6.1. Introduction6.2. How to Use Code Virtualization6.3. How to Use Data Virtualization6.4. Homomorphic Encryption7. Concepts7.1. Introduction7.2. Probing Paths7.2.1. How to Define Probing Paths?7.3. Script Variables7.4. Log7.5. Glob Mask7.5.1. Syntax7.5.2. Behavior7.5.3. Examples7.6. Assembly Mask7.6.1. Syntax7.6.2. Behavior7.6.3. Examples7.7. Regex Mask7.7.1. Syntax7.7.2. Behavior7.7.3. Examples7.8. Warnings and Errors7.8.1. Warning Suppression7.8.2. Treat Warnings as Errors7.9. Compatibility7.9.1. Compatibility Version7.9.2. Demanding the Specific Version of Eazfuscator.NET8. Integration8.1. Introduction8.2. Microsoft Visual Studio Integration8.2.1. Overview8.2.2. How Does It Work?8.2.3. Code Completion and Suggestions8.2.4. Help System8.3. JetBrains Rider Integration8.3.1. Overview8.3.2. How Does It Work?8.4. MSBuild Integration8.4.1. Overview8.4.2. Post-build Event Integration8.4.3. MSBuild-level Integration8.5. Command-Line Interface8.5.1. Options8.5.2. Environment Variables9. Deployment9.1. About Eazfuscator.NET Deployment9.2. Microsoft Installer (MSI)9.3. NuGet Package Manager10. Best Practices10.1. Introduction10.2. General Best Practices10.3. Keeping the Balance10.3.1. Human Factors10.4. Keeping It Simple10.4.1. The Paralysis of Simplicity11. How-Tos11.1. How to Exclude a Specific Assembly From Distribution11.1.1. Overview11.1.2. NuGet Package11.1.3. Setup12. Troubleshooting12.1. My application is not working properly after obfuscation. Why does it happen?12.2. Troubleshooting Features12.2.1. Stack Trace Decoding12.3. Inspection-Friendly Obfuscation12.3.1. Preserving the Original Names12.3.2. Disabling ILDASM Suppression12.4. About InternalsVisibleToAttribute12.4.1. Solution #1. Do not use InternalsVisibleToAttribute at all12.4.2. Solution #2. Swap with EditorBrowsable attribute12.4.3. Solution #3. Hide the warning12.4.4. Solution #4. Ignore the attribute12.5. "Option Strict Off" Compatibility for VB.NET12.5.1. Introduction12.5.2. Compatibility Mode12.5.3. Instructions12.6. Nonintrusive Debugging12.6.1. Introduction12.6.2. Sample Scenario12.7. Common Errors12.7.1. EF-1099: Unable to load input assembly, reflection load failed12.7.2. EF-3035: Assembly or part of it is already obfuscatedGlossaryBibliography