要保护的块的边界由标记对VMProtectBegin / VMProtectBeginVirtualization / VMProtectBeginMutation / VMProtectBeginUltra和VMProtectEnd定义。然后,当VMProtect处理受保护应用程序的代码时,它会删除标记和VMProtectSDK的任何提及,因此不需要将这些库包含在您的安装程序包中。无论是否包含在编译中,都会删除标记。使用命名标记时,也会删除其名称。
如果指定了标记的标题,则会为其分配名称,如“VMProtectMarker MARKER_TITLE”。如果未指定标记的标题,则会为其分配唯一名称:“VMProtectMarker”+标记序列号。但是,使用非命名标记具有明显的缺点:如果将新标记插入到程序代码中,则所有非命名标记的编号都将更改。所以我们建议始终使用命名标记。
使用标记时要考虑的一个特别重要的事情是,您不应该允许从标记内的非保护区域跳转。例如,如果将一部分循环括在标记中,就会发生这种情况。如果使用标记的应用程序在保护后变为无效,则可以通过启用“调试模式”选项来检测来自非保护区域和地址的跳转。在此模式下,当受保护的应用程序在调试器下工作时,如果检测到从非受保护区域跳转到受保护的调试器,则后者将中断程序的执行。找到所有这些跳转后,您应该更改标记的位置,或者如果不可能,请使用VMProtect的GUI版本将这些地址标记为外部。