Home » Support » User Manual » Introduction » History of changes

History of changes

Version 3.0

[*] PE: Added support for exceptions in x64 code
[*] Mach-O: Added support for SDK functions
[*] Ultimate: Added support for licensing functions for drivers and applications written on VB6
[*] Ultimate: Functionality of DLL Box has been enhanced. Now the protected application can envelope any files including ActiveX servers with optional automatic registration in the virtual registry.
[*] Virtual Box detection has been improved
[*] Script engine changed to LUA
[*] New VM architecture
[+] A new function VMProtectIsProtected is added to the SDK

Version 2.13

[!] PE: Added support for Delay Import
[!] PE: Improved compatibility with VS2012
[!] PE: Improved compatibility with Embarcadero RAD Studio XE3
[!] PE: Improved compatibility with MinGW
[!] Ultimate: Improved compatibility of DLL Box with Windows 8
[+] WebLM: Added support for mbstring.func_overload = 2
[+] WebLM: In the activation code a new field “Expiry date” has been added. (Now VMProtectActivateLicense can return ACTIVATION_EXPIRED if the current date exceeds the expiry date)
[+] WebLM: Fields “Expiry date” and “Maximum build date” now contain the “days since purchase” value

Version 2.12

[!] PE: Fixed bugs in x64 applications
[!] PE: Fixed an error that occurred if an application had the IMAGE_DLLCHARACTERISTICS_NX_COMPAT flag
[+] PE: Added support for Windows 8
[+] WebLM: Added Russian and Chinese language

Version 2.11

[!] Fixed a bug during packing in х64 applications
[!] PE: Fixed a bug that occurred when the “Import protection” option was used
[!] PE: Fixed a bug emerging when a TLS section with relocation tables was processed
[+] Ultimate: Added activation/deactivation
[+] Mach-O: Added packing
[*] PE: Support for DriverVerifier
[*] PE: Improved support for SEH for MSVC
[*] Mach-O: Improved support for IndirectSymbols

Version 2.10

[!] Fixed a bug that occurred when the “Resource protection” option was used
[!] Fixed a bug that occurred when the “Import protection” option was used
[!] Fixed a bug that occurred when x64 drivers without relocation tables were protected
[+] Added support for Max OS X executables (Mach-O format)
[+] Added support for HLT command
[+] New API is added to SDK – VMProtectFreeString
[*] Improved identification of markers and strings marked with VMProtectDecryptStringA/VMProtectDecryptStringW
[*] Now you can use relative paths in output file name and license parameters
[*] Improved support for SEH for Delphi
[*] SenseLock Edition: Added the “Resource protection” option
[*] SenseLock Edition: A license manager is added to the GUI version
[*] SenseLock Edition: programming of keys is added to the GUI version
[*] Licenses in the license manager can now be copied and pasted to/from the clipboard

Version 2.09

[!] Fixed a bug that occurred when a debugger was detected under Windows 2000
[!] Fixed a bug that occurred while disassembling PMULHUW and LDMXCSR commands
[!] Fixed a bug that occurred when memory protection was used(file integrity wasn’t checked)
[!] Ultimate: Fixed a bug that occurred when running protected files under Windows 2000 (this required EncodePointer/DecodePointer functions from kernel32.dll)
[*] Improved virtualization of exception handlers for Visual C
[*] Resource protection is now available in Lite and Professional versions
[*] Added support for EnumResourceTypes, EnumResourceNames and EnumResourceLanguages when using resource protection (available only when called from the main module)
[+] Added support for exceptions for Borland C Builder
[+] Ultimate: Improved performance of VMProtectGetSerialNumberState and VMProtectGetSerialNumberData functions
[+] The script for TLicenseManager now includes the Save method
[-] The “Move resources to the end of the file” option is removed. The resource section is always the last one now.

Version 2.08

[!] Fixed a bug that occurred when assembling the TEST [XXXX], REG command
[!] Fixed a bug that occurred while disassembling х64 commands with the 0×67 prefix
[*] Improved support for files with small values of SectionAlignment
[*] Improved placement of markers and strings for Intel Compiler 12 and Lazarus
[*] Improved import protection
[*] Ultimate: Now you can load project files with licensing parameters
[+] Ultimate: Added resource protection
[+] Ultimate: The script now includes classes: TLicense and TLicenseManager

