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<>#0 do begin ascii:=ord(UserName); //º¯Êýord()µÄ×÷ÓÃΪȡµÃ×Ö·ûµÄASCIIÂë temp:=(temp*ascii+$D0878) mod $F4240; inc(i); end; i:=1; while CpuVer<>#0 do begin ascii:=ord(CpuVer); 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)) shl 8; Num1:=Num1+ord(ID[1]); Num2:=0; for i:=8 downto 6 do Num2:=(Num2+ord(ID)) 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. |