VMP的5种保护方式示例程序,你能搞定几个?
本帖最后由 jjjjjj8889 于 2022-2-8 12:37 编辑输入密码,点下面按钮,经过简单加密后判定,正确的话会在memo显示密码正确,错误不显示任何信息。
按钮就是如图的几种代码保护,非常简单,大家可以尝试每一种保护。代码也贴出来了,为lazarus编译,所以显得文件比较大。
序列号文件可按自己需求改名或删除。
下载:https://m01.lanzouq.com/igPY3zqtkwh
unit vmptest;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, des, VMProtectSDK;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button6: TButton;
Button7: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button6Click(Sender: TObject);
begin
VMProtectBeginVirtualizationLockByKey('Button6Click');//虚拟化并锁定序列号
if EncryStrHex(edit1.Text,'key')=EncryStrHex('123456','key') then memo1.Lines.Add('密码正确!'+FormatdateTime('hh:mm:ss', now));
VMProtectEnd;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
VMProtectBeginUltraLockByKey('Button7Click'); //变异+虚拟化并锁定序列号
if EncryStrHex(edit1.Text,'key')=EncryStrHex('123456','key') then memo1.Lines.Add('密码正确!'+FormatdateTime('hh:mm:ss', now));
VMProtectEnd;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin //无保护
if EncryStrHex(edit1.Text,'key')=EncryStrHex('123456','key') then memo1.Lines.Add('密码正确!'+FormatdateTime('hh:mm:ss', now));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
VMProtectBeginMutation('Button2Click'); //代码变异
if EncryStrHex(edit1.Text,'key')=EncryStrHex('123456','key') then memo1.Lines.Add('密码正确!'+FormatdateTime('hh:mm:ss', now));
VMProtectEnd;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
VMProtectBeginVirtualization('Button3Click'); //代码虚拟化
if EncryStrHex(edit1.Text,'key')=EncryStrHex('123456','key') then memo1.Lines.Add('密码正确!'+FormatdateTime('hh:mm:ss', now));
VMProtectEnd;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
VMProtectBeginUltra('Button4Click'); //代码变异+虚拟化
if EncryStrHex(edit1.Text,'key')=EncryStrHex('123456','key') then memo1.Lines.Add('密码正确!'+FormatdateTime('hh:mm:ss', now));
VMProtectEnd;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
load_xlh:Tstringlist;
begin
if FileExists('序列号.txt') then
begin
load_xlh:=Tstringlist.Create;
load_xlh.LoadFromFile(ExtractFilePath(Application.ExeName) + '序列号.txt');
if VMProtectSetSerialNumber(PAnsiChar(AnsiString(load_xlh.Text)))=0 then //将序列号载入vmp系统
begin
memo1.Lines.Add('序列号成功载入vmp系统');
end;
load_xlh.Free;
end;
end;
end.
ynboyinkm 发表于 2022-2-8 14:26
这个必须收藏,我也在用vm壳!
我是新手,还不太会用,更摸到皮毛,希望能跟你多学习。
还有,我感觉vmp加壳后启动太慢了,好像比winlicense慢很多,不知道是不是错觉,我有点想换到winlicense 请教楼主一个问题,我发现vm的授权系统的rsa算法的公钥很短,而且是一个不变的定值,似乎不管是1024位、2048还是4096位,公钥始终是EAAQAA==,这个是破解不完全造成的,还是说原本就是这么设计的? submariner 发表于 2022-2-9 00:02
请教楼主一个问题,我发现vm的授权系统的rsa算法的公钥很短,而且是一个不变的定值,似乎不管是1024位、204 ...
公私这个没有多少重要关系,主要是公用的。 submariner 发表于 2022-2-9 00:02
请教楼主一个问题,我发现vm的授权系统的rsa算法的公钥很短,而且是一个不变的定值,似乎不管是1024位、204 ...
EAAQAA==
看一下base64解密后的结果 wgz001 发表于 2022-2-9 10:38
EAAQAA==
看一下base64解密后的结果
哈哈哈哈,笑死 wgz001 发表于 2022-2-9 10:38
EAAQAA==
看一下base64解密后的结果
不是准确的EAAQAA==,就是很短的意思;我查了一下,准确的数据是AAEAAQ==,解密后的HEX数据:00010001,十进制就是65537 正在学习中,感觉好复杂呀,谢谢分享。 snakenba580 发表于 2022-2-11 07:50
正在学习中,感觉好复杂呀,谢谢分享。
你搞定了几个?
页:
[1]