# Функции 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"+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 с тем же параметром и без уничтожения ранее расшифрованной строки не будет приводить к дополнительному выделению памяти.

© 2006-2015 Copyright VMProtect Software