ConfuserEx/docs/ProjectFormat.md

3.8 KiB

ConfuserEx Project Format

ConfuserEx projects (*.crproj) is an XML formatted document describing the ConfuserEx project.

For details of the format, please refer to the XML schema at Confuser.Core\Project\ConfuserPrj.xsd.

Element project

Element project is the root element of the project document.

Attributes:

outputDir:
The directory which ConfuserEx stores the output files.

baseDir:
The base directory of all relative path used in the project document. If this attribute value is also a relative path, the result depends on the implementation. In the offical implementation (Confuser.CLI), it would be based on the location of project file.

seed:
The seed of the random generator in protection process.

debug:
Indicates whether the debug symbols (*.pdb) are generated. Currently unused.

Elements:

rule:
The global protection rules applied to all modules. Optional.

packer:
The packer setting. Optional. Currently unused.

module:
The settings of individual modules.

probePath:
The directories in which ConfuserEx searches for dependencies.

Element module

Element module describes the settings of individual modules.

Attributes:

path:
The path of the module.

snKey:
The path to the Strong Name Key used to sign the module. Optional.

snKeyPass:
The password of the SNK if a PFX container is used in snKey. Optional.

Elements:

rule:
The protection rules applied to the module.

Element rule

Element rule describes a rule that determine how the protections are applied.

Attributes:

inherit:
Indicates whether this rule inherits the settings from the previous rules. Default to true.

pattern:
The pattern expression used to match the target components of this rule.

preset:
The protection preset of the rule. Possible values are none, minimum, normal, aggressive and maximum. Default to none.

Elements:

protection:
The protection settings.

Element protection and packer

Element protection and packer describe the settings of individual protection/packer.

Attributes:

action:
Indicates whether the protection are to be added or removed from settings. Possible values are add and remove. Default to add.

id:
The identifier of the protection/packer.

Elements:

argument:
The arguments that passed to the protection. Optional.

Element argument

An argument that is passed to a protection.

Attributes:

name: The name of the argument.

value: The value of the argument.

Applying rules

The rules are applied from global rules (in project element) to local rules (in module element), from begin to end. ConfuserEx will keep a list of protections for every items, and applies the rules in order.

For each rules, ConfuserEx will do:

  1. If the item does not match with the rule's pattern, skip the rule.
  2. If the rule does not inherit previous settings (i.e. no inherit), clear the marking on the item.
  3. Mark the items with the protections contained in the specified preset value of the rule.
  4. For each protection settings in the rule:
  5. If action is remove, remove the protection from the marking.
  6. If action is add, add the protection settings to marking.

The pattern is a simple function-based expression that evaluated for every items. If it is evaluated to true, the item is matched with the pattern.

Here are some example expressions: true: Matches all items. name('X'): Matches all items that has name 'X'. member-type('type') and full-name('NS.Type'): Matches types that have full name 'NS.Type'.

Examples

ConfuserEx projects that work for ILSpy and PaintDotNet can be found under additional directory as examples.