Version 2.07

[!] Fixed an error occurred when working with the license manager if Windows had other system language than English
[+] In the expert mode you can now change the default messages: “Debugger is detected”, “Virtualization tools are detected”, “File is corrupted” and “Serial number is required”
[+] The script class TVMProtector now has the Messages property
[*] Improved compatibility of memory protection with some antiviruses

Version 2.06

[!] Fixed a bug with marker name identification for MinGW
[!] Fixed an error occurred during import protection in х64 files
[!] Fixed an error occurred during virtualization of FILD WORD PTR [XXXX]
[!] Fixed an error occurred while disassembling PSRLW
[!] Fixed an error occurred in DLL Box when the antivirus was active
[*] Project file is now saved as XML
[*] Script is now stored in a project file
[*] Ultimate: License manager is now in the GUI version
[*] Ultimate: Significantly sped up execution of code locked to a serial number
[+] Added support for MAP files for MinGW
[+] Added support for JCLDEBUG
[+] The script class TPEDirectory now has the Clear method
[+] The script class TVMProcedure now has properties: InputSize and OutputSize
[+] Ultimate: New API are added to SDK – VMProtectBeginVirtualizationLockByKey and VMProtectBeginUltraLockByKey

Version 2.05

[!] Fixed errors with line identification for MinGW programs
[!] Fixed the “Out of system resources” error occurred when many procedures were added to the project
[!] Fixed an error occurred in the console version during output of strings
[*] MAP file date is now taken from its contents
[+] Ultimate: Added examples on working with the licensing system (on MSVC and Delphi)
[+] Ultimate: Added source codes of the serial number generator on MSVC
[+] Ultimate: Added DLL Box (available only for EXE files)
[+] Ultimate: A new class TInternalDLLs is added to the script
[+] Ultimate: In the script class TVMProtector a new property is added: InternalDlls
[+] In the script class TMapRecord a new property is added: SegmentName
[+] In the script class TIntelRecord a new property is added: Operands
[+] Czech language is added

Version 2.04

[!] Fixed an error occurred during obfuscation of FDIVR [ESP+XXXX]
[!] Fixed an error occurred during obfuscation of SWITCH in x64 applications
[*] When using the “Memory protection” option, a file is checked for integrity now
[*] Ultimate: Better licensing module integration to the protected program
[+] Added support for files with overlay
[+] Ultimate: Added an example of C# serial number generator
[+] Ultimate: License manager now has export of product parameters for a generator on C#
[+] Ultimate: The console version now has the “-lf” parameter to specify a file with licensing parameters
[+] Added French help file

Version 2.03

[!] Fixed an error occurred when using import protection in SYS files (base address of hal.dll wasn’t determined under Windows 7)
[!] Fixed an error occurred during obfuscation of command using CRx registers in SYS files
[!] Fixed small issues
[*] Improvements in licensing system of the Ultimate version
[+] French language is added

Version 2.02

[!] An error is fixed in SenseLock Edition occurred when several programs using different licenses on the key run simultaneously (users of SenseLock Edition should update master key firmware)
[!] Fixed EntryPoint disassembly error in Delphi programs
[!] Fixed small issues
[*] Important improvements in licensing system of the Ultimate version
[*] SenseLock Edition now uses the licensing system of the Ultimate version (users of SenseLock Edition should update master key firmware)
[*] Improved detection of strings marked with VMProtectDecryptStringA/VMProtectDecryptStringW
[+] GUI now supports Unicode
[+] Traditional Chinese is added

Version 2.01

[!] Fixed small issues in the installer, the license manager and SDK
[*] VMProtect is registered with its own licensing system now
[+] Added Chinese Simplified

Version 2.0

