新一代软件保护程序。被保护的代码部分在虚拟机上执行,这使得被保护的程序很难被分析与破解。反汇编程序与MAP文件的运用使您能快速选择需要保护从而避免破解的代码。
理论
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能根据所选的编译类型以不同的方式处理被保护的代码。让我们来详细了解每个不同的编译类型:
在您将所有必要的程序添加到工程中后,切换到“选项”:
在指定完所有必要的选项后,开始编译工程。在编译完成后,在工程文件(例如,TEST.EXE)旁边会创建一个新文件(例如,TEST.VMP.EXE)。指定的程序将在虚拟机的该文件中运行。