SDK 函数
SDK 函数可以集成到受保护应用程序的源代码中,以设置受保护区域的边界,检测调试器或虚拟化工具。
代码标记
- VMProtectBegin
- VMProtectBeginVirtualization
- VMProtectBeginMutation
- VMProtectBeginUltra
- VMProtectBeginVirtualizationLockByKey
- VMProtectBeginUltraLockByKey
- VMProtectEnd
服务函数
- VMProtectIsProtected
- VMProtectIsDebuggerPresent
- VMProtectIsVirtualMachinePresent
- VMProtectIsValidImageCRC
- VMProtectDecryptStringA
- VMProtectDecryptStringW
- VMProtectFreeString
授权函数
- VMProtectSetSerialNumber
- VMProtectGetSerialNumberState
- VMProtectGetSerialNumberData
- VMProtectGetCurrentHWID
VMProtectBegin
void VMProtectBegin(const char *MarkerName);
标记 代码保护区开始的标记。对 VMProtectBegin 的调用必须放在受保护代码块的第一个命令(或过程或函数调用)之前。MarkerName 定义了在 VMProtect 中看起来像 “VMProtectMarker” +MarkerName 的标记名称。例如,标记 VMProtectBegin('CheckRegistration') 将显示为 VMProtectMarker “CheckRegistration” 。如果未设置标记的名称,则以 “VMProtectMarker” +marker_serial_number 的形式为其赋予唯一的名称。您可以在 VMProtect 中设置给定保护块的 编译类型 给定的受保护块 VMProtect。
VMProtectBeginVirtualization
void VMProtectBeginVirtualization(const char *MarkerName);
使用预定义的 “虚拟化” 编译类型标识代码保护区开始的标记。MarkerName 定义 标记的名称 。在进一步使用 VMProtect 时,无法更改此标记的编译类型。
VMProtectBeginMutation
void VMProtectBeginMutation(const char *MarkerName);
使用预定义的 “变异” 编译类型标识代码保护区开始的标记。MarkerName 定义 标记的名称 。在进一步使用 VMProtect 时,无法更改此标记的编译类型。
VMProtectBeginUltra
void VMProtectBeginUltra(const char *MarkerName);
使用预定义的 “超级(虚拟化+变异)” 编译类型标识代码保护区开头的标记。MarkerName 定义 标记的名称 。在进一步使用 VMProtect 时,无法更改此标记的编译类型。
VMProtectBeginVirtualizationbykey
void VMProtectBeginVirtualizationLockByKey((const char *MarkerName);
使用预定义的 “虚拟化” 编译类型和启用的 “ 锁定密钥 ” 选项标识代码受保护区域的开头的标记。MarkerName 定义 标记的名称 。在进一步使用 VMProtect 时,无法更改此标记的编译类型。
VMProtectBeginUltraLockByKey
void VMProtectBeginUltraLockByKey(const char *MarkerName);
使用预定义的 “超级(虚拟化+变异)” 编译类型和启用的 “ 锁定密钥 ” 选项标识代码保护区开始的标记。MarkerName 定义 标记的名称 。在进一步使用 VMProtect 时,无法更改此标记的编译类型。
VMProtectEnd
void VMProtectEnd(void);
标识代码保护区结束的标记。对 VMProtectEnd 的调用必须放在受保护代码块的最后一个命令(过程或函数调用)之后。
VMProtectIsProtected
bool VMProtectIsProtected(void);
如果文件由 VMProtect 处理,则 MProtectIsProtected 函数返回 True。
VMProtectIsDebuggerPresent
bool VMProtectIsDebuggerPresent(bool CheckKernelMode);
VMProtectIsDebuggerPresent 函数允许在调试器下检测应用程序的启动。结果(真/假)可以通过应用内保护机制进行处理。如果 CheckKernelMode=False,该函数会检查用户模式调试器(OllyDBG、WinDBG 等)。如果 CheckKernelMode=True,用户模式和内核模式调试器(SoftICE、Syser 等)。在保护驱动程序时,CheckKernelMode 的值没有意义,因为驱动程序总是工作在内核模式,所以总是检查内核模式调试器的存在。
VMProtectIsVirtualMachinePresent
bool VMProtectIsVirtualMachinePresent(void);
VMProtectIsVirtualMachinePresent 函数允许检测应用程序在虚拟机工具下的启动:VMware、Virtual PC、VirtualBox、Sandboxie。结果(真/假)可以通过应用内保护机制进行处理。
VMProtectIsValidImageCRC
bool VMProtectIsValidImageCRC(void);
VMProtectIsValidImageCRC 函数检测可执行模块在进程内存中已更改的事实(仅检查不可更改的代码和数据分段)。结果(真/假)可以通过应用内保护机制进行处理。
VMProtectDecryptStringA
const char * VMProtectDecryptStringA(const char *Value);
VMProtectDecryptStringA 函数解密 ANSI 字符串常量 – 值。要解密该常量,您必须 将其包括在受保护的对象列表中 。
VMProtectDecryptStringW
const wchar_t * VMProtectDecryptStringW(const wchar_t *Value);
VMProtectDecryptStringW 函数解密 Unicode 字符串常量 – 值。要解密该常量,您必须 将其包括在受保护的对象列表中 。
VMProtectFreeString
bool VMProtectFreeString(const void *Value);
VMProtectFreeString 函数释放为解密字符串分配的动态内存。没有必要释放内存,但如果您这样做 - 您必须使用这个功能。如果 VMProtectDecryptStringA/VMProtectDecryptStringW 第二次使用相同的参数而不破坏先前解密的字符串,则不会分配额外的内存。