[!] Fixed disassembly and virtualization bugs of CALL FWORD PTR [XXXX] and JMP FWORD PTR [XXXX] commands
[!] An error is fixed in SenseLock Edition occurred when the serial number is asked after the standard PIN of a user has changed
[!] Fixed an error occurred during virtualization of SWITCH in х64 applications
[!] Fixed an error occurred while disassembling commands: ROL, ROR, RCL, RCR, SHL, SHR, SAL and SAR, with the REX prefix in х64 applications
[!] Fixed an error occurred during virtualization of the CMOVxx command
[!] Fixed small issues
[*] The help file in Russian is updated
[*] The help file in English is updated
[+] Added the licensing system (available only in Ultimate version)
[+] New API are added to the SDK – VMProtectDecryptStringA and VMProtectDecryptStringW
[+] The script class TVMProcedure now has a new property CompilationOptions
[+] The script class TVMProcedure now has properties SELicense and SEVersion (available in SenseLock Edition only)
[+] The script class TVMProtector has new properties added: VMSectionName and VMExecutorCount
[+] The script class TVMProtector has new properties added: SEMasterPassword, SEUserPIN, SEKeyID, SELicense and SEVersion (available in SenseLock Edition only)
[-] The option “Create online commands dynamically” is removed

Version 1.81

[!] Fixed an error occurred during execution of mutated code on Pentium 4 processors
[!] Fixed an error occurred during execution of virtualized code on some Athlon processors
[!] Fixed errors occurred during disassembly and virtualization of exception handler structures with an exception filter (for program on Delphi and Borland C++ Builder)
[!] Fixed an error occurred when using several VM in 64-bit files
[!] Fixed small issues
[*] Enhanced detection of marker names (for programs on Visual C)
[*] Significantly reduced memory consumption during compilation
[*] The “HTML” resource is not packed now
[*] The help file in Russian is updated
[+] Added wildcard search of procedures in the “Master” mode
[+] Added new packing mode featuring higher compression rate
[+] Added support for files with TLS callbacks
[+] New API is added to the SDK – VMProtectIsValidImageCRC

Version 1.8

[!] Fixed errors occurred during import protection in SYS files
[!] Fixed errors occurred during memory protection in DLL/SYS files
[!] Fixed errors occurred when using multiple VM in DLL/SYS-files
[!] Fixed an error occurred during mutation of the code with exception handlers
[!] Fixed an error occurred when memory protection and watermarks were used simultaneously
[!] Fixed small bugs
[*] Improved detection of references to marked strings (you don’t have to mark every reference to a protected string now)
[*] Improved import protection
[*] Improved debugger detection
[*] The help file in Russian is updated
[+] The GUI version now allows saving project files under different names
[+] Now you can open project files
[+] Added Sandboxie detection
[+] Added support for files compiled with the /SAFESEH key
[+] Added support for CodeGear 2009
[+] Now you can have named markers (when VMProtectBegin/VMProtectBeginMutation/VMProtectBeginVirtualization/VMProtectBeginUltra from VMProtectSDKxx.dll/VMProtectDDKxx.sys are used)
[+] New API are added to the SDK (VMProtectIsDebuggerPresent and VMProtectIsVirtualMachinePresent)
[+] A new utility was added to SenseLock Edition – “Remote update and licensing system”
[+] SenseLock Edition now has key id lock

Version 1.7

[!] Sections with SHAREABLE+WRITABLE flags are not packed now
[!] Fixed small issues
[*] Improved import protection for SYS files
[*] Improved packing of SYS files (packed sections are not flagged with WRITABLE any more)
[*] Improved debugger detection
[+] Added the “Memory protection” option (this option prevent changes to be made to memory while the application is running)
[+] Added the “Detect virtualization tools (VMware/Virtual PC)” option
[+] The script class TPEFile now has a property EntryPoint

Version 1.65

[!] Fixed small issues
[*] Improved import protection
[*] Improved debugger detection
[+] Added identification of unpaired markers (unpaired markers are available in the general list of objects)
[+] Added markers to apply a pre-defined compilation type: VMProtectBeginVirtualization, VMProtectBeginMutation and VMProtectBeginUltra
[+] Added Chinese Traditional language

Version 1.64

