New-generation software protection. The protected parts of code are executed on the virtual machine, which makes it really difficult to analyze and crack the protected program. The built-in disassembler and using a MAP file will allow you to quickly select the necessary parts of the code protected against cracking.
功能特性
支持的文件和格式
-
VMProtect支持32位和64位可執行文件,動態加載的庫和驅動程序。
序列號
-
VMProtect的終極版允許您以最小的努力向受保護的應用程序添加序列號。該功能受PayPro Global電子商務提供商的支持
用戶界面
-
VMProtect具有兩種用戶界面模式:簡單模式和專家模式。
控制臺版本
-
VMProtect的專業版和旗艦版具有控制臺版本,該控制臺版本支持命令行參數,并且可以在自動構建過程中使用。
VMProtect版本功能比較
“
”表示全部支持;“
”表示部分支持;“-”表示不支持
VMProtect使用流程
慧都提供VMProtect試用版,下載安裝后可申請30天試用云許可
購買后可獲取正式版加殼工具及正式授權軟許可或者加密鎖。
如果您有任何問題,可隨時在線咨詢,我們竭誠為您服務!
A bit of theory
VMProtect is a completely new software protection tool. Unlike most available protectors, VMProtect modifies the source code of the program. VMProtect transforms parts of code in the file being protected into a program (bytecode hereinafter) executed on the virtual machine (VM hereinafter). You can also think of VM as a virtual processor with a system of commands really different from that used in Intel 8086 processors. For example, VM has no commands responsible for comparing two operands, there are no conditional and unconditional jumps, etc. As you can see now, hackers will have to develop a completely specific tool for analyzing and decompiling bytecode, which will take a lot of time. Unfortunately, we know that there is no unbreakable protection that is why we should achieve the level of protection when expenses on breaking it will be comparable with (or even excede!!!) expenses on purchasing the protected program by legal means. Anyway, you should keep in mind that VMProtect is only a tool helping you to "hide" the main software protection mechanisms.
Preparing a program for protection
To begin with, create a simple project in Delphi consisting of a form (Form1), a text edit field (Edit1) and a button (Button1):
pic 1.
After the user clicks Button1, the program will check if the password is correct and display the corresponding message (correct or incorrect):
procedure TForm1.Button1Click(Sender: TObject);
begin
if StrToIntDef(Edit1.Text, 0) mod 17=13 then
MessageDlg('Correct password', mtInformation, [mbOK], 0)
else
MessageDlg('Incorrect password', mtError, [mbOK], 0);
end; |
The algorithm of determining if the password is correct is very simple - the password is converted into a number. Then, this number is divided by 17 and if the remainder is 13, the password is correct. Otherwise the password is incorrect.
Before compiling our project, we will enable generating a MAP file in the options of the project:

pic 2.
We need the MAP file for VMProtect to be able to determine the address of a procedure by its name later. After that we perform "Build Project1" and get a compiled text project and the MAP file.
Using markers
It makes sense to use markers when you need to protect only part (or some parts) of a procedure. You should use assembler insertions to mark sections:
- The start marker of the protected block:
asm
db $EB,$10,'VMProtect begin',0
end; |
- The end marker of the protected block:
asm
db $EB,$0E,'VMProtect end',0
end; |
When you later work with VMProtect, markers will have their own unique names like "VMProtectMarker" + sequential marker number.
Watermarks
VMProtect provides you with a unique feature of adding hidden information about the owner of the file to the protected file. A watermark is an array of bytes that must be unique for each of your users. After you embed watermarks into the protected file, you will always be able to determine its owner and take the corresponding measures later (for instance, if the cracked program is distributed illegally).
Working with VMProtect
Load the project using the "File"-"Open" menu item. Add a procedure responsible for checking if the password is correct to the project:
pic 3.
VMProtect can process the protected code in different ways depending on the selected compilation type. Let us take each compilation type in detail:
- Mutation. The executed file is modified on the level of processor commands (existing commands are modified, all kinds of garbage commands are added, etc.). This compilation type poorly protects the code it processes against hacking and analyzing and mainly prevents functions being processed from determining with signature analyzers (PEiD+KANAL, IDA+FLIRT, etc.). As a rule, there is no need to protect library functions against hacking and analyzing and it will be enough just to change their signatures for the hacker to be unable to automatically determine what libraries you use in your applications (the level of protection against hacking and analyzing is low, the code execution rate is high).
- Virtualization. Executable code is converted into bytecode executed by the virtual machine. This compilation type should be used for all critical parts of code where the execution rate is also important together with preventing hacking and analyzing (the level of protection against hacking and analyzing is medium, the code execution rate is medium).
- Ultra (mutation + virtualization). The executable code is modified on the level of processor commands and after that it is converted into bytecode executed by the virtual machine. This compilation type should be used for all parts of code where the execution rate is not important (the level of protection against hacking and analyzing is high, the code execution rate is low).
After you add all necessary procedures to the project, switch to the "Options" tab:
- Debug mode (determining external addresses). Applied to find addresses there are referenced to from "external" sections of code.
- Hide constants. If this option is enabled, it will be impossible to find the addresses of variables or called functions in the open form.
- Dynamic creation of online commands. The VM interpreter can execute not all Intel 8086 commands that is why such commands are executed in the form they were present in the code of the protected section. Creating online commands dynamically also makes it more difficult to crack bytecode.
- Check the integrity of VM objects. While executing the program, the VM interpreter will automatically read the checksum of random sections in the interpreter, bytecode and watermarks that is used when commands are being performed. The integrity check of VM objects protects the interpreter, bytecode and watermarks against modifications.
- Watermakrs. Select the watermark you want to embed into the protected file.
- VM section name. You can specify the name of new sections the VM interpreter and bytecode for the interpreter will be written to.
- Remove fixup elements (only for EXE files). Compilers (in particular, Delphi) create a list of fixup elements for EXE files. The operating system does not use these elements while loading EXE files. If you enable this option, VM will use the area occupied by the list of fixup elements for its needs.
After you specify all necessary options, start compiling the project. After the project is compiled, a new file (for example, TEST.VMP.EXE) will be created next to the protected file (for example, TEST.EXE). The specified procedures will run on the virtual machine in this file.