Windows优化大师注册机 源码

2010-08-28 10:45:06来源:西部e网作者:

Windows优化大师注册机源码

(现在的Windows优化大师只是计算cpuid的算法变了,核心注册算法一直没变过,所以用旧版本的Windows优化大师注册机都能注册新版本的

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Registry, StdCtrls, Buttons;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
GetKeySpeedButton: TSpeedButton;
CheckBox1: TCheckBox;
Label4: TLabel;
procedure GetKeySpeedButtonClick(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Family, Model, Stepping: Byte;

implementation

{$R *.dfm}

//获得CPU信息的过程,用汇编代码写的
procedure GetCpuID;
asm
PUSH EAX
MOV EAX, 1
DW $A20F //汇编指令CPUID的机器代码
MOV Stepping, AL
AND Stepping, 0FH //取得CPU STEPPING数送入到变量Stepping中
AND AL, 0F0H
SHR AL, 4
MOV Model, AL //取得CPU MODEL数送入到变量Model中
SHR AX, 8
AND AL, 0FH
MOV Family, AL //取得CPU FAMILYG数送入到变量Family中
POP EAX
end;

//RSA的加密和解密函数,等价于(m^e) mod n(即m的e次幂对n求余)
function Encrypt_Decrypt(m: Int64; e: Int64=$2C86F9; n: Int64=$69AAA0E3): Int64;
var
a, b, c: Int64;
begin
a:=m;
b:=e;
c:=1;
while b<>0 do
if (b mod 2)=0
then begin
b:=b div 2;
a:=(a * a) mod n;
end
else begin
b:=b - 1;
c:=(a * c) mod n;
end;
Result:=c;
end;

procedure TForm1.GetKeySpeedButtonClick(Sender: TObject);
var
ID, UserName, CpuVer: String;
s: Array [1..4] of Cardinal;
temp, Num1, Num2: Cardinal;
Code1, Code2: Int64;
i, ascii: Byte;
Reg: TRegistry;
begin
if (Edit1.Text='') and (CheckBox1.Checked=False)
then Application.MessageBox('请输入注册申请码!', '警告', MB_OK);
if (Edit1.Text='') and (CheckBox1.Checked=True)
then Application.MessageBox('请输入注册者姓名!', '警告', MB_OK);
if (CheckBox1.Checked=true) and (Edit1.Text<>'')
then begin
UserName:=Edit1.Text; //从Edit1.Text中取得用户名
GetCpuID; //调用过程GetCpuID
CpuVer:='Level '+IntToStr(Family)+' Rev. '+IntToStr(Model)+'.'+IntToStr(Stepping);
temp:=1;
i:=1;
while UserName[i]<>#0 do begin
ascii:=ord(UserName[i]); //函数ord()的作用为取得字符的ASCII码
temp:=(temp*ascii+$D0878) mod $F4240;
inc(i);
end;
i:=1;
while CpuVer[i]<>#0 do begin
ascii:=ord(CpuVer[i]);
temp:=(temp*ascii+$2597D) mod $F4240;
inc(i);
end;
ID:=IntToStr(temp);
end;
if (CheckBox1.Checked=false) and (Edit1.Text<>'')
then ID:=Edit1.Text;
ID:=ID+'1234567';
SetLength(ID, 8); //把字符串ID长度变为8个,并把后面的字符截掉

//下面四行语句是把字符串'You are big pig.'的内存数据送到变量s中
s[1]:=$20756f59;
s[2]:=$20657261;
s[3]:=$20676962;
s[4]:=$2e676970;
Num1:=0;
for i:=4 downto 2 do
Num1:=(Num1+ord(ID[i])) shl 8;
Num1:=Num1+ord(ID[1]);
Num2:=0;
for i:=8 downto 6 do
Num2:=(Num2+ord(ID[i])) shl 8;
Num2:=Num2+ord(ID[5]);
temp:=0;
for i:=1 to 32 do begin
temp:=temp+$9E3779B9;
Num1:=Num1+(Num2 shl 4)+(s[1] xor Num2)+((Num2 shr 5) xor temp)+s[2];
Num2:=Num2+(Num1 shl 4)+(s[3] xor Num1)+((Num1 shr 5) xor temp)+s[4];
end;

Code1:=(Num1 mod $40000000) + 2;
Code2:=($93E0014 shl 2)+ Num1 div $40000000 + 2;
Code1:=Encrypt_Decrypt(Code1);
code2:=Encrypt_Decrypt(Code2);
if (CheckBox1.Checked=False) and (Edit1.Text<>'')
then begin
Edit2.Text:=IntToHex(Code1, 8);
Edit3.Text:=IntToHex(Code2, 8);
end;
if (CheckBox1.Checked=True) and (Edit1.Text<>'')
then begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('Software\Wom', True)
then begin
Reg.DeleteValue('Masters');
Reg.WriteString('Register', UserName);
Reg.WriteString('Register_1', IntToHex(Code1, 8));
Reg.WriteString('Register_2', IntToHex(Code2, 8));
end;
Reg.Free;
Application.MessageBox('自动注册完成!', '信息', MB_OK);
end;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked=true
then begin
GetKeySpeedButton.Caption:='自动注册';
Label1.Caption:='注册者姓名';
Edit1.MaxLength:=0;
Label2.Visible:=false;
Label3.Visible:=false;
Edit2.Visible:=false;
Edit3.Visible:=false;
end
else begin
GetKeySpeedButton.Caption:='取得注册码';
Label1.Caption:='注册申请码';
Edit1.MaxLength:=8;
Label2.Visible:=true;
Label3.Visible:=true;
Edit2.Visible:=true;
Edit3.Visible:=true;
end;
end;

end.