[!] Fixed a bug occurred during execution of a packed file, if it had “TYPELIB”, “REGISTRY” and “MUI” resources
[!] Fixed the R6002 error occurred during execution of a packed file (for programs written on Visual C)
[!] Fixed a bug occurred when the “Import protection” option was used in 64-bit SYS files
[!] Fixed small issues
[*] The settings file is now saved to %APPDATA%/PolyTech/VMProtect
[*] Improved import protection
[+] Added the option “Virtual machines” (different virtualized fragments of code are executed on different virtual machines with different architecture)
[+] Added the option “Debugger detection” (if a debugger is detected during the protected application execution, the app shows a corresponding message and closes)
[+] The script class TPESection now has a property IncludedInPacking
[+] Added support for IRETD command
[+] Added an example of using markers in Lazarus

Version 1.63

[!] Fixed an error occurred when using the “Import protection” option
[!] Fixed small issues
[+] A new event was added to the script: OnBeforePackFile
[+] The script class TPEFile now has a new property Handle
[+] Added an example of using markers in Free Pascal
[*] Improved integrity control of VM objects

Version 1.62

[!] Fixed errors occurring when using the “Import protection ” option
[!] Fixed an error occurred when handling an exception in the TRY/EXCEPT/END block in the “Ultra” mode (for programs written on Delphi and Borland C++ Builder)
[*] Improved import protection for SYS files
[+] Every object of a project now can have its own compilation options for individual performance tuning (individual options are configured in the project tree)
[+] Added the “Move resources to the end of the file” option
[+] Added an example of using extended markers (see Examples\Scripts\UseExtMarkers)

Version 1.61

[!] Fixed an error occurred when starting packed files under Windows 95/98
[!] Fixed small issues
[+] An ability to pass a file name via the command line is added to the Lite version
[+] A history is added in the “Master” mode
[+] Language selection is added in the “Master” mode
[+] Added the “Import protection” option (recommended for use along with packing of the output file)
[+] In the console version, a new parameter “-we” is added(with this parameter all warnings are displayed as error)
[+] A new class TPEResourceRecords is added to the script
[+] The script class TPEFile now has a new property ResourceRecords

Version 1.6

[!] Fixed small issues
[*] Improved work with identical strings(now identical strings are displayed as a single object with multiple elements inside)
[+] Added an option to pack the output file
[+] A new class TPEExportRecords is added to the script
[+] The script class TPEFile now has a property ExportRecords
[+] A new event OnBeforeSaveFile is added to the script
[+] The help file in Chinese is added (translation by Wang Xiaopeng)
[+] Added MAP-file date/time check. (If modification date and time of the MAP-file differ from those of the protected file, the MAP-file is not loaded)

Version 1.56

[!] Fixed an error occurred during virtualization of BT, BTC, BTR and BTS commands
[!] Fixed small issues
[*] List of options is sorted in order of priority
[*] Improved support for SEH for VC8
[*] Improved dynamic online-command production
[*] Improved VM object integrity control
[+] Added support for PREFETCH and PREFETCHW commands
[+] New functions CompareText and AnsiCompareText are added to the script
[+] The script class TPEFile now has a new property Size
[+] Added an example of using markers in MinGW
[+] Added Chinese language (translation by Wang Xiaopeng)
[+] In the procedure adding dialog wildcard search is added (“*” and “?” are allowed)
[+] Messages of the compiler now includes output file size

Version 1.55

[!] Fixed an error occurred when working with a file having unaligned ImageSize value
[!] Fixed an error occurred when calculating TRY block beginning in Delphi programs
[!] Fixed an error occurred when a “mixed” code was processed in Discardable and NonDiscardable section of SYS-files
[!] Fixed an error occurred during virtualization of 64-bit DLL/SYS-files
[*] The “Encrypt registers upon exit of the VM” option is restored
[+] A new class TIniFile is added to the script
[+] The script class TPEFile now has new properties and methods
[+] The GUI-version now features a calculator to calculate file offsets by addresses
[+] Added Italian language (translation by Gabriele Lanza)

Version 1.54

[!] Fixed an error occurred during mutation of the PUSH ESP command
[!] ИFixed an error occurred during virtualization of the FLDCW [ESP+xxxx] command
[!] Fixed an error occurred during obfuscation of the bytecode
[*] GUI is enhanced
[+] Added German and Spanish languages
[+] Added support for scripts
[+] In the console version a parameter is added to specify a script file name

Version 1.53

