# VMProtect 核心模块详解

## 1. 核心引擎 (core.h / core.cc)
### ProjectOption 枚举
定义在 `core.h` 中的保护选项:
“`cpp
enum ProjectOption {
cpDebugMode = 0x00000002, // 调试模式
cpCryptValues = 0x00000008, // 加密常量值
cpIncludeWatermark = 0x00000020, // 包含水印
cpRunnerCRC = 0x00000040, // 运行时 CRC 校验
cpEncryptRegs = 0x00000080, // 加密寄存器
cpStripFixups = 0x00008000, // 剥离重定位
cpPack = 0x00000100, // 压缩
cpImportProtection = 0x00000200, // 导入表保护
cpCheckDebugger = 0x00000400, // 调试器检测
cpCheckVirtualMachine = 0x00000800, // 虚拟机检测
cpMemoryProtection = 0x00001000, // 内存保护
cpResourceProtection = 0x00010000, // 资源保护
cpCheckKernelDebugger = 0x00020000, // 内核调试器检测
cpStripDebugInfo = 0x00040000, // 剥离调试信息
cpLoaderCRC = 0x10000000, // 加载器 CRC
cpUnregisteredVersion = 0x40000000, // 未注册版本
cpEncryptBytecode = 0x80000000, // 加密字节码
cpVirtualFiles = 0x08000000, // 虚拟文件
cpInternalMemoryProtection = 0x04000000, // 内部内存保护
cpLoader = 0x02000000, // 加载器模式
cpMaximumProtection = cpCryptValues | cpRunnerCRC | cpEncryptRegs |
cpPack | cpImportProtection | cpMemoryProtection |
cpResourceProtection | cpStripDebugInfo,
cpUserOptionsMask = 0x00FFFFFF
};
“`
### RSA 加密类
“`cpp
class RSA
{
public:
RSA();
RSA(const std::vector<uint8_t> &public_exp,
const std::vector<uint8_t> &private_exp,
const std::vector<uint8_t> &modulus);
~RSA();
bool Encrypt(Data &data);
bool Decrypt(Data &data);
bool CreateKeyPair(size_t key_length);
std::vector<uint8_t> public_exp() const;
std::vector<uint8_t> private_exp() const;
std::vector<uint8_t> modulus() const;
};
“`
### LicenseInfo 结构
“`cpp
struct LicenseInfo {
uint32_t Flags;
std::string CustomerName;
std::string CustomerEmail;
LicenseDate ExpireDate;
std::string HWID;
uint8_t RunningTimeLimit;
LicenseDate MaxBuildDate;
std::string UserData;
LicenseInfo() : Flags(0), RunningTimeLimit(0) {}
};
“`
## 2. 对象管理系统 (objects.h)
### 基础对象类
“`cpp
class IObject
{
public:
virtual ~IObject() {}
virtual int CompareWith(const IObject &) const {
throw std::runtime_error(“Abstract method”);
}
};
“`
### 可寻址对象
“`cpp
class AddressableObject : public IObject
{
public:
AddressableObject() : address_(0) {}
uint64_t address() const { return address_; }
void set_address(uint64_t address) { address_ = address; }
protected:
uint64_t address_;
};
“`
### 对象列表模板
“`cpp
template <typename Object>
class ObjectList : public IObject
{
public:
size_t count() const { return v_.size(); }
Object *item(size_t index) const { … }
void AddObject(Object *obj) { v_.push_back(obj); }
void InsertObject(size_t index, Object *obj) { … }
void RemoveObject(Object *obj) { … }
void Sort() { std::sort(v_.begin(), v_.end(), CompareObjects); }
};
“`
### Data 数据类
“`cpp
class Data
{
public:
void PushByte(uint8_t value);
void PushDWord(uint32_t value);
void PushQWord(uint64_t value);
void PushWord(uint16_t value);
void PushBuff(const void *value, size_t nCount);
uint32_t ReadDWord(size_t nPosition) const;
void WriteDWord(size_t nPosition, uint32_t dwValue);
std::vector<uint8_t> &data() { return m_vData; }
};
“`
## 3. 处理器架构 (processors.h)
### 操作数类型
“`cpp
enum OperandType : uint16_t {
otNone = 0x0000,
otValue = 0x0001,
otRegistr = 0x0002,
otMemory = 0x0004,
otSegmentRegistr = 0x0008,
otControlRegistr = 0x0010,
otDebugRegistr = 0x0020,
otFPURegistr = 0x0040,
otHiPartRegistr = 0x0080,
otBaseRegistr = 0x0100,
otMMXRegistr = 0x0200,
otXMMRegistr = 0x0400,
};
“`
### 命令选项
“`cpp
enum CommandOption {
roInverseFlag = 0x0001,
roLockPrefix = 0x0002,
roFar = 0x0004,
roVexPrefix = 0x0008,
roBreaked = 0x0010,
roClearOriginalCode = 0x0020,
roNeedCompile = 0x0040,
roCreateNewBlock = 0x0080,
roFillNop = 0x0100,
roInternal = 0x0200,
roNoNative = 0x0400,
roNoSaveFlags = 0x0800,
roWritable = 0x1000,
roUseAsJmp = 0x2000,
roNoProgress = 0x4000,
roExternal = 0x8000,
roNeedCRC = 0x10000,
roInvalidOpcode = 0x20000,
};
“`
### 虚拟寄存器
“`cpp
enum VMRegistr {
regEFX = 16,
regETX,
regERX,
regEIX,
regEmpty,
regExtended = 0x80
};
“`
### 链接类型
“`cpp
enum LinkType {
ltNone,
ltSEHBlock,
ltFinallyBlock,
ltDualSEHBlock,
ltFilterSEHBlock,
ltJmp,
ltJmpWithFlag,
ltCall,
ltCase,
ltSwitch,
ltNative,
ltOffset,
ltGateOffset,
ltExtSEHBlock,
ltMemSEHBlock,
ltExtSEHHandler,
ltVBMemSEHBlock,
ltDelta
};
“`
## 4. 压缩引擎 (packer.h)
使用 LZMA 算法进行数据压缩:
“`cpp
class Packer
{
public:
Packer();
~Packer();
bool Code(IArchitecture *file, size_t size, Data *data);
bool Code(IArchitecture *file, Data *in_data, Data *out_data);
bool WriteProps(Data *data);
};
“`
## 5. 指令集定义 (intel.h)
定义了完整的 x86/x64 指令集枚举:
### 基础指令
– `cmPush`, `cmPop`, `cmMov`, `cmAdd`, `cmXor`, `cmTest`, `cmLea`
– `cmRet`, `cmCall`, `cmJmp`
– `cmInc`, `cmDec`, `cmNop`, `cmXchg`
### FPU 指令
– `cmFld`, `cmFstp`, `cmFadd`, `cmFsub`, `cmFmul`, `cmFdiv`
– `cmFild`, `cmFist`, `cmFistp`, `cmFcom`
### MMX/SSE/AVX 指令
– `cmMovd`, `cmMovq`, `cmMovdqa`, `cmMovdqu`
– `cmPaddb`, `cmPaddw`, `cmPaddd`, `cmPaddq`
– `cmPsubb`, `cmPsubw`, `cmPsubd`, `cmPsubq`
– `cmPand`, `cmPor`, `cmPxor`
– `cmAddpd`, `cmAddps`, `cmAddsd`, `cmAddss`
– `cmMulpd`, `cmMulps`, `cmMulsd`, `cmMulss`
### 系统指令
– `cmCpuid`, `cmRdtsc`, `cmRdmsr`, `cmWrmsr`
– `cmLgdt`, `cmSgdt`, `cmLidt`, `cmSidt`
– `cmInvd`, `cmWbinvd`, `cmInvlpg`














暂无评论内容