PreEmptive Protection - Dotfuscator
Community Edition User Guide

Check Attributes

When processing an input assembly, Dotfuscator recognizes a number of attributes that dictate how it should inject Checks into the assembly. By using these attributes on your source code, you can configure Dotfuscator's Checks inline with your application code. This page details these attributes.

Note that you can also configure Checks using the Dotfuscator user interface. For information on when you might want to configure via the user interface and when you might want to use attributes, see the When to Use Attributes section of the Attributes Overview page.

Important: Injection in general is controlled by the Enable injection global option. If this option is disabled, no code will be injected despite any attributes.

Referencing the Attributes

Dotfuscator ships with a reference assembly that defines the Check Attributes. The assembly is named PreEmptive.Attributes.dll and is located in the same directory where Dotfuscator is installed.

The easiest way to find the path to this assembly is to:

  1. Open a Dotfuscator command prompt.

  2. Run the command where PreEmptive.Attributes.dll and copy the result.

You can then add a reference to this assembly to your project. Note that the assembly has no dependencies besides the framework itself, so it can be copied to a different location if desired.

Attribute Listing

This section lists the attributes that Dotfuscator recognizes to configure its Check injection.

Properties that are only recognized by Professional Edition are omitted.

TamperCheckAttribute

Instructs Dotfuscator to inject a Tamper Check with the annotated method as its sole location.

In prior versions of Dotfuscator, this attribute was known as InsertTamperCheckAttribute. That attribute is now deprecated; we recommend using TamperCheckAttribute.

Namespace: PreEmptive.Attributes

Applies to: Method

Multiple allowed on one code element: No

Requirements:

Properties:

  • Action: The Check Action the Check will take if it detects a tampered application.

  • ApplicationNotificationSinkElement: Specifies the kind of code element that the Check will use to inform the application of the Check's result. This code element is known as an Application Notification Sink.

    • Defaults to None, which means the application is not notified of the Check's result.

    • If Method, MethodArgument, or Delegate, the Check calls a method, delegate method argument, or delegate field with the signature void(bool).

    • If Field or Property, the Check sets a bool field or property.

    • DefaultAction is deprecated. Please set Action to Exit for the same behavior.

  • ApplicationNotificationSinkName: Specifies the name of the Application notification sink.

    • Required unless ApplicationNotificationSinkElement is a None or DefaultAction.
  • ApplicationNotificationSinkOwner: Specifies the name of the type that declares the Application notification sink.

    • Defaults to the type that defines the annotated method.

DebuggingCheckAttribute

Instructs Dotfuscator to inject a Debugging Check with the annotated method as its sole location.

Namespace: PreEmptive.Attributes

Applies to: Method

Multiple allowed on one code element: No

Requirements:

Properties:

  • Action: The Check Action the Check will take if it detects a debugger attached to the application.

  • ApplicationNotificationSinkElement: Specifies the kind of code element that the Check will use to inform the application of the Check's result. This code element is known as an Application Notification Sink.

    • Defaults to None, which means the application is not notified of the Check's result.

    • If Method, MethodArgument, or Delegate, the Check calls a method, delegate method argument, or delegate field with the signature void(bool).

    • If Field or Property, the Check sets a bool field or property.

    • DefaultAction is not supported. Dotfuscator will error if this setting is used.

  • ApplicationNotificationSinkName: Specifies the name of the Application Notification Sink.

    • Required unless ApplicationNotificationSinkElement is a None or DefaultAction.
  • ApplicationNotificationSinkOwner: Specifies the name of the type that declares the Application Notification Sink.

    • Defaults to the type that defines the annotated method.

ShelfLifeCheckAttribute

Instructs Dotfuscator to inject a Shelf Life Check with the annotated method as its sole location.

A Shelf Life Activation Key is required to use this attribute.

In prior versions of Dotfuscator, this attribute was known as InsertShelfLifeAttribute. That attribute is now deprecated; we recommend using ShelfLifeCheckAttribute.

Namespace: PreEmptive.Attributes

Applies to: Method

Multiple allowed on one code element: No

Requirements:

Properties:

  • ActivationKeyFile: The path to a valid Shelf Life Activation Key file at build time.

    • Always required.

    • The file is not needed after Dotfuscator processes the assembly.

  • ExpirationDate: The expiration date of the application, expressed either as an absolute date (YYYY-MM-DD) or as the number of days beyond the date of Dotfuscator's processing.

    • Always required.
  • ExpirationNotificationSinkElement: Controls Shelf Life exit behavior.

    • Defaults to None, which means the application continues after the Shelf Life Check, even if it has expired.

    • If DefaultAction, the application will exit if the Shelf Life Check detects the application has expired.

    • All other settings are only supported in Professional Edition.

Dotfuscator Version 5.32.0.6134. Copyright © 2017 PreEmptive Solutions, LLC