Version history
Version 2.11
[!] x64 binaries packing error fixed
[!] PE: import protection error fixed
[!] PE: TLS procession error fixed (for TLS sections with relocs)
[+] Ultimate: activation module added
[+] Mach-O: Packing added
[*] PE: DriverVerifier support added
[*] PE: Better SEH support for MSVC compiler
[*] Mach-O: Better support for IndirectSymbols
Version 2.1
[!] Resource protection error fixed
[!] Import protection error fixed
[!] Fixed protection of 64-bit drivers without relocs
[+] Mac OS X files (Mach-O) support added
[+] Added support of HLT command
[+] New API in the SDK: VMProtectFreeString
[*] Markers and encrypted strings detection enhanced
[*] Relative paths are supported in the source file name and licensing parameters
[*] SEH support enhanced for Delphi
[*] SenseLock Edition: resource protection feature added
[*] SenseLock Edition: GUI version got a license manager
[*] SenseLock Edition: GUI version got a dongle flashing feature
[*] License manager allows copying and pasting licenses from the clipboard
Version 2.09
[!] Debugger detection fixed for Windows 2000
[!] Fixed the disassembling of PMULHUW and LDMXCSR commands
[!] Memory protection issue fixed (related to checking the file on disk)
[!] Ultimate: fixed problem with running of protected files with licensing on Windows 2000
[*] Enhanced Visual C exception handlers virtualization
[*] Resource protection is available in Professional edition
[*] Resource protection enhanced with support of EnumResourceTypes, EnumResourceNames and EnumResourceLanguages functions (for the main executable only)
[+] Added support for Borland C Builder exceptions
[+] Ultimate: Improved speed of VMProtectGetSerialNumberState and VMProtectGetSerialNumberData functions
[+] Scripting class TLicenseManager enhanced with the Save method
[-] The “Move resources to the end of file” options is removed – the resources are always moved to the end of file now.
Version 2.08
[!] Fixed issue with the assembling of TEST [XXXX], REG command
[!] Fixed issue with the disassembling of x64-commands with 0×67 prefix
[*] Enhanced support of files with small SectionAlignment value
[*] Enhanced markers and strings detection for Intel Compiler 12 and Lazarus
[*] Enhanced import protection
[*] Ultimate: Support of “licenses-only” projects
[+] Ultimate: Added resource protection
[+] Ultimate: Classes TLicense and TLicenseManager are added to scripting
Version 2.07
[!] Fixed error in license manager, if it runs on non-English version of Windows
[+] Error messages are fully customizable now
[+] Added “Messages” property to TVMProtector in scripts – allows to customize error messages
[*] Enhanced compatibility the memory protection with some antivirus products
Version 2.06
[!] Fixed marker detection in MinGW files
[!] Fixed import protection bug in 64-bit files
[!] Fixed virtualization of FILD WORD PTR [XXXX] instruction
[!] Fixed the incorrect disassembling of PSRLW instruction
[!] Fixed DLL Box errors with some antivirus applications
[*] VMP files are now in XML format
[*] Scripts are stored in VMP files as well, VMS are not used anymore
[*] Ultimate: License Manager is moved to VMProtect interface
[*] Ultimate: The speed of code locked to serial number is significantly improved
[+] Added support of MinGW map files
[+] Added support of JCLDEBUG library
[+] Scripts: new method Clear in TPEDirectory
[+] Scripts: new properties InputSize and OutputSize in TVMProcedure
[+] Ultimate: Two new API functions in SDK: VMProtectBeginVirtualizationLockByKey and VMProtectBeginUltraLockByKey
Version 2.05
[!] Fixed string detection errors for MinGW applications
[!] Fixed “Out of system resources” error, caused by adding a great number of procedures to a project
[!] Fixed string output error in the console version
[*] Timestamps of MAP files are now taken from the MAP files’ content
[+] Ultimate: Added licensing system examples (MSVC and Delphi)
[+] Ultimate: Added source code of MSVC serial number generator
[+] Ultimate: Added DLL Boxing (EXE files only)
[+] Ultimate: New script class added: TInternalDLLs
[+] Ultimate: Script class TVMProtector got a new property InternalDlls
[+] Script class TMapRecord got a new property SegmentName
[+] Script class TIntelRecord got a new property Operands
[+] Czech language added
Version 2.04
[!] Fixed error related to the obfuscation of FDIVR [ESP+XXXX]
[!] Fixed error related to the obfuscation of SWITCH in x64 applications
[!] Small glitches fixed
[*] Memory protection now checks the file on disk as well
[*] Ultimate: Better integration of licensing module and protected application
[+] Files with overlays are now supported
[+] Ultimate: Added serial number generator example on C#
[+] Ultimate: License manager now exports product data for C# serial number generator
[+] Ultimate: Console version has a new parameter “-lf” that defines file with licensing parameters
[+] French help file was added
Version 2.03
[!] Fixed import protection bug for SYS-files under Windows 7 (base address of hal.dll was not detected properly)
[!] Fixed incorrect obfuscation of commands that use CRx reigsters in SYS-files
[!] Small bugs fixed
[*] Licensing system improved in Ultimate version
[+] French language added
Version 2.02
[!] SenseLock Edition’s bug fixed, that may appear while using several licenses simultaneously if they are stored in the same dongle (it is neccessary to update license in the master key)
[!] Entry Point disassembly error fixed (for Delphi apps only)
[!] Small bugs were fixed
[*] Licensing system improved in the Ultimage edition
[*] SenseLock Edition uses VMProtect Ultimate licensing (it is neccessary to update license in the master key)
[*] Improved detection of strings, marked with VMProtectDecryptStringA/VMProtectDecryptStringW
[+] Unicode support added
[+] Added Chinese Traditional translation
Version 2.01
[!] Small bugs fixed in installer, License Manager and SDK
[*] VMProtect now uses its own licensing system
[+] Added Chinese Simplified language
Version 2.0
[!] Bugs have been fixed solving the errors during disassembly and virtualization of the CALL FWORD PTR [XXXX] and JMP FWORD PTR [XXXX] instructions
[!] Bug fixed solving the error in the SenseLock Edition during the key serial number request after the standard user PIN is changed
[!] Bug fixed solving the error during the virtualization of the SWITCH in the x64 applications
[!] Bug fixed solving the error during the virtualization of the ROL, ROR, RCL, RCR, SHL, SHR, SAL and SAR instructions, which have REF preffix in the x64 applications
[!] Minor bugs have been fixed
[*] The Russian help file has been updated
[*] The English help file has been updated
[+] The licensing system has been added (available only in the Ultimate version)
[+] A new API is now available in the SDK – VMProtectDecryptStringA and VMProtectDecryptStringW
[+] The CompilationOptions property for the TVMProcedure class has been added to the script
[+] The SELicense and SEVersion properties for the TVMProcedure class has been added to the script (available only in SenseLock Edition)
[+] The VMSectionName and VMExecutorCount properties for the TVMProtector class has been added to the script
[+] The SEMasterPassword, SEUserPIN, SEKeyID, SELicense and SEVersion properties for the TVMProtector class has been added to the script (available only in SenseLock Edition)
[-] The "Create online commands dynamically" option has been removed
Version 1.81
[!] Bug fixed solving the error during the execution of mutated code on Pentium 4 CPUs
[!] Bug fixed solving the error during the execution of virtualized code on some Athlon CPUs
[!] Bugs have been fixed solving the errors during disassembly and virtualization of structures describing exception handlers with a filter for the exception class (for programs in Delphi and Borland C++ Builder)
[!] Bug fixed solving the error in case several VMs in 64-bit files are used
[!] Minor bugs have been fixed
[*] Marker names are now better determined (for programs in Visual C)
[*] RAM usage during the compilation process has been considerably reduced
[*] The "HTML" resource is no longer packed
[*] The Russian help file has been updated
[+] The list of procedures by mask has been added in the "Wizard" mode
[+] A new packing mode with a higher compression rate is now available
[+] Files with TLS callbacks are now supported
[+] A new API is now available in the SDK – VMProtectIsValidImageCRC
Version 1.8
[!] Bugs have been fixed solving the errors during the import protection in SYS files
[!] Bugs have been fixed solving the errors during the memory protection in DLL/SYS files
[!] Bugs have been fixed solving the errors during the use of several VMs in DLL/SYS files
[!] Bug fixed solving the error during the mutation of the code with an exception handler
[!] Bug fixed solving the error in cases of memory protection and watermarks used simultaneously
[!] Minor bugs have been fixed
[*] References to strings marked with markers are now better determined (no need to mark all references to the protected string any more)
[*] Import protection has been improved
[*] Debugger detection has been improved
[*] The Russian help file has been updated
[+] Now it is possible to save project files with different names in the GUI version
[+] Now it is possible to open project files
[+] Sandboxie detection has been added
[+] Files compiled with the /SAFESEH key are now supported
[+] CodeGear 2009 is now supported
[+] Now it is possible to name markers (when using VMProtectBegin/VMProtectBeginMutation/VMProtectBeginVirtualization/VMProtectBeginUltra from VMProtectSDKxx.dll/VMProtectDDKxx.sys)
[+] New APIs (VMProtectIsDebuggerPresent and VMProtectIsVirtualMachinePresent) have been added to the SDK
[+] The "Remote update and licensing system" tool has been added for the SenseLock Edition version
[+] Association with the key identifier has been added for the SenseLock Edition version
Version 1.7
[!] Sections with SHAREABLE+WRITABLE flags are no longer packed
[!] Minor bugs have been fixed
[*] The import protection for SYS files has been improved
[*] SYS files are now packed better (the WRITABLE flag is no longer set for packed sections)
[*] Debugger detection has been improved
[+] The "Memory protection" option has been added (this option protects memory against changes while the application is running)
[+] The "Virtualization tool detection (VMware/Virtual PC)" option has been added
[+] The EntryPoint property for the TPEFile class has been added to the script
Version 1.65
[!] Minor bugs have been fixed
[*] Import protection has been improved
[*] Debugger detection has been improved
[+] It is now possible to detect unpaired markers (unpaired markers are available in the list of all objects)
[+] Markers with predefined compilations types are now available: VMProtectBeginVirtualization, VMProtectBeginMutation and VMProtectBeginUltra
[+] Traditional Chinese has been added
Version 1.64
[!] Bug fixed solving the error when a packed file with the "TYPELIB", "REGISTRY" and "MUI" resources is running
[!] Bug fixed solving the error R6002 when a packed file is running (for programs in Visual C)
[!] Bug fixed solving the error when the "Import protection" option is used in 64-bit SYS files
[!] Minor bugs have been fixed
[*] The settings file is now saved to the %APPDATA%/PolyTech/VMProtect folder
[*] Import protection has been improved
[+] The "Virtual Machines" option has been added (different virtualized sections of code will be run on different virtual machines with different architectures)
[+] The "Debugger detection" option has been added (in case a debugger is detected, the protected application will show the corresponding message and be closed)
[+] The IncludedInPacking property for the TPESection class has been added to the script
[+] IRETD is now supported
[+] An example with markers used in Lazarus has been added
Version 1.63
[!] Bug fixed solving the casing errors when the "Import protection" option is used
[!] Minor bugs have been fixed
[+] The OnBeforePackFile event has been added to the script
[+] The Handle property for the TPEFile class has been added to the script
[+] An example with markers used in Free Pascal has been added
[*] The control over the integrity of VM objects has been improved
Version 1.62
[!] Bug fixed solving the casing errors when the "Import protection" option is used
[!] Bug fixed solving the error when an exception in the TRY/EXCEPT/END block is processed in the "Ultra" mode (for programs in Delphi and Borland C++ Builder)
[*] The import protection for SYS files has been improved
[+] Each object in a project can now have its compilation options for more precise performance configuration (individual options are configured in the project tree)
[+] The "Move resources to end of file" option has been added
[+] An example of using extended markers has been added (the Examples\Scripts\UseExtMarkers folder)
Version 1.61
[!] Bug fixed solving the error during the launch of packed files under Windows 95/98
[!] Minor bugs have been fixed
[+] Now it is possible to pass the file name in the command line in the Lite version
[+] History has been added in the "Wizard" mode
[+] Language selection has been added in the "Wizard" mode
[+] The "Import protection" option has been added (it is recommended to use it together with packing the output file)
[+] The "-we" parameter has been added in the command-line version (all warnings will be displayed as errors if this parameter is used)
[+] The TPEResourceRecords class has been added to the script
[+] The ResourceRecords property for the TPEFile class has been added to the script
Version 1.6
[!] Minor bugs have been fixed
[*] Working with the same strings has been improved (now the same strings are displayed as one object containing several records)
[+] It is now possible to pack the output file
[+] The TPEExportRecords class has been added to the script
[+] The ExportRecords property for the TPEFile class has been added to the script
[+] The OnBeforeSaveFile event has been added to the script
[+] The help file is now available in Chinese (translated by Wang Xiaopeng)
[+] When a MAP file is loaded, its modification date and time are checked (if the modification date and time of the MAP file differ from the modification date and time of the protected file, the MAP file will not be loaded)
Version 1.56
[!] Bug fixed solving the error during the virtualization of the BT, BTC, BTR and BTS instructions
[!] Minor bugs have been fixed
[*] The list of protection options is sorted by their priority
[*] The SEH support for VC8 has been improved
[*] The dynamic creation of online commands has been improved
[*] The control over the integrity of VM objects has been improved
[+] The PREFETCH and PREFETCHW instructions are now supported
[+] The CompareText and AnsiCompareText functions have been added to the script
[+] The size property for the TPEFile class has been added to the script
[+] An example with markers used in MinGW has been added
[+] The Chinese language has been added (translated by Wang Xiaopeng)
[+] Now it is possible to search with the "*" and "?" wildcards in the Add Procedure dialog box
[+] Information about the size of the output file is now displayed in compiler messages
Version 1.55
[!] Bug fixed solving the error while working with a file having the unaligned ImageSize value
[!] Bug fixed solving the error while determining the beginning of the TRY block for programs written in Delphi
[!] Bug fixed solving the error while processing mixed code from Discardable and NonDiscardable sections in SYS files
[!] Bug fixed solving the error during the virtualization of 64-bit DLL/SYS files
[*] The "Encrypt registers at VM output" option has been restored
[+] The TIniFile class has been added to the script
[+] Additional properties and methods have been added to the script for the TPEFile class
[+] The calculator for estimating address offsets in a file has been added in the GUI version
[+] The Italian language has been added (translated by Gabriele Lanza)
Version 1.54
[!] Bug fixed solving the error during the mutation of the PUSH ESP instruction
[!] Bug fixed solving the error during the virtualization of the FLDCW [ESP+xxxx] instruction
[!] Bug fixed solving the error during the obfuscation of bytecode
[*] Improvements in the GUI
[+] The German and Spanish languages have been added
[+] Scripts are now supported
[+] The parameter for specifying the name of the script file has been added in the command-line version
Version 1.53
[!] Bugs have been fixed solving the errors during the virtualization of code in DLL/SYS files
[*] Improvements in code virtualization
[*] Running percentage numbers have been removed in the command-line version when the text output is redirected to a file
[+] It is now possible to insert markers for x86-64
[+] It is now possible to create folders in the project
[+] The parameter for specifying the name of the project file has been added in the command-line version
Version 1.52
[!] Bug fixed solving the error during the mutation of the CMOVxx, CMPXCHG and CMPXCHG8B instruction
[!] Bug fixed solving the error during the mutation of the LEA ESP,[ESP+xxxx] instruction
[*] The RCL and RCR instructions have been added to the VM basic logic
[+] x86-64 is now supported
[+] Now it is possible to specify the name of the output file on the "Options" tab in the GUI version
[+] Help in the Russian and English languages has been added
Version 1.51
[!] Bug fixed solving the error while creating a zero-length "Relocation Table"
[!] Bug fixed solving the error occurring when the CALL [xxxx] instruction is mutating in the "Mutation" mode in DLL/SYS files
[!] In the Delphi example, the instruction preventing VMProtectBegin from optimization has been added to the VMProtectBegin statement (the optimization of VMProtectBegin could prevent the protected file from running correctly)
[+] The "Autosave project after compilation" option has been added
Version 1.5
[!] Bug fixed solving the error when files were dragged and dropped onto the main window
[!] Bug fixed solving the error while working with files having the "Read only" attribute
[!] Minor bugs during compilation in the "Ultra" mode have been fixed
[*] Now the protected file has exactly the same attributes as the original file
[+] Strings can now be added to the list of protected procedures (strings must be marked with markers)
[+] Now the distribution package has examples with markers in Delphi, MASM, Visual Basic and Visual C++
[+] The "Intregrate into shell" option has been added
Version 1.4
[!] Bug fixed solving the error during the mutation of the IMUL, MUL, IDIV, DIV instructions
[!] Bug fixed solving the error during the virtualization of several consecutive CASE tables
[!] Bug fixed solving the error during the virtualization of the POP word/dword ptr [esp+xxxx] and IMUL reg8 instructions
[!] Bug fixed solving the error while disassembling the MOVNTPS and MOVNTPD instructions
[+] A new compilation type has been added: "Ultra (mutation + virtualization"
[+] The compilation type option has been added to the dialog box for adding/editing a procedure
[+] Searching processes for watermarks has been added (it is used to search packed files for watermarks)
[*] Compatibility with ASM compilers has been improved (TASM, MASM, etc)
Version 1.3
[!] Bug fixed solving the error during the emulation of the FILD word ptr [xxxx] instruction
[+] It is possible to specify the compilation type for every procedure ("Mutation" or "Virtualization")
Version 1.25
[+] SEH for VC7-8 is now supported
[+] Markers are now supported in Visual Basic (the start and end of the section are marked with insertions in Basic – Call VarPtr("VMProtect begin") and Call VarPtr("VMProtect end"))
[*] Now the VM interpreter is completely transformed in the registered version of the program (it prevents signature scanners like PEiD, RDG Packer Detector, etc from automatic protection detection)
Version 1.24
[+] It is now possible to insert watermarks in the protected file
[*] The VM interpreter now completely supports multithreaded applications (now there is no need to create a procedure allocating memory for interpreter needs)
[-] The option for selecting the memory allocation function has been removed
Version 1.23
[!] Minor drawbacks have been fixed
[+] The "Wizard" mode has been added
[+] References are now shown in the procedure tree
[*] The "Hide constants", "Create online commands dynamically", "Encrypt registers at jumps", "Control the integrity of VM objects" options and others are now available only for registered users
Version 1.22.2
[!] Bug fixed solving the error during the compilation of projects with the "Interpreter memory allocation" option enabled
Version 1.22
[!] Minor bugs have been fixed
[+] It is now possible to control the integrity of bytecode (when the "Control the integrity of VM objects" option is enabled)
Version 1.21
[!] Bug fixed solving the error in the CMPXCHG8b emulation if the EAX and EDX registers are included in operands
[+] Only those instructions involved in the bytecode execution are present in the intepreter
[-] Some instructions removed from the VM logic (making it more difficult to analyze and decompile the bytecode)
Version 1.2
[!] Bug fixed solving the error while moving the Bound Import directory
[+] It is now possible to include sections of code marked with markers in the project (the start and end of such a section are marked with insertions in assembler – “db $EB,$10,’VMProtect begin’,0″ and “db $EB,$0E,’VMProtect end’,0″)
[+] It is now possible to include an exported function in the project
[-] The "Encrypt bytecode" option has been removed (bytecode is now always encrypted)
Version 1.1
[!] Bugs have been fixed solving errors during the emulation of SBB (the incorrect state of some flags), CMOVxx, CMPXCHG and CMPXCHG8b (when addresses with the ESP register or a DWORD value were used as the second argument)
[+] SEH is now supported in VB6 (native)
[+] MAP files generated by IDA are now supported
[+] It is now possible to add several procedures at once
[+] Now references to instructions are shown right in the procedure listing
[+] The "Encrypt registers at jumps" option has been added
Version 1.09
[*] Completion of the process of determining the end of a procedure during the disassembling of loops
[+] It is now possible to clear the Sharable checkbox for Writable section for the compatibility with UPX (when only the reloc table is used for VM needs)
Version 1.08
[*] Large sections of code can be disassembled faster
[*] The bytecode interpreter metamorphism mechanism has been completed
Version 1.07
[!] Bugs fixed solving the errors in processing PE files (when the virtual size of code sections qeuals zero), obfuscating FPU instructions (errors led to incorrect results), disassembling (the CWD instruction was detected instead of CWDE), and emulating the ROL and ROR instructions (if the size of an argument was 1 byte)
[+] The group of SSE2 instructions is now supported
Version 1.06
[!] Bugs fixed solving the errors that led to the incorrect state of the A flag after the emulation of the SUB, CMP, DEC, NEG, CMPXCHG, SCAS and CMPS instructions
[!] Bug fixed solving the error while working with an "unaligned" file
[+] The BSF, BSR and CMPXCHG8b instructions are now supported
[+] It is now possible to specify the procedure of memory allocation for the VM interpreter in case of multithreaded applications (the memory allocation procedure must be defined as fastcall)
Version 1.05
[+] The FUCOMPP and FCMOVxx instructions are now supported
[+] While viewing sections of code, it is now possible to see string types (ANSI/Unicode/Pascal) and comments for the fields of the structures created by compilers
[*] The bytecode interpreter metamorphism procedure has been added
[+] New compilation options are added: "Encrypt bytecode" and "Remove fixup elements (only for EXE files)"
[-] The "Obfuscate bytecode" option has been removed (bytecode is now always obfuscated)
Version 1.04
[!] Bug fixed solving the error in detecting SEH debuggers for C++
[*] The bytecode obfuscator has been completely revised
[+] Fixup elements are now highlighted when viewing code sections
Version 1.03
[+] Using "unoccupied space" freed from the original sections of the code for storing the bytecode
[+] Now "short" strings in the pascal format are detected (the first byte is the length of the string)
Version 1.02
[!] Bugs fixed solving the errors in the execution of online commands in DLL/SYS
[*] The algorithm of bytecode checksum calculation has been modified
[+] The "Control the integrity of VM interpreter" option is now available (it also functions as an anti-debugging tool in case of debugging the interpreter if the debugger uses INT 03 as breakpoints)
[+] Using the "old" table of fixup elements for storing the bytecode
Version 1.01
[!] Bug fixed solving the error while creating files with fixup elements (the error occurred while working with DLL/SYS files in the Windows 95/98/Me operating systems)
[!] Minor bugs in the disassembler have been fixed
[+] The F2XM1, FABS, FCLEX, FCOS, FDECSTP, FINCSTP, FINIT, FLDCW, FLDLN2, FLDLG2, FPREM, FREM1, FPTAN, FRNDINT, FSIN, FSTCW, FTST, FYL2X, FPATAN, FLDZ, FISTP instructions are now supported
[+] MAP files created by Borland C Builder are now supported
[+] Now it is possible to select the language of the interface and messages in the program settings (Russian and English languages are available)
Version 1.0
[!] Minor bugs related to the interface have been fixed
[+] The CMOV and CMPXCHG instructions are now supported
Version 0.97
[!] Minor bugs related to the interface have been fixed
[+] Virtual Pascal is now supported
Version 0.96
[!] Bugs in the compiler have been fixed (incorrect work with the C flag during the compilation of the NEG and SBB instructions; processing POPF more correctly; incorrect bytecode CRC check while processing external conditional jumps)
[!] Bugs in the VM interpreter relating to bytecode obfuscation have been fixed
[+] MAP files generated by C/C++ compilers are now better processed (the names of procedures contain information about arguments)
Version 0.94
[!] Several bugs have been fixed