⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctmd.pas

📁 大量Delphi开发资料
💻 PAS
字号:
////////////////////////////////////////////////////////////////
{                       软件注册模块                           }
{ 包括:                          }                            }
{  1:   加密,解密函数                                         }
{  2:  获取CPU 的序列号函数(汇编语言)                       }
{  3:   一系列操作注册表函数                                   }
////////////////////////////////////////////////////////////////

unit CTMD;

interface
uses
  Classes,Registry,Windows,SysUtils,Controls;

Const
  C1 = 52845;                                     // 常量说明
  C2 = 22719;                                     // 此二常量用于生成随机数

//  CPU ID 专用变量

Const
  ID_BIT = $200000;

Type
  TCPUID = Array[1..4] of Longint;                // 储存CPU ID号

//  CPU ID 专用变量


function Encrypt(S:String;Key:Word):String;       // 加密函数声明
function Decrypt(S:String;Key:Word):String;       // 解密函数声明



function ISCPUID:Boolean;                         // 检测是否有CPU ID可查
function GetCPUID:TCPUID;                         // 获取CPU ID号



function ISFIRSTRUN(AppName:String):Boolean;      // 是否是第一次使用该软件
         // 如是第一次使用该软件,则写如相关的信息
function WriteInfo(AppName,CUPID:String):Boolean;
function ReadFirstDate(AppName:String):TDate;     // 读出第一次运行软件的时间
function ReadRegistry(AppName:String):String;     // 读出注册码
function ReadUserName(AppName:String):String;      // 读出注册用户名
function WriteRegistry(AppName,UserName,PWD:String):boolean; // 输入注册码


implementation

{*****************************加密解密函数*************************************}


function Encrypt(S:String;Key:Word):String;
var             { 加密子程序 }
  I,j:Integer;                                    // 用于循环
begin
  Result:=S;                                      // 初始化结果字符串
  for I:=1 to Length(S) do                        // 依次对字符串中的各个字符进行操作
  begin
    Result[I]:=char(byte(S[I]) xor (Key shr 8));  // 将密匙移位后与字符异或
    Key:=(byte(Result[I])+Key)*C1+C2              // 产生下一密匙
  end;
  S:=Result;                                      // 保存结果
  Result:='';                                     // 清除结果
  for I:=1 to Length(S) do                        // 对加密结果进行转换
  begin
    j:=Integer(s[i]);                             // 提取字符
    Result:=Result+Char(65+(j div 26))+Char(65+(j mod 26));
  end;
end;


function Decrypt(S:String;Key:Word):String;
var             { 解密子函数 }
  I,j:Integer;
begin
  Result:='';                                     // 清除结果
  for I:=1 to (length(S) div 2) do
  begin
    j:=(Integer(S[2*i-1])-65)*26;
    j:=j+(Integer(S[2*i])-65);
    Result:=Result+Char(j);
  end;
  S:=Result;
  for I:=1 to Length(S) do
  begin
    Result[I]:=Char(byte(S[I]) xor (Key shr 8));
    Key:=(byte(S[I])+Key)*C1+C2;
  end;
end;

{*****************************加密解密函数*************************************}


{*****************************获取CPU ID号函数*********************************}

function ISCPUID:Boolean;register;
asm             { 查看该机是否有CPU ID 号可以查 }
  PUSHFD
  POP    EAX
  MOV    EDX,EAX
  XOR    EAX,ID_BIT
  PUSH   EAX
  POPFD
  PUSHFD
  POP    EAX
  XOR    EAX,EDX
  JZ     @exit
  MOV    AL,TRUE
  @exit:
end;

function GetCPUID:TCPUID;assembler;register;
asm             { 获取CPU ID 号 }
  PUSH   EBX
  PUSH   EDI
  MOV    EDI,EAX
  MOV    EAX,1
  DW     $A20F          // CPUID Command
  STOSD                 // CPUID[1]
  MOV    EAX,EBX
  STOSD                 // CPUID[2]
  MOV    EAX,ECX
  STOSD                 // CPUID[3]
  MOV    EAX,EDX
  STOSD                 // CPUID[4]
  POP    EDI
  POP    EBX
end;

{*****************************获取CPU ID号函数*********************************}


{*****************************操作注册表函数***********************************}

function ISFIRSTRUN(AppName:String):Boolean;
var             { 判断是否是第一次运行该软件 }
  Reg:TRegistry;
begin
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_LOCAL_MACHINE;

  Try
    if Reg.OpenKey('SOFTWARE\Microsoft\Windows\ZR_SOFT\'+AppName,False) then
      Result:=False
    else
      Result:=True;
  Finally
    Reg.CloseKey;
    Reg.Free;
  End;
  
end;

function WriteInfo(AppName,CUPID:String):Boolean;
var             { 如果该软件是第一次使用,则写入相关的信息 }
  Reg:TRegistry;
begin
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_LOCAL_MACHINE;

  Try
    Reg.OpenKey('SOFTWARE\Microsoft\Windows\ZR_SOFT\'+AppName,True);
    Reg.WriteString('UserName','');             // 注册者姓名(未注册为'');
    Reg.WriteDate('FirstDate',DATE);            // 第一次运行软件的日期
    Reg.WriteString('CPUID',CUPID);             // CPU ID(用于验证注册码)
    Reg.WriteString('UserPWD','');              // 注册码(初始为'');
    Result:=True;
  Finally
    Reg.CloseKey;
    Reg.Free;
  End;
end;

function ReadFirstDate(AppName:String):TDate;
var             { 读出第一次运行软件的时间 }
  Reg:TRegistry;
begin
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_LOCAL_MACHINE;

  Try
    if Reg.OpenKey('SOFTWARE\Microsoft\Windows\ZR_SOFT\'+AppName,False) then
      Result:=Reg.ReadDate('FirstDate');
  Finally
    Reg.CloseKey;
    Reg.Free;
  End;

end;

function ReadRegistry(AppName:String):String;
var             { 读出注册码 }
  Reg:TRegistry;
begin
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_LOCAL_MACHINE;

  Try
    if Reg.OpenKey('SOFTWARE\Microsoft\Windows\ZR_SOFT\'+AppName,False) then
      Result:=Reg.ReadString('UserPWD');
  Finally
    Reg.CloseKey;
    Reg.Free;
  End;
end;

function ReadUserName(AppName:String):String;
var             { 读出注册用户名 }
  Reg:TRegistry;
begin
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_LOCAL_MACHINE;

  Try
    if Reg.OpenKey('SOFTWARE\Microsoft\Windows\ZR_SOFT\'+AppName,False) then
      Result:=Reg.ReadString('UserName');
  Finally
    Reg.CloseKey;
    Reg.Free;
  End;
  
end;


function WriteRegistry(AppName,UserName,PWD:String):boolean;
var             { 输入注册码 }
  Reg:TRegistry;
begin
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_LOCAL_MACHINE;
  Try
    if Reg.OpenKey('SOFTWARE\Microsoft\Windows\ZR_SOFT\'+AppName,False) then
    begin
      Reg.WriteString('UserName',UserName);     // 注册用户名
      Reg.WriteString('UserPWD',PWD);           // 注册码
      Result:=True;
    end;
  Finally
    Reg.CloseKey;
    Reg.Free;
  End;

end;

{*****************************操作注册表函数***********************************}
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -