291 lines
10 KiB
C
291 lines
10 KiB
C
|
#ifndef COMMON_H
|
||
|
#define COMMON_H
|
||
|
|
||
|
#ifdef VMP_GNU
|
||
|
#define VMP_IMPORT
|
||
|
#else
|
||
|
#define VMP_IMPORT __declspec(dllimport)
|
||
|
#ifdef WIN_DRIVER
|
||
|
#ifdef _WIN64
|
||
|
#pragma comment(lib, "../bin/64/Driver/VMProtectDDK64.lib")
|
||
|
#else
|
||
|
#pragma comment(lib, "../bin/32/Driver/VMProtectDDK32.lib")
|
||
|
#endif // _WIN64
|
||
|
#else
|
||
|
#ifdef _WIN64
|
||
|
#ifdef NDEBUG
|
||
|
#pragma comment(lib, "../bin/64/Release/VMProtectSDK64.lib")
|
||
|
#else
|
||
|
#pragma comment(lib, "../bin/64/Debug/VMProtectSDK64.lib")
|
||
|
#endif
|
||
|
#else
|
||
|
#ifdef NDEBUG
|
||
|
#pragma comment(lib, "../bin/32/Release/VMProtectSDK32.lib")
|
||
|
#else
|
||
|
#pragma comment(lib, "../bin/32/Debug/VMProtectSDK32.lib")
|
||
|
#endif
|
||
|
#endif // _WIN64
|
||
|
#endif // WIN_DRIVER
|
||
|
#endif // VMP_GNU
|
||
|
|
||
|
#include "../sdk/sdk.h"
|
||
|
|
||
|
const size_t NOT_ID = (size_t)-1;
|
||
|
|
||
|
enum {
|
||
|
MESSAGE_DEBUGGER_FOUND,
|
||
|
MESSAGE_VIRTUAL_MACHINE_FOUND,
|
||
|
MESSAGE_FILE_CORRUPTED,
|
||
|
MESSAGE_SERIAL_NUMBER_REQUIRED,
|
||
|
MESSAGE_HWID_MISMATCHED,
|
||
|
MESSAGE_COUNT
|
||
|
};
|
||
|
|
||
|
#ifdef VMP_GNU
|
||
|
#define VMP_STR(s) s
|
||
|
#else
|
||
|
#define VMP_STR(s) L##s
|
||
|
#endif
|
||
|
|
||
|
#define MESSAGE_DEBUGGER_FOUND_STR VMP_STR("A debugger has been found running in your system.\nPlease, unload it from memory and restart your program.")
|
||
|
#define MESSAGE_VIRTUAL_MACHINE_FOUND_STR VMP_STR("Sorry, this application cannot run under a Virtual Machine.")
|
||
|
#define MESSAGE_FILE_CORRUPTED_STR VMP_STR("File corrupted! This program has been manipulated and maybe\nit's infected by a Virus or cracked. This file won't work anymore.")
|
||
|
#define MESSAGE_SERIAL_NUMBER_REQUIRED_STR VMP_STR("This code requires valid serial number to run.\nProgram will be terminated.")
|
||
|
#define MESSAGE_HWID_MISMATCHED_STR VMP_STR("This application cannot be executed on this computer.")
|
||
|
#define MESSAGE_UNREGISTERED_VERSION_STR VMP_STR("This application is protected with unregistered version of VMProtect and cannot be executed on this computer.")
|
||
|
|
||
|
enum {
|
||
|
VAR_IS_PATCH_DETECTED,
|
||
|
VAR_IS_DEBUGGER_DETECTED,
|
||
|
VAR_LOADER_CRC_INFO,
|
||
|
VAR_LOADER_CRC_INFO_SIZE,
|
||
|
VAR_LOADER_CRC_INFO_HASH,
|
||
|
VAR_SESSION_KEY,
|
||
|
VAR_DRIVER_UNLOAD,
|
||
|
VAR_CRC_IMAGE_SIZE,
|
||
|
VAR_LOADER_STATUS,
|
||
|
VAR_SERVER_DATE,
|
||
|
VAR_OS_BUILD_NUMBER,
|
||
|
VAR_CPU_COUNT,
|
||
|
VAR_CPU_HASH,
|
||
|
VAR_COUNT = VAR_CPU_HASH + 32
|
||
|
};
|
||
|
|
||
|
enum {
|
||
|
FACE_MASK = 0xFACE0000U,
|
||
|
|
||
|
FACE_RC5_P,
|
||
|
FACE_RC5_Q,
|
||
|
|
||
|
FACE_STRING_INFO,
|
||
|
FACE_RESOURCE_INFO,
|
||
|
FACE_STORAGE_INFO,
|
||
|
FACE_REGISTRY_INFO,
|
||
|
FACE_LICENSE_INFO,
|
||
|
FACE_LICENSE_INFO_SIZE,
|
||
|
FACE_KEY_INFO,
|
||
|
FACE_RUNTIME_ENTRY,
|
||
|
FACE_CRC_INFO_SALT,
|
||
|
FACE_CRC_TABLE_ENTRY,
|
||
|
FACE_CRC_TABLE_SIZE,
|
||
|
FACE_CRC_TABLE_HASH,
|
||
|
FACE_TRIAL_HWID,
|
||
|
FACE_TRIAL_HWID_SIZE,
|
||
|
FACE_CORE_OPTIONS,
|
||
|
FACE_IMAGE_BASE,
|
||
|
FACE_FILE_BASE,
|
||
|
|
||
|
FACE_NTOSKRNL_NAME,
|
||
|
FACE_HAL_NAME,
|
||
|
FACE_USER32_NAME,
|
||
|
FACE_MESSAGE_BOX_NAME,
|
||
|
FACE_KERNEL32_NAME,
|
||
|
FACE_CREATE_FILE_NAME,
|
||
|
FACE_CLOSE_HANDLE_NAME,
|
||
|
FACE_INITIALIZATION_ERROR,
|
||
|
FACE_PROC_NOT_FOUND,
|
||
|
FACE_ORDINAL_NOT_FOUND,
|
||
|
FACE_STRING_DECRYPT_KEY,
|
||
|
FACE_DRIVER_FORMAT_VALUE,
|
||
|
FACE_FILE_CORRUPTED,
|
||
|
FACE_LOADER_OPTIONS,
|
||
|
FACE_LOADER_DATA,
|
||
|
FACE_DEBUGGER_FOUND,
|
||
|
FACE_NT_SET_INFORMATION_PROCESS_NAME,
|
||
|
FACE_NT_RAISE_HARD_ERROR_NAME,
|
||
|
FACE_IS_WOW64_PROCESS_NAME,
|
||
|
FACE_WINE_GET_VERSION_NAME,
|
||
|
FACE_MACOSX_FORMAT_VALUE,
|
||
|
FACE_GNU_PTRACE,
|
||
|
FACE_UNREGISTERED_VERSION,
|
||
|
FACE_WTSAPI32_NAME,
|
||
|
FACE_WTS_SEND_MESSAGE_NAME,
|
||
|
FACE_NTDLL_NAME,
|
||
|
FACE_NT_QUERY_INFORMATION_NAME,
|
||
|
FACE_NT_SET_INFORMATION_THREAD_NAME,
|
||
|
FACE_SICE_NAME,
|
||
|
FACE_SIWVID_NAME,
|
||
|
FACE_NTICE_NAME,
|
||
|
FACE_ICEEXT_NAME,
|
||
|
FACE_SYSER_NAME,
|
||
|
FACE_VIRTUAL_MACHINE_FOUND,
|
||
|
FACE_SBIEDLL_NAME,
|
||
|
FACE_QUERY_VIRTUAL_MEMORY_NAME,
|
||
|
FACE_ENUM_SYSTEM_FIRMWARE_NAME,
|
||
|
FACE_GET_SYSTEM_FIRMWARE_NAME,
|
||
|
FACE_NT_QUERY_INFORMATION_PROCESS_NAME,
|
||
|
FACE_NT_VIRTUAL_PROTECT_NAME,
|
||
|
FACE_NT_OPEN_FILE_NAME,
|
||
|
FACE_NT_CREATE_SECTION_NAME,
|
||
|
FACE_NT_OPEN_SECTION_NAME,
|
||
|
FACE_NT_MAP_VIEW_OF_SECTION,
|
||
|
FACE_NT_UNMAP_VIEW_OF_SECTION,
|
||
|
FACE_NT_CLOSE,
|
||
|
FACE_SYSCALL,
|
||
|
FACE_NT_ALLOCATE_VIRTUAL_MEMORY_NAME,
|
||
|
FACE_NT_FREE_VIRTUAL_MEMORY_NAME,
|
||
|
|
||
|
FACE_PACKER_INFO = 0xFACE0100U,
|
||
|
FACE_PACKER_INFO_SIZE,
|
||
|
FACE_FILE_CRC_INFO,
|
||
|
FACE_FILE_CRC_INFO_SIZE,
|
||
|
FACE_LOADER_CRC_INFO,
|
||
|
FACE_LOADER_CRC_INFO_SIZE,
|
||
|
FACE_SECTION_INFO,
|
||
|
FACE_SECTION_INFO_SIZE,
|
||
|
FACE_FIXUP_INFO,
|
||
|
FACE_FIXUP_INFO_SIZE,
|
||
|
FACE_RELOCATION_INFO,
|
||
|
FACE_RELOCATION_INFO_SIZE,
|
||
|
FACE_IAT_INFO,
|
||
|
FACE_IAT_INFO_SIZE,
|
||
|
FACE_IMPORT_INFO,
|
||
|
FACE_IMPORT_INFO_SIZE,
|
||
|
FACE_INTERNAL_IMPORT_INFO,
|
||
|
FACE_INTERNAL_IMPORT_INFO_SIZE,
|
||
|
FACE_MEMORY_CRC_INFO,
|
||
|
FACE_MEMORY_CRC_INFO_SIZE,
|
||
|
FACE_DELAY_IMPORT_INFO,
|
||
|
FACE_DELAY_IMPORT_INFO_SIZE,
|
||
|
FACE_LOADER_CRC_INFO_HASH,
|
||
|
FACE_MEMORY_CRC_INFO_HASH,
|
||
|
FACE_TLS_INDEX_INFO,
|
||
|
FACE_GNU_RELRO_INFO,
|
||
|
FACE_NON_PAGED_POOL_NX,
|
||
|
FACE_DEFAULT_MDL_PRIORITY,
|
||
|
|
||
|
FACE_VAR = 0xFACE0200U,
|
||
|
FACE_VAR_IS_PATCH_DETECTED = FACE_VAR | (VAR_IS_PATCH_DETECTED << 4),
|
||
|
FACE_VAR_IS_DEBUGGER_DETECTED = FACE_VAR | (VAR_IS_DEBUGGER_DETECTED << 4),
|
||
|
FACE_VAR_LOADER_CRC_INFO = FACE_VAR | (VAR_LOADER_CRC_INFO << 4),
|
||
|
FACE_VAR_LOADER_CRC_INFO_SIZE = FACE_VAR | (VAR_LOADER_CRC_INFO_SIZE << 4),
|
||
|
FACE_VAR_LOADER_CRC_INFO_HASH = FACE_VAR | (VAR_LOADER_CRC_INFO_HASH << 4),
|
||
|
FACE_VAR_SESSION_KEY = FACE_VAR | (VAR_SESSION_KEY << 4),
|
||
|
FACE_VAR_DRIVER_UNLOAD = FACE_VAR | (VAR_DRIVER_UNLOAD << 4),
|
||
|
FACE_VAR_CRC_IMAGE_SIZE = FACE_VAR | (VAR_CRC_IMAGE_SIZE << 4),
|
||
|
FACE_VAR_LOADER_STATUS = FACE_VAR | (VAR_LOADER_STATUS << 4),
|
||
|
FACE_VAR_SERVER_DATE = FACE_VAR | (VAR_SERVER_DATE << 4),
|
||
|
FACE_VAR_CPU_COUNT = FACE_VAR | (VAR_CPU_COUNT << 4),
|
||
|
FACE_VAR_CPU_HASH = FACE_VAR | (VAR_CPU_HASH << 4),
|
||
|
FACE_VAR_OS_BUILD_NUMBER = FACE_VAR | (VAR_OS_BUILD_NUMBER << 4),
|
||
|
|
||
|
FACE_VAR_SALT = 0xFACE0300U,
|
||
|
FACE_VAR_IS_PATCH_DETECTED_SALT = FACE_VAR_SALT | VAR_IS_PATCH_DETECTED,
|
||
|
FACE_VAR_IS_DEBUGGER_DETECTED_SALT = FACE_VAR_SALT | VAR_IS_DEBUGGER_DETECTED,
|
||
|
FACE_VAR_LOADER_CRC_INFO_SALT = FACE_VAR_SALT | VAR_LOADER_CRC_INFO,
|
||
|
FACE_VAR_LOADER_CRC_INFO_SIZE_SALT = FACE_VAR_SALT | VAR_LOADER_CRC_INFO_SIZE,
|
||
|
FACE_VAR_LOADER_CRC_INFO_HASH_SALT = FACE_VAR_SALT | VAR_LOADER_CRC_INFO_HASH,
|
||
|
FACE_VAR_DRIVER_UNLOAD_SALT = FACE_VAR_SALT | VAR_DRIVER_UNLOAD,
|
||
|
FACE_VAR_CRC_IMAGE_SIZE_SALT = FACE_VAR_SALT | VAR_CRC_IMAGE_SIZE,
|
||
|
FACE_VAR_SERVER_DATE_SALT = FACE_VAR_SALT | VAR_SERVER_DATE,
|
||
|
FACE_VAR_CPU_COUNT_SALT = FACE_VAR_SALT | VAR_CPU_COUNT,
|
||
|
FACE_VAR_CPU_HASH_SALT = FACE_VAR_SALT | VAR_CPU_HASH,
|
||
|
FACE_VAR_OS_BUILD_NUMBER_SALT = FACE_VAR_SALT | VAR_OS_BUILD_NUMBER,
|
||
|
};
|
||
|
|
||
|
enum {
|
||
|
LOADER_OPTION_CHECK_PATCH = 0x1,
|
||
|
LOADER_OPTION_CHECK_DEBUGGER = 0x2,
|
||
|
LOADER_OPTION_CHECK_KERNEL_DEBUGGER = 0x4,
|
||
|
LOADER_OPTION_EXIT_PROCESS = 0x8,
|
||
|
LOADER_OPTION_CHECK_VIRTUAL_MACHINE = 0x10
|
||
|
};
|
||
|
|
||
|
enum {
|
||
|
CORE_OPTION_MEMORY_PROTECTION = 0x1,
|
||
|
CORE_OPTION_CHECK_DEBUGGER = 0x2
|
||
|
};
|
||
|
|
||
|
enum {
|
||
|
FILE_LOAD = 0x1,
|
||
|
FILE_REGISTER = 0x2,
|
||
|
FILE_INSTALL = 0x4,
|
||
|
};
|
||
|
|
||
|
enum {
|
||
|
FIELD_BUILD_DATE,
|
||
|
FIELD_PUBLIC_EXP_OFFSET,
|
||
|
FIELD_PUBLIC_EXP_SIZE,
|
||
|
FIELD_MODULUS_OFFSET,
|
||
|
FIELD_MODULUS_SIZE,
|
||
|
FIELD_BLACKLIST_OFFSET,
|
||
|
FIELD_BLACKLIST_SIZE,
|
||
|
FIELD_ACTIVATION_URL_OFFSET,
|
||
|
FIELD_ACTIVATION_URL_SIZE,
|
||
|
FIELD_CRC_OFFSET,
|
||
|
FIELD_COUNT
|
||
|
};
|
||
|
|
||
|
enum {
|
||
|
WOW64_FLAG = 0x8000
|
||
|
};
|
||
|
|
||
|
#ifndef _CONSOLE // google test
|
||
|
#define FACE_TO_INDEX(i) ((uint32_t)(i)/sizeof(size_t))
|
||
|
#ifdef VMP_GNU
|
||
|
#pragma clang diagnostic push
|
||
|
#pragma clang diagnostic ignored "-Warray-bounds"
|
||
|
#endif
|
||
|
#else
|
||
|
#define FACE_TO_INDEX(i) (((uint32_t)(i) & 0xff) >> 4)
|
||
|
#endif
|
||
|
|
||
|
struct GlobalData {
|
||
|
bool is_patch_detected() { return ((v_[FACE_TO_INDEX(FACE_VAR_IS_PATCH_DETECTED)] ^ FACE_VAR_IS_PATCH_DETECTED_SALT) != 0); } //-V557
|
||
|
bool is_debugger_detected() { return ((v_[FACE_TO_INDEX(FACE_VAR_IS_DEBUGGER_DETECTED)] ^ FACE_VAR_IS_DEBUGGER_DETECTED_SALT) != 0); } //-V557
|
||
|
size_t loader_crc_info() { return (v_[FACE_TO_INDEX(FACE_VAR_LOADER_CRC_INFO)] ^ FACE_VAR_LOADER_CRC_INFO_SALT); } //-V557
|
||
|
size_t loader_crc_size() { return (v_[FACE_TO_INDEX(FACE_VAR_LOADER_CRC_INFO_SIZE)] ^ FACE_VAR_LOADER_CRC_INFO_SIZE_SALT); } //-V557
|
||
|
size_t loader_crc_hash() { return (v_[FACE_TO_INDEX(FACE_VAR_LOADER_CRC_INFO_HASH)] ^ FACE_VAR_LOADER_CRC_INFO_HASH_SALT); } //-V557
|
||
|
size_t cpu_hash(size_t index) { return (v_[FACE_TO_INDEX(FACE_VAR_CPU_HASH) + index] ^ FACE_VAR_CPU_HASH_SALT); }
|
||
|
size_t cpu_count() { return (v_[FACE_TO_INDEX(FACE_VAR_CPU_COUNT)] ^ FACE_VAR_CPU_COUNT_SALT); } //-V557
|
||
|
size_t session_key() { return (v_[FACE_TO_INDEX(FACE_VAR_SESSION_KEY)]); } //-V557
|
||
|
size_t driver_unload() { return (v_[FACE_TO_INDEX(FACE_VAR_DRIVER_UNLOAD)] ^ FACE_VAR_DRIVER_UNLOAD_SALT); } //-V557
|
||
|
size_t crc_image_size() { return (v_[FACE_TO_INDEX(FACE_VAR_CRC_IMAGE_SIZE)] ^ FACE_VAR_CRC_IMAGE_SIZE_SALT); } //-V557
|
||
|
uint32_t loader_status() { return static_cast<uint32_t>(v_[FACE_TO_INDEX(FACE_VAR_LOADER_STATUS)]); } //-V557
|
||
|
uint32_t server_date() { return static_cast<uint32_t>(v_[FACE_TO_INDEX(FACE_VAR_SERVER_DATE)] ^ FACE_VAR_SERVER_DATE_SALT); } //-V557
|
||
|
uint32_t os_build_number() { return static_cast<uint32_t>(v_[FACE_TO_INDEX(FACE_VAR_OS_BUILD_NUMBER)] ^ FACE_VAR_OS_BUILD_NUMBER_SALT); } //-V557
|
||
|
|
||
|
void set_is_patch_detected(bool value) { v_[FACE_TO_INDEX(FACE_VAR_IS_PATCH_DETECTED)] = static_cast<size_t>(value) ^ FACE_VAR_IS_PATCH_DETECTED_SALT; } //-V557
|
||
|
void set_is_debugger_detected(bool value) { v_[FACE_TO_INDEX(FACE_VAR_IS_DEBUGGER_DETECTED)] = static_cast<size_t>(value) ^ FACE_VAR_IS_DEBUGGER_DETECTED_SALT; } //-V557
|
||
|
void set_loader_crc_info(size_t value) { v_[FACE_TO_INDEX(FACE_VAR_LOADER_CRC_INFO)] = value ^ FACE_VAR_LOADER_CRC_INFO_SALT; } //-V557
|
||
|
void set_loader_crc_size(size_t value) { v_[FACE_TO_INDEX(FACE_VAR_LOADER_CRC_INFO_SIZE)] = value ^ FACE_VAR_LOADER_CRC_INFO_SIZE_SALT; } //-V557
|
||
|
void set_loader_crc_hash(size_t value) { v_[FACE_TO_INDEX(FACE_VAR_LOADER_CRC_INFO_HASH)] = value ^ FACE_VAR_LOADER_CRC_INFO_HASH_SALT; } //-V557
|
||
|
void set_cpu_hash(size_t index, size_t value) { v_[FACE_TO_INDEX(FACE_VAR_CPU_HASH) + index] = value ^ FACE_VAR_CPU_HASH_SALT; }
|
||
|
void set_cpu_count(size_t value) { v_[FACE_TO_INDEX(FACE_VAR_CPU_COUNT)] = value ^ FACE_VAR_CPU_COUNT_SALT; } //-V557
|
||
|
void set_session_key(size_t value) { v_[FACE_TO_INDEX(FACE_VAR_SESSION_KEY)] = value; } //-V557
|
||
|
void set_driver_unload(size_t value) { v_[FACE_TO_INDEX(FACE_VAR_DRIVER_UNLOAD)] = value ^ FACE_VAR_DRIVER_UNLOAD_SALT; } //-V557
|
||
|
void set_crc_image_size(size_t value) { v_[FACE_TO_INDEX(FACE_VAR_CRC_IMAGE_SIZE)] = value ^ FACE_VAR_CRC_IMAGE_SIZE_SALT; } //-V557
|
||
|
void set_loader_status(uint32_t value) { v_[FACE_TO_INDEX(FACE_VAR_LOADER_STATUS)] = value; } //-V557
|
||
|
void set_server_date(uint32_t value) { v_[FACE_TO_INDEX(FACE_VAR_SERVER_DATE)] = value ^ FACE_VAR_SERVER_DATE_SALT; } //-V557
|
||
|
void set_os_build_number(uint32_t value) { v_[FACE_TO_INDEX(FACE_VAR_OS_BUILD_NUMBER)] = value ^ FACE_VAR_OS_BUILD_NUMBER_SALT; } //-V557
|
||
|
private:
|
||
|
size_t v_[VAR_COUNT];
|
||
|
};
|
||
|
|
||
|
#ifndef _CONSOLE
|
||
|
#ifdef VMP_GNU
|
||
|
#pragma clang diagnostic pop
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#endif
|