Функции SDK предназначены для интеграции в исходный код защищаемого приложения и служат для задания границ защищаемых областей, обнаружения использования средств отладки или виртуализации.
Маркеры кода
Сервисные функции
Функции лицензирования
VMProtectBegin
void VMProtectBegin(const char *MarkerName);
Маркер начала защищаемой области кода. Вызов VMProtectBegin должен находиться перед первой командой (вызовом процедуры, функции) защищаемого блока кода. MarkerName задает имя маркера, которое в VMProtect будет иметь вид "VMProtectMarker"+MarkerNamе. Например, маркер VMProtectBegin('CheckRegistration') будет выглядеть как VMProtectMarker "CheckRegistration". Если имя маркера не задано, ему будет присвоено уникальное имя вида "VMProtectMarker"+номер маркера по порядку. Тип компиляции защищаемой области задается при обработке проекта в 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);
Функция MProtectIsProtected возвращает True если файл обработан VMProtect.
VMProtectIsDebuggerPresent
bool VMProtectIsDebuggerPresent(bool CheckKernelMode);
Функция VMProtectIsDebuggerPresent позволяет определить факт запуска приложения из-под отладчика. Результат ее работы (True/False) может быть обработан с помощью защитных механизмов, встроенных в приложение. При CheckKernelMode=False функция проверяет наличие отладчика User-mode (OllyDBG, WinDBG и т.п.). При CheckKernelMode=True будет производиться определение как отладчиков User-mode, так и отладчиков Kernel-mode (SoftICE, Syser и т.п.). При защите драйверов значение CheckKernelMode не имеет значения, так как драйвера работают в режиме ядра, поэтому для них всегда проверяется наличие отладчиков Kernel-mode.
VMProtectIsVirtualMachinePresent
bool VMProtectIsVirtualMachinePresent(void);
Функция VMProtectIsVirtualMachinePresent позволяет определить факт запуска приложения в виртуальной среде: VMware, Virtual PC, VirtualBox, Sandboxie. Результат ее работы (True/False) может быть обработан с помощью защитных механизмов, встроенных в приложение.
VMProtectIsValidImageCRC
bool VMProtectIsValidImageCRC(void);
Функция VMProtectIsValidImageCRC позволяет определить факт изменения защищенного модуля в памяти процесса (проверяются только неизменяемые сегменты кода и данных). Результат ее работы (True/False) может быть обработан с помощью защитных механизмов, встроенных в приложение.
VMProtectDecryptStringA
const char * VMProtectDecryptStringA(const char *Value);
Функция VMProtectDecryptStringA позволяет дешифровать строковую ANSI константу Value. Для шифрации константы её необходимо включить в список защищаемых объектов.
VMProtectDecryptStringW
const wchar_t * VMProtectDecryptStringW(const wchar_t *Value);
Функция VMProtectDecryptStringW позволяет дешифровать строковую Unicode константу Value. Для шифрации константы её необходимо включить в список защищаемых объектов.
VMProtectFreeString
bool VMProtectFreeString(const void *Value);
Функция VMProtectFreeString освобождает динамическую память, занятую расшифрованной строкой. Освобождение делать не обязательно, но если делать - то только этой функцией. Повторное использование VMProtectDecryptStringA/VMProtectDecryptStringW с тем же параметром и без уничтожения ранее расшифрованной строки не будет приводить к дополнительному выделению памяти.