[!] Fixed errors occurred during virtualization of code in DLL/SYS-files
[*] Code virtualization improvements
[*] In the console version “running” percent is removed when the output is directed to a file
[+] Added an option to insert markers for x86-64
[+] Added an ability to create folders in a project
[+] In the console version a new parameter is added to identify the file name of a project

Version 1.52

[!] Fixed an error occurred during mutation of CMOVxx, CMPXCHG and CMPXCHG8B commands
[!] Fixed an error occurred during mutation of LEA ESP,[ESP+xxxx] command
[*] The RCL and RCR commands are added to the basic logic of VM
[+] Added support for x86-64
[+] In the GUI-version, the “Options” tab now can be set to display an output file name
[+] Added the help file in Russian and English

Version 1.51

[!] Fixed an error occurred during creating a “Relocation Table” of zero length
[!] Fixed an error occurred during mutation of the CALL [xxxx] command in the “Mutation” mode in DLL/SYS files
[!] In the Delphi example, VMProtectBegin definition now includes a command preventing optimization of VMProtectBegin (optimization could lead to a non-functional protected application)
[+] Added the “Autosave project after compiling” option

Version 1.5

[!] Fixed an error occurred while dragging files to the main window
[!] Fixed an error occurred when working with read-only files
[!] Fixed small issue during compilation in the “Ultra” mode
[*] A protected file now inherits attributes of the original file
[+] the list of protected procedures can now include strings (string assignment must be selected with markers)
[+] The installation package includes examples of using markers in Borland C++ Builder, Delphi, MASM, Visual Basic and Visual C++
[+] Added an option: “Integrate to shell”

Version 1.4

[!] Fixed an error occurred during mutation of IMUL, MUL, IDIV, DIV commands
[!] Fixed an error occurred during virtualization of multiple CASE tables following one by one
[!] Fixed an error occurred during virtualization of POP word/dword ptr [esp+xxxx] and IMUL reg8 commands
[!] Fixed an error occurred while disassembling MOVNTPS and MOVNTPD commands
[+] Added a new type of compilation “Ultra” (mutation + virtualization)”
[+] Added compilation type selection in the add/modify procedure window
[+] Added search for watermarks in processes (used for searching watermarks in packed files)
[*] Enhanced compatibility with ASM compilers (TASM, MASM etc.)

Version 1.3

[!] Fixed an error occurred during emulation of the FILD word ptr [xxxx] command
[+] Each procedure can be specified a certain compilation type (“Mutation” or “Virtualization”)

Version 1.25

[+] Added support for SEH for VC7-8
[+] Added support for markers in Visual Basic (begin and end of a fragment are marked with the following lines: Call VarPtr(“VMProtect begin”) and Call VarPtr(“VMProtect end”))
[*] In the registered version, the VM interpreter completely changes now (to prevent automatic detection of protection by signature scanners such as PEiD, RDG Packer Detector and others)

Version 1.24

[+] Added a possibility to insert watermarks to a protected file
[*] VM interpreter now supports multi-threaded applications (no need to create a procedure to allocate memory for interpreter’s needs)
[-] The option to allocate memory for VM interpreter’s neds is removed.

Version 1.23

[!] Fixed small issues [+] Added the “Master” mode [+] The procedure tree now displays links [*] Options “Hide constants”, “Dynamically create online commands”, “Encrypt registers on jumps”, “VM object integrity control” and others are only available for registered users now

Version 1.22.2

[!]Fixed an error occurred during compilation of projects with the “Memory allocation in the interpreter” option enabled

Version 1.22

[!] Fixed small issues
[+] Added a possibility to check integrity of a bytecode (requires enabling the “VM object integrity control” option on)

Version 1.21

[!] Fixed an error occurred during emulation of CMPXCHG8b, if operands are EAX and EDX
[+] Now interpreter contains only those commands that will be used to execute a bytecode
[-] Some commands were removed from the basic logic of VM (to complicate analysis and decompiling of a bytecode)

Version 1.2

