代码保护软件 VMProtect 用户手册之准备项目: SDK功能

VMProtect是一款强大的代码保护工具,通过集成SDK,开发者可以设置保护区域、检测调试器和虚拟化工具。本文详细介绍了VMProtect的代码标记如VMProtectBegin、VMProtectEnd,以及服务和许可功能,帮助开发者实现更安全的应用程序保护。
摘要由CSDN通过智能技术生成

VMProtect 是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。

VMProtect最新试用版下载

SDK功能可以集成到受保护应用程序的源代码中,用来设置受保护区域的边界、检测调试器或虚拟化工具。

代码标记

  • VMProtectBegin
  • VMProtectBeginVirtualization
  • VMProtectBeginMutation
  • VMProtectBeginUltra
  • VMProtectBeginVirtualizationLockByKey
  • VMProtectBeginUltraLockByKey
  • VMProtectEnd

服务功能

  • VMProtectIsProtected
  • VMProtectIsDebuggerPresent
  • VMProtectIsVirtualMachinePresent
  • VMProtectIsValidImageCRC
  • VMProtectDecryptStringA
  • VMProtectDecryptStringW
  • VMProtectFreeString

许可功能

VMProtectBegin

void VMProtectBegin(const char *MarkerName);

标识代码保护区开头的标记。必须在受保护代码块的第一个命令(或者过程或或者函数调用)之前放置对VMProtectBegin的调用。 MarkerName定义在VMProtect中看起来像“VMProtectMarker”+MarkerName的标记的名称。例如,标记VMProtectBegin('CheckRegistration')将看起来像VMProtectMarker“CheckRegistration”。如果未设置标记的名称,则会以“VMProtectMarker”+ marker_serial_number的形式为其指定唯一名称。你可以在VMProtect中设置给定受保护块的编译类型。


VMProtectBeginVirtualization

void VMProtectBeginVirtualization(const char *MarkerName);

标识符使用预定义的“虚拟化”编译类型标识代码的受保护区域的开头。MarkerName定义标记的名称。VMProtect目前无法更改此标记的编译类型。


VMProtectBeginMutation

void VMProtectBeginMutation(const char *MarkerName);

标识符使用预定义的“变异”编译类型标识代码的受保护区域的开头。MarkerName定义标记的名称。VMProtect目前无法更改此标记的编译类型。


VMProtectBeginUltra

void VMProtectBeginUltra(const char *MarkerName);

标记用预定义的“ultra(虚拟化+变异)”编译类型标识代码的受保护区域的开始。MarkerName定义标记的名称。VMProtect目前无法更改此标记的编译类型。


VMProtectBeginVirtualizationByKey

void VMProtectBeginVirtualizationLockByKey(const char *MarkerName);

标记使用预定义的“虚拟化”编译类型和启用的“Lock to key”选项标识代码的受保护区域的开头。 MarkerName定义标记的名称。VMProtect目前无法更改此标记的编译类型。


VMProtectBeginUltraLockByKey

void VMProtectBeginUltraLockByKey(const char *MarkerName);

标识使用预定义的“ultra(虚拟化+变异)”编译类型和启用的“Lock to key”选项标识代码的受保护区域的开头。MarkerName定义标记的名称。VMProtect目前无法更改此标记的编译类型。


VMProtectEnd

void VMProtectEnd(void);

标识代码保护区末尾的标记。必须在受保护代码块的最后一个命令(过程或函数调用)之后放置对VMProtectEnd的调用。


VMProtectIsProtected

bool VMProtectIsProtected(void);

如果文件由VMProtect处理,则MProtectIsProtected函数返回True。


VMProtectIsDebuggerPresent

bool VMProtectIsDebuggerPresent(bool CheckKernelMode);

VMProtectIsDebuggerPresent函数允许在调试器下检测应用程序的启动。可以使用应用内保护机制处理结果(True / False)。如果CheckKernelMode = False,则该函数检查用户模式调试器(OllyDBG,WinDBG等)。如果CheckKernelMode = True,则为用户模式和内核模式调试器(SoftICE,Syser等)。在保护驱动程序时,CheckKernelMode的值没有意义,因为驱动程序始终在内核模式下工作,因此始终检查是否存在内核模式调试程序。


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字符串常量。要解密常量,必须将其包含在受保护对象列表中。


VMProtectDecryptStringW

const wchar_t * VMProtectDecryptStringW(const wchar_t *Value);

VMProtectDecryptStringW函数解密Unicode字符串常量。 要解密常量,必须将其包含在受保护对象列表中。


VMProtectFreeString

bool VMProtectFreeString(const void *Value);

VMProtectFreeString函数释放为解密字符串分配的动态内存。其实没有必要释放内存,但是如果你一定要释放内存,就必须使用这个功能。如果 VMProtectDecryptStringA / VMProtectDecryptStringW 第二次使用相同的参数而不破坏以前解密的字符串,则不会分配额外的内存。

 

VMProtect使用说明 一. 接口说明 //开始保护处标记(对应于功能设置:反调试、内存保护等等) VMProtectBegin(const char *); //开始虚拟化代码处标记(包括保护设置) VMProtectBeginVirtualization(const char *); //开始变异代码处标记(包括保护设置) VMProtectBeginMutation(const char *); //开始虚拟+代码变异标记处 VMProtectBeginUltra(const char *); VMProtectBeginVirtualizationLockByKey(const char *); VMProtectBeginUltraLockByKey(const char *); //保护结束处标记 VMProtectEnd(void); //检测调试 BOOL VMProtectIsDebuggerPresent(BOOL); //检测虚拟机 BOOL VMProtectIsVirtualMachinePresent(void); //映像文件CRC校验 BOOL VMProtectIsValidImageCRC(void); //解密保护的名为字符串A char * VMProtectDecryptStringA(const char *value); //解密保护的名为字符串W wchar_t * VMProtectDecryptStringW(const wchar_t *value); 二. 使用方法 1. 保护函数必须有始有终出现 VMProtectBegin、 VMProtectBeginVirtualization、 VMProtectBeginMutation、 VMProtectBeginUltra 必须有相对应的VMProtectEnd结束。 比如: void FunName() { VMProtectBegin(“FunName”); //最好用函数名,否则会出现重名冲突 ..... VMProtectEnd(); } 2. 保护的单元是函数,而不是整个EXE代码 比如: //不保护 void fun1(char* msg) { char* szmsg = "fun1 none vm"; OutputDebugString( szmsg ); } //虚拟化保护 int fun2( int x, int y ) { int n = x + y; VMProtectBeginVirtualization("fun2"); OutputDebugString( "x+y= %d" ); VMProtectEnd(); return n; } //虚拟化和变异保护 void fun3() { VMProtectBeginUltra("fun3"); fun1("fun3 call fun1"); VMProtectEnd(); fun2( 2, 4 ); } 3. 保护嵌套情况 void main() { char* szMsg = "proxxb vm sapmle!"; //不被保护 VMProtectBegin("main"); //被保护 OutputDebugString( "vm protect test." ); //被保护 fun1(szMsg); //函数内部自己去保护 fun2( 2, 4 ); //函数内部自己去保护 fun1(szMsg); //函数内部自己去保护 fun3(); //不被保护 VMProtectEnd(); getchar(); //不被保护 } 4. 字符串保护 应使用VMProtectDecryptStringA或VMProtectDecryptStringW函数保护名为字符串,被保护后,明晚字符串不再出现在内存,除非被解密的那一刻! char* Decrypt( char* key, char* buffer, long length ) { VMProtectBeginUltra("Decrypt"); .... VMProtectEnd(); } 调用方法: Decryp
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值