• 新一代软件保护程序。被保护的代码部分在虚拟机上执行,这使得被保护的程序很难被分析与破解。反汇编程序与MAP文件的运用使您能快速选择需要保护从而避免破解的代码。

     

     

    特征综述 About Feature

     

    理论

    VMProtect是一款全新的软件保护工具。与其它大部分的保护程序不同,VMProtect可修改程序的源代码。VMProtect可将被保护文件中的部分代码转化到在虚拟机(以下称作VM)上运行的程序(以下称作bytecode)中。您同样可把VM想象为具备命令系统的虚拟处理器,该命令系统与Intel 8086处理器所使用的完全不同。例如,VM没有负责比较2个操作数的命令,也没有有条件与无条件的移转等。就象您现在看到的,黑客必须开发一款特定的工具以分析与反编译bytecode,而且还相当地耗时。可是,我们知道没有无法破解的保护程序,这也是我们为什么会将保护级别达到破解费用与购买费用相当(或破解费用甚至超过购买费用)的程度。不管怎么样,请您记住VMProtect是 一款能帮助您“隐藏”主要软件保护机制的工具。

    为保护准备程序

    首先,在Delphi中创建一个具有表格(Form1)、文本编辑字段(Edit1)以及一个按键(Button1)的简单工程:

      
    pic 1.

    在用户点击Button1后,程序将检查密码是否正确以及显示相应消息(正确或不正确):

    procedure TForm1.Button1Click(Sender: TObject);
    begin
     if StrToIntDef(Edit1.Text, 0) mod 17=13 then
      MessageDlg('Correct password', mtInformation, [mbOK], 0)
     else
      MessageDlg('Incorrect password', mtError, [mbOK], 0);
    end;

    判断密码是否正确的算法非常简单—密码被转换为数字。然后,该数字除以17,如果余数为13的话,该密码正确。否则该密码错误。
    在编译工程前,我们将在工程中启用生成MAP文件的选项:


    pic 2.

    我们需要为VMProtect准备MAP文件让它能够通过流程名称确定其地址。此后,我们会运行“Build Project1”然后获得已编译的工程以及MAP文件。

    使用书签功能

    当您只需要保护流程中的一部分(或某些部分)时,就可以理解使用书签的原因。您应使用汇编程序的插入功能以注明需要标注的部分:

    - The start marker of the protected block:

    asm
      db $EB,$10,'VMProtect begin',0
    end;

     

    - The end marker of the protected block:

    asm
      db $EB,$0E,'VMProtect end',0
    end;

    当您使用VMProtect时,书签将会有它们自己独特的名称如“VMProtectMarker”以及序列号。

    水印

    VMProtect为您提供了一个独有的功能,该功能可以将隐藏的文件所有者信息添加到被保护的文件中。您的每个用户都能拥有一个具有独特字节排列的水印。在您将水印内置到被保护文件中以后,您就能确定文件的所有者以及可以采取相应的措施(例如,破解程序被非法分发时)。

    使用VMProtect

    使用"File"-"Open"菜单项加载工程。添加负责检查工程密码是否正确的程序:

    pic 3.

    VMProtect能根据所选的编译类型以不同的方式处理被保护的代码。让我们来详细了解每个不同的编译类型:

    • Mutation:在处理器命令的程度上修改了执行文件(修改了现有的命令,添加了所有类型的垃圾命令等)。该编译类型无法充分地保护代码。它只能避免破解、解析以及避免进行中的功能由签名解析器确定(PEiD+KANAL、IDA+FLIRT等)。作为固定规则,我们并不需要保护库功能不受破解以及解析,只需要更改它们的签名就足够保护在您应用程序中应用的库(对破解与解析的保护程度不高,代码的执行率很高)。
    • 虚拟化:可执行代码被转化为由虚拟机执行的bytecode。该编译类型应该应用到所有执行率非常重要的代码的关键部分以防止破解与解析(对破解与解析的保护程度中等,代码的执行率中等)
    • Ultra(mutation+虚拟化):以处理器命令的程度修改可执行代码,然后将它转化为由虚拟机执行的bytecode。该编译类型应该应用到执行率不重要的代码(对破解与解析的保护程度高,代码的执行率低)。 

    在您将所有必要的程序添加到工程中后,切换到“选项”:

    • 调试模式(确认外部地址):用来寻找外部代码参考的地址。
    • 隐藏衡量:如果启用该选项,就不能在打开的表格中找到变量地址或调用的功能。
    • 动态创建在线命令:VM解释程序不能执行所有的Intel 8086命令,这就是为什么这些命令会以它们在保护部分中展现的形式执行的原因。动态创建在线命令同样让针对bytecode的破解变得艰难。
    • 检查VM对象的完整性:当执行程序的时候,VM解释程序会自动读取当执行命令时被运用的程序、bytecode以及水印中任意部分的检查结果。VM对象的完整性检查可保护解释程序、bytecode以及水印免遭修改。
    • 水印:选择您希望内置到被保护文件中的水印。
    • VM项目名称:您能为即将被写入VM解释程序与bytecode的新项目指定名称
    • 移除fixup元素(只针对EXE文件):编译程序(尤其象Delphi)会为EXE文件创建一个fixup元素列表。当加载EXE文件时,操作系统不会使用这些元素。如果您启用该选项,VM将使用被fixup元素列表所包含的部分。

    在指定完所有必要的选项后,开始编译工程。在编译完成后,在工程文件(例如,TEST.EXE)旁边会创建一个新文件(例如,TEST.VMP.EXE)。指定的程序将在虚拟机的该文件中运行。