Get Demo
  • Windows
  • MacOS
  • Linux

Script section

The “Script” subsection of the “Project” section is for writing scripts using the built-in script language:

You can edit the code of the script on the main panel of the section. The right-click menu allows manipulating with fragments of the code.

Certain code blocks (cycles, functions) can be collapsed or expanded using a hierarchy sign (plus or minus) near the corresponding line number.

Right-click the section name to exclude the script from compilation. The excluded script is not executed and is not processed by the program. This parameter is saved in the project settings.

Files section

The “Files” section allows the developer to include to the protected EXE file additional data it requires for operation such as: images, data files, text resources and dynamically linked libraries. During execution of the protected EXE file, all types of data including DLL are loaded from memory of the process directly, bypassing writing of these data to the disk.

The Add File toolbar button allows adding a new file to the project. You can also add a new file with the context menu:

To adjust properties of the selected file, select it in the left list and edit its title, file name or properties.

To remove a file from the list of protected objects, right-click it with the mouse and choose “Delete”, or simply select it and press Del.

By right-clicking a section name, you can exclude the file from compiling. Compilation exclusions are saved to the project file.

Managing licenses

Initialization

By default, licensing functions are off. To enable them, you should create a pair of keys in the “Licenses” subsection of the “Project” section. If the project links to the license manager database (in older versions of VMProtect the license manager was a standalone program), VMProtect will suggest you to import the corresponding licenses to the project. When initialization finishes, the “Lock to Serial Number“ option will be available, and you will be able to create and process serial numbers.

Licenses

The “Licenses” section displays a full list of licenses in the left panel and parameters of the selected element in the main panel.

The right panel displays detailed information about the selected license. It also allows blocking a serial number, copying it to the clipboard or seeing hardware id information (by clicking it).

Creating a license

To add a new license, click the corresponding button on the toolbar. The Add License dialog appears:

The upper part of the dialog allows to specify main parameters of the new license. The lower section configures which parameters will be finally put into a serial number and allows adding additional dаta: for example, a hardware identifier or custom user data. When you finish filling the data, click OK, and VMProtect creates a new license.

Removing and blocking licenses

To delete a license, right-click it in the list of licenses and choose “Delete” in the context menu. Or simply select the license and press Del. To block a license, turn the “Blocked” parameter in the main panel to “Yes”.

There is a difference between deleting a license and clocking it. Removed serial numbers are not blocked by the licensing system. They simply do not exist any more in the database. If a license was created by mistake and the serial number never was sent to anyone, you can delete such a license. However, if the serial number was compromised, you should not just delete the license, you should block it instead. In this case the information about this serial number is passed to the licensing system, and it will not further accept this serial number.

Importing serial numbers

Serial numbers can be created not only in VMProtect, but also in third-party programs – key generators. Key generators allow you to automatically provide e-commerce agents with serial numbers whenever a license is purchased. To add such serial numbers to the database, you can import them. To import serial numbers, press Ctrl+I or select the “Import” command in the “Project” menu.

The first step to import a serial number is the import dialog:

If the entered license already presents in the database, the edit license window will be opened. Otherwise, the new license dialog appears where you can adjust the license information and confirm license creation by clicking the OK button. The license is added to the database.

Exporting license parameters

External key generators require secret key of the product to work properly. You can obtain this information in the most suitable form by using the “Export key pair” command from the “Project” menu. The following export dialog appears:

The “Export format” field allows you to select one of the supported formats, while the “Results of export” field contains the key data in the most appropriate format for the selected type of a key generator. To copy the contents to the clipboard, click the “Copy” button.

Functions for Protection section

This section is for choosing which functions must be protected.

Adding a function

To add a new object to the project, click the “Add Function” button on the toolbar, or select the corresponding item in the context menu:

A new function dialog appears:

Specify the address of the function, or start typing function’s name to the quick search box to select the function directly from the list on the “Functions” tab. Use multi-selection if you want to add several functions at once. All selected functions are added with the chosen protection options.

