OnGuard使用小记

1.变量定义

const
  CKey : TKey =
  ( $A7,$33,$6B,$BF,$C8,$28,$86,$D2,$72,$EE,$D8,$36,$28,$69,$FC,$9B );

var

  MachineKey : TKey;
  MachineModifier : LongInt;

  

 

2.initialization部分做初始运算

  MachineKey := CKey; //这里是一个random机器码

  MachineModifier := ABS(CreateMachineID([midUser, midSystem, {midNetwork,} midDrives])); //这里通过登陆用户名、操作系统、硬盘序列号,创建一个修饰符,用于对机器码修饰
 
  ApplyModifierToKeyPrim( MachineModifier , MachineKey , SizeOf(MachineKey) ); //这里就是用上一步生成的修饰符对机器码做进一步的运算,生成一个最终的机器码,仍然保存在MachineKey中。

 

 

3.计算注册码

var
  AMachineKey:string;
  ACode : TCode ;
  ARelaseCode:string;
begin
    AMachineKey:=BufferToHex(MachineKey,SizeOf(MachineKey));//这里将机器码转为字符串

   InitSerialNumberCode( MachineKey , 1122334455 , 0 , ACode );//这里用机器码MachineKey对序列号1122334455进行加密(注意这个1122334455是你要发给软件使用人的序列号,可以是任意一个整形数,将来要用这个来注册软件的),得到一个最终的注册码
   ARelaseCode := BufferToHex( ACode , SizeOf(ACode) ); //最终的注册码转为字符串,将来软件注册时就要对比用户填写的注册码是否与这个注册码相符,相符就说明注册成功,如果不成功,就是注册失败。
end;

 

 

4.如果注册成功的话,就要把这个注册码和序列号保存起来,我选用注册表保存:

  with TRegIniFile.Create do
    try
      RootKey := HKEY_LOCAL_MACHINE ;
      OpenKey( 'SOFTWARE\PRLSOFT', True ) ;
      WriteString( 'RegInfo','SMS_SnRegCode', RelaseCode );
      WriteInteger( 'RegInfo','SMS_SerialNumber', 1122334455);
    finally
      Free;
    end;

 

 

5.在我们的软件中,就要从注册表中读取出这个注册码,然后与计算出来的注册码做对比,如果相等,就说明软件已经注册,如果失败,就说明软件未注册,我们可以做一些限制

const   
  CKey : TKey =   
  ( $A7,$33,$6B,$BF,$C8,$28,$86,$D2,$72,$EE,$D8,$36,$28,$69,$FC,$9B );   
  
var
  MachineKey : TKey;   
  MachineModifier : LongInt;

  AMachineKey:string;   
  ACode : TCode ;
  ARelaseCode:string;

  AMyRelaseCode:string;
 ASerialNumber:Integer;

{$R *.res}

begin

  MachineKey := CKey; //这里是一个random机器码
  MachineModifier := ABS(CreateMachineID([midUser, midSystem, {midNetwork,} midDrives])); //这里通过登陆用户名、操作系统、硬盘序列号,创建一个修饰符,用于对机器码修饰
  ApplyModifierToKeyPrim( MachineModifier , MachineKey , SizeOf(MachineKey) ); //这里就是用上一步生成的修饰符对机器码做进一步的运算,生成一个最终的机器码,仍然保存在MachineKey中。

  with TRegIniFile.Create do
  try   
    RootKey := HKEY_LOCAL_MACHINE ;
    OpenKey( 'SOFTWARE\PRLSOFT',False );
  
    AMyRelaseCode := ReadString( 'RegInfo' , 'SMS_SnRegCode' ,'' );
    ASerialNumber := ReadInteger( 'RegInfo', 'SMS_SerialNumber',0);
  finally
    Free;   
  end;

  MachineKey := CKey;
  MachineModifier := ABS(CreateMachineID([midUser, midSystem, {midNetwork,} midDrives]));
  ApplyModifierToKeyPrim( MachineModifier , MachineKey , SizeOf(MachineKey) );
  AMachineKey:=BufferToHex(MachineKey,SizeOf(MachineKey));
  InitSerialNumberCode( MachineKey , ASerialNumber , 0 , ACode );
  ARelaseCode := BufferToHex( ACode , SizeOf(ACode) );

  if ARelaseCode = AMyRelaseCode then   //已经注册成功
   ShowMessage('已经注册成功')
  else
  begin //未注册
   ShowMessage('未注册');
   Exit;
  end ;

  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.Title := '无线助理标准版';
  Application.CreateForm(TDM, DM);
  ...  
  Application.Run;
end.

 

你可能感兴趣的:(使用)