[!] Fixed an error occurred when the Bound Import directory is moved
[+] Added a possibility to include marked parts of the code to the project(the beginning and the end of the fragment are marked by the following code assembler insertions – “db $EB,$10,’VMProtect begin’,0″ and “db $EB,$0E,’VMProtect end’,0″)
[+] Added an option to include exported functions to the project
[-] Removed the “Encrypt bytecode” option (bytecode is now always encrypted)

Version 1.1

[!] Fixed errors occurred while: emulation of SBB (wrong state of some flags); emulation of CMOVxx, CMPXCHG and CMPXCHG8b (when the second operand was addressed using ESP or a DWORD value)
[+] Added support for SEH in VB6 (native)
[+] Added support for MAP-files generated by IDA
[+] Added an option for batch adding of procedures
[+] Added displaying of links to commands directly in the list of procedures
[+] Added a new option: “Encrypt registers on jumps”

Version 1.09

[*] End of procedure detection process while disassembling of cycles is improved
[+] For UPX compatibility, Shareable flag of Writeable sections is cleared (if the old relocation table is used for VM needs)

Version 1.08

[*] Big fragments of code disassembly is sped up
[*] Metamorphism mechanism of bytecode interpreter is improved

Version 1.07

[!] Fixed errors occurred when: working with PE files (when code section virtual size was equal to zero); obfuscating FPU commands (errors led to wrong results); disassembly (CWD was detected instead of CWDE); emulation of ROL and ROR commands (if the argument was 1-byte)
[+] Added support for SSE2 command group

Version 1.06

[!] Fixed an error corrupting the A flag state after emulating SUB, CMP, DEC, NEG, CMPXCHG, SCAS and CMPS commands.
[!] Fixed an error occurred when working with an unaligned file
[+] Added support for BSF, BSR and CMPXCHG8b instructions
[+] For multi-threaded applications, you can specify a memory allocation procedure for the VM interpreter (memory allocation procedure must be defined as fastcall)

Version 1.05

[+] Added support for FUCOMPP and FCMOVxx instructions
[+] The type of strings (ANSI/Unicode/Pascal) and comments for structure fields made by compilers are now shown when looking at parts of the code
[+] Added a metamorphism procedure for the bytecode interpreter
[+] Added new compilation options: “Bytecode encryption” and “Strip relocations (for EXE files only)”
[-] Removed the “Obfuscate bytecode” option (now always on)

Version 1.04

[!] Fixed an error occurred while detecting SEH handlers for C++
[*] Bytecode obfuscator is totally reworked
[+] Relocations are highlighted in the code now

Version 1.03

[+] “Free space” from original parts of code is used to store the bytecode
[+] Added detection of “short” pascal-format strings (first byte defines the length of a string)

Version 1.02

[!] Fixed errors related to execution of online-commands in DLL/SYS
[*] Changed the calculation algorithm of bytecode checksum
[+] Added an option “VM interpreter integrity control” (also works as an anti-debug technique if the interpreter is being debugged and the debugger uses INT 03 as breakpoints).
[+] Usage of “old” relocation tables to store the bytecode

Version 1.01

[!] Fixed an error occurred when files with relocations were created(the error arose during operation of DLL/SYS-files in Windows 95/98/Me)
[!] Fixed small issues in the disassembler
[+] Added support for instructions: F2XM1, FABS, FCLEX, FCOS, FDECSTP, FINCSTP, FINIT, FLDCW, FLDLN2, FLDLG2, FPREM, FREM1, FPTAN, FRNDINT, FSIN, FSTCW, FTST, FYL2X, FPATAN, FLDZ, FISTP
[+] Added support for MAP-files of Borland C Builder
[+] Now you can select the language of the interface and messages (Russian and English are available)

Version 1.0

[!] Fixed small bugs in the interface
[+] Added support for CMOV and CMPXCHG

Version 0.97

[!] Fixed small bugs in the interface
[+] Added support for Virtual Pascal

Version 0.96

[!] Fixed error in the compiler (incorrect work with the C flag while compiling NEG and SBB instructions; fixed POPF processing; fixed wrong bytecode CRC check when processing external conditional jumps)
[!] Fixed bugs in the VM interpreter related to bytecode obfuscation
[+] Improved processing of a MAP-file generated by C/C++ compilers (procedure names contain information about arguments)

Version 0.94

[!] Fixed many errors