Options

  • Compilation type – select the way the object is compiled. Selecting a proper way to protect each object (procedure, function, code fragment) from examination and hacking results in optimal balance between performance and security of the code. VMProtect allows the developer to set the following compilation types for each protected object:
    • Mutation. The executable code is modified at the level of CPU commands – existing commands are mutated, various “garbage” commands are added and so on. This type of compilation is relatively weak in terms of protecting the code from hack or analysis. Its main purpose is to prevent detection of processed functions with automated signature analysers (PEiD+KANAL, IDA+FLIRT etc.). This type of compilation is worthwhile to protect library functions as they usually do not require strong protection from cracking and analysis. So it is enough to modify signatures so that a potential cracker couldn’t automatically detect particular libraries used in the application. Mutation provides low level of protection and analysis, but high performance of code execution.
    • Virtualization. The executable code is translated to the bytecode executed on a virtual machine. This compilation type should be applied to all critical parts of code that require both serious hacking and analysis countermeasures and high performance. Virtualization provides average protection from hacking and analysis and average execution speed.
    • Ultra (mutation + virtualization). The executable code is mutated on the processor instruction level and then is translated to the bytecode executed on a virtual machine. This type of compilation should be applied to all fragments of code when the speed of execution is not critical. Ultra protection provides high protection and is executed slowly.
  • Lock to Serial Number – if this option is enable, the protected function become unavailable without a valid serial number entered. In such a way you can limit access to certain functions of the application in the unregistered version.

Search

You can locate objects you need by their name using the quick search box:

You can use the following wildcard symbols in the search box:

  • * – replaces any number of symbols;
  • ? – replaces one symbol.

Adding a folder

You can add a folder to the project using the context menu:

Folders group protected objects and allow changing protection parameters (exclusion from compilation, type of compilation) of all objects in a folder at once.

Enter the name of a new folder:

Editing objects

The right side of the window displays contents of the selected object. If a protected object is selected in the project tree, the right part displays a disassembled representation of this object:

Code

If a folder is selected in the project tree, the right side displays the list of functions in that folder:

You can move functions to and from folders with simple drag-n-drop.

Project section

The “Project” section contains the following subsections:

  • Functions for Protection – allows selecting objects for protection
  • Licenses – allows managing licenses and serial numbers
  • Files – allows including additional data files or DLL to the protected EXE file
  • Script – allows enhancing protection capabilities by means of the built-in LUA script language
  • Options – allows configuring application protection parameters

Toolbar

The toolbar consists of the following elements:

  • Open a project or a protected file: 
  • Save the project: 
  • Name of the protected file:
  • Compile the project: 
  • Execute the original/protected file (pressing the down arrow allows to specify command line parameters): 
  • Default action (depends on the selected section):
  • Quick search box:

Help menu

  • Home Page – open VMProtect homepage;
  • Contents – open VMProtect help file;
  • About… – see general information about VMProtect.

Tools menu

  • Watermarks – brings up the Watermarks dialog window:

  • Preferences – brings up the Preferences window of the program:

Project menu

  • Add function – add a new function to the list of protected objects. You can specify the exact address of a function, or find that function by name:

  • Add folder – add a folder to the project:

    Usage of folders do not impacts protection of objects inside. Folders are only used to arrange protected objects in the project tree. You can move objects into a folder with simple drag-n-drop;

  • Add license – add a license to the project:

    This command adds a new user license and generate a license key based on entered user dаta: name, e-mail, date, order id and others. You can write this information inside the key, as well as to limit functionality of the license. For example, allow certain number of executions or specify an expiry date for the key.
    To add a license you should first generate a pair of keys:

  • Export Key Pair – exports project keys to the specified format of the key generator:

  • Import – imports a license from a serial number or from another project and adds it to the current project.
  • Compile – compile the protected application with the current protection settings. To compile the project, you can also click the toolbar button: .
  • Execute – executes the protected application. Original/protected executable of the application can be started with the button on the toolbar: . The down arrow allows you to specify command line parameters for execution.

Edit menu

Image