Command-Line Interface

The Demeanor CLI is a cross-platform .NET global tool.

demeanor [options] <assembly>
demeanor <command> [options]
CommandDescription
(default)Obfuscate an assembly
inspectorSeparate tool — see Metadata Inspector
licenseDecode and display license key information

Obfuscate Command

Input / Output

OptionDescriptionDefault
<assembly>Path to the .NET assembly to obfuscate(required)
--out <dir>Output directory./Demeanor/

Scope

OptionDescriptionDefaultTier
--include-publicsAlso obfuscate public/protected symbols. Use for executables not referenced by other assemblies.offEnterprise
--include-depsAlso obfuscate co-located private dependency assemblies.offEnterprise

Naming

OptionDescriptionDefaultTier
--names <mode>Alpha (a, b, c) or UnicodeAlphaUnicode: Enterprise
--prefix <ns>Namespace prefix for obfuscated type names(none)Community
--no-aggressiveDisable aggressive mode. When enabled: property and event metadata is stripped, compiler-emitted hints are removed, parameters are renamed, and default parameter values are stripped.(enabled)Enterprise
--no-virtual-renameDisable virtual override renaming. When enabled, overrides of framework methods like ToString, Equals, GetHashCode, and interface implementations are renamed; the runtime continues to dispatch correctly to the renamed methods. The decompiled output cannot be recompiled.(enabled)Enterprise
--no-enum-deletionDisable deletion of enum members. When enabled, decompilers see empty enums with no symbolic names or values; Enum.ToString() returns the raw integer.(enabled)Enterprise

Protection Features

All protection features are enabled by default at Enterprise tier. At Community tier, only renaming is active.

OptionDescriptionDefault
--no-stringsDisable string encryption(enabled)
--no-constantsDisable integer constant encryption(enabled)
--no-resourcesDisable encryption of embedded resources(enabled)
--no-call-hidingDisable call hiding (breaks the static call graph so decompilers cannot resolve which methods call which)(enabled)
--proxy-threshold <N>Minimum method body size for call hiding (in bytes)16
--cfg <level>Reorder, Predicates, or FlattenFlatten
--no-cfgDisable control-flow obfuscation(enabled)
--no-hinder-reflectionDisable reflection hindrance. When enabled (default), reflection-based tools become less reliable and the .NET SDK’s ildasm refuses to open the assembly.(enabled)
--no-anti-tamperDisable anti-tamper. When enabled, the application terminates immediately if the assembly is modified after the build. NativeAOT-compatible.(enabled)
--no-anti-debugDisable anti-debug. When enabled, the application exits when a managed or native debugger attaches at runtime. NativeAOT-compatible.(enabled)

Exclusions

OptionDescription
--exclude <name>Exclude a type or member by fully-qualified name. Repeatable.
--xr <pattern>Exclude by regex pattern. Repeatable.
--xa <assembly>Exclude an assembly (with --include-deps). Repeatable.
--add-assembly <name>Include a dynamically referenced assembly. Repeatable.

Category Exclusions

OptionDescription
--no-enumerationsDisable enumeration renaming
--no-eventsDisable event renaming
--no-fieldsDisable field renaming
--no-methodsDisable method renaming
--no-parametersDisable parameter renaming
--no-propertiesDisable property renaming
--no-renameDisable all renaming (types, methods, fields, properties, events, parameters). A member-level [Obfuscation(Feature="rename", Exclude=false)] or [Obfuscation(Feature="rename-propagate", Exclude=false)] opts the marked symbol back in.
--no-resource-namesDisable resource name renaming
--no-serializableExclude serializable types and their fields
--no-typesDisable type renaming

Reporting & Incremental (Enterprise)

OptionDescription
--reportGenerate JSON report mapping original to obfuscated names
--report-file <path>Path for the report file
--prior-report <path>Prior report for incremental obfuscation
--satellite-assembliesUpdate resource names in satellite assemblies
--sa-cultures <culture>Restrict satellite processing to specific cultures

Strong Name Re-signing

OptionDescription
--keyfile <path>Strong name key file (.snk)
--keycontainer <name>Strong name key container

Output Control

OptionDescriptionDefault
--license <key>License key (also reads DEMEANOR_LICENSE env var)
--verboseVerbose obfuscation statisticsoff
--quietSuppress all non-error outputoff
--debugPreserve debug data (PDB)off
--no-logoSuppress the startup banneroff

Metadata Inspector

The metadata inspector is a standalone CLI tool that installs alongside Demeanor (no license required to use it). See the full Inspector documentation.

inspector <assembly> [options]

license Command

Decode and display license key information.

demeanor license YOUR_LICENSE_KEY

Also reads from the DEMEANOR_LICENSE environment variable if no argument is provided.