aboutsummaryrefslogtreecommitdiff
path: root/runtime/common.h
diff options
context:
space:
mode:
authorjmpoep <OriginalEntryPoint@qq.com>2023-12-07 16:51:07 +0800
committerjmpoep <OriginalEntryPoint@qq.com>2023-12-07 16:51:07 +0800
commit28008a746a31abb7909dd86cb0cd413ac8943b0b (patch)
treea30b74b8cad548048c3c1551d652828ab76fa9bd /runtime/common.h
downloadvmprotect-3.5.1-master.tar
vmprotect-3.5.1-master.tar.gz
vmprotect-3.5.1-master.tar.bz2
vmprotect-3.5.1-master.zip
first commitHEADmaster
Diffstat (limited to 'runtime/common.h')
-rw-r--r--runtime/common.h291
1 files changed, 291 insertions, 0 deletions
diff --git a/runtime/common.h b/runtime/common.h
new file mode 100644
index 0000000..89e87de
--- /dev/null
+++ b/runtime/common.h
@@ -0,0 +1,291 @@
+#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 \ No newline at end of file