PYG2006注册机源码(DELPHI)

来源:互联网 发布:正义联盟英雄排名 知乎 编辑:程序博客网 时间:2024/05/17 09:47

 PYG2006注册机源码(DELPHI)

http://74.220.201.104/cmbfree/read.php?tid=15189

 

  1. PYG2006注册机源码(DELPHI)
  2. http://74.220.201.104/cmbfree/read.php?tid=15189
  3. unit pygcrackmeReg;
  4. interface
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls,StrUtils,IdHash,IdHashMessageDigest;
  8. type
  9.   TForm1 = class(TForm)
  10.     Edit1: TEdit;
  11.     Button1: TButton;
  12.     Label1: TLabel;
  13.     Label2: TLabel;
  14.     Edit2: TEdit;
  15.     Label3: TLabel;
  16.     Edit3: TEdit;
  17.     Label4: TLabel;
  18.     Edit4: TEdit;
  19.     Label5: TLabel;
  20.     Edit5: TEdit;
  21.     Label6: TLabel;
  22.     Edit6: TEdit;
  23.     OpenDialog1: TOpenDialog;
  24.     procedure FormCreate(Sender: TObject);
  25.     procedure Button1Click(Sender: TObject);
  26.   private
  27.     { Private declarations }
  28.     key:integer;
  29.     maccode:integer;
  30.     internalReg:string;
  31.     internalMD5:string;
  32.     procedure GenerateKeyFile(filepath:string);
  33.     procedure GetInternalRegCode;
  34.     function engypt(str:string):string;
  35.     function unengypt(str:string):string;
  36.   public
  37.     { Public declarations }
  38.   end;
  39. var
  40.   Form1: TForm1;
  41. implementation
  42. {$R *.dfm}
  43. {
  44. 1、本CRACKME为FSG壳,脱壳后有自校验,去掉之;
  45. 2、FORM启动时读取硬盘序列号,其中CRACKME所在盘用于生成KEY文件内容
  46.   而读C盘的序列号用于生成机器码;序列号存在负值的情况,要特别处理
  47.   用C盘序列号经过变换,用MD5变换,用于生成注册码的后八位
  48. 3、另外还有根据机器码,邮箱信息进行的变换,具体见程序
  49. }
  50. procedure TForm1.Button1Click(Sender: TObject);
  51. var
  52.   drive:string;
  53.   f:TextFile;
  54.   prevpos,currentpos:integer;
  55. begin
  56.   if (edit3.Text =''or (edit4.text='')  then
  57.   begin
  58.     showmessage('Please input name,mail and  crackme file path!');
  59.   end;
  60.   if OpenDialog1.Execute then
  61.   begin
  62.     edit5.Text:=OpenDialog1.FileName;
  63.   end;
  64.   drive:=leftstr(edit5.Text,1);
  65.   GenerateKeyFile(drive+':/');
  66.   prevpos:=posex('/',edit5.Text,1);
  67.   currentpos:=prevpos;
  68.   while currentpos<>0 do
  69.   begin
  70.     prevpos:=currentpos;
  71.     currentpos:=posex('/',edit5.Text,prevpos+1);
  72.   end;
  73.   drive:=leftstr(edit5.Text,prevpos)+'PYG2006.KEY';
  74.   AssignFile(f,drive);
  75.   Rewrite(f);
  76.   Write(f,inttostr(key));
  77.   CloseFile(f);
  78.   edit1.Text:=inttostr(key);
  79.   Edit2.Text:=inttostr(maccode);
  80.   GetInternalRegCode;
  81. end;
  82. function TForm1.engypt(str: string): string;
  83. var
  84.   i,j:integer;
  85.   singleletter:string;
  86. begin
  87.   result:='';
  88.   for i := 1 to $13 do
  89.   begin
  90.     singleletter:=midstr(str,i,1);
  91.     SetLength(singleletter,1);
  92.     j:=ord(singleletter[1])+$4 +i;
  93.     result:=Result+chr(j);
  94.   end;
  95. end;
  96. procedure TForm1.FormCreate(Sender: TObject);
  97. begin
  98.   //GenerateKeyFile('c:/');
  99. end;
  100. procedure TForm1.GenerateKeyFile(filepath: string);
  101. var
  102.   serialnumber:integer;
  103.   comlen:DWORD;
  104.   flag:DWORD;
  105.   str:string;
  106.   MyMD5:TIdHashMessageDigest5;
  107.   hashvalue:T4x4LongWordRecord;
  108.   NotS:integer;
  109. begin
  110.   GetVolumeInformation(Pchar(filepath),nil,MAX_PATH+1,@serialnumber,comlen,flag,nil,MAX_PATH+1);
  111.   str:=leftstr(inttostr(serialnumber),6);
  112.   if(serialnumber<0then
  113.   begin
  114.     str:=RightStr(str,3)+'1'+midstr(str,2,2);
  115.   end
  116.   else
  117.   begin
  118.     str:=rightstr(str,3)+leftstr(str,3);
  119.   end;
  120.   key:=20041201*18+strtoint(str);
  121.   GetVolumeInformation('c://',nil,MAX_PATH+1,@serialnumber,comlen,flag,nil,MAX_PATH+1);
  122.   if(serialnumber<0then
  123.   begin
  124.     maccode:=not serialnumber;
  125.     ShowMessage(inttostr(maccode));
  126.     maccode:=maccode+$d22f3;
  127.   end
  128.   else
  129.   begin
  130.     maccode:=serialnumber+$1e240;
  131.   end;
  132.   maccode:=strtoint(leftstr(inttostr(maccode),9));
  133.   NotS:=not serialnumber;
  134.   NotS:=NotS div 2;
  135.   NotS:=NotS+$75bcd15;
  136.   MyMD5:=TIdHashMessageDigest5.Create;
  137.   try
  138.     hashvalue:=MyMD5.HashValue(inttostr(NotS));
  139.     internalMD5:=MyMD5.AsHex(hashvalue);
  140.   finally
  141.     MyMD5.Free;
  142.   end;
  143. end;
  144. procedure TForm1.GetInternalRegCode;
  145. const
  146.   number:string='5201314896788888888888888888888888';
  147.   letter:string='chinapygabcdefghijklmopqrstuvwxyza';
  148. var
  149.   i,j:Integer;
  150.   macstr:string;
  151.   middlestr:string;
  152.   mailstr:string;
  153.   singleletter:string;
  154. begin
  155.   macstr:=inttostr(maccode);
  156.   middlestr:='';
  157.   for i:=1 to Length(macstr) do
  158.   begin
  159.     j:=strtoint(midstr(macstr,i,1));
  160.     middlestr:=middlestr+MidStr(number,j+1,1);
  161.   end;
  162.   mailstr:=edit4.Text;
  163.   j:=0;
  164.   for i := 1 to Length(mailstr) do
  165.   begin
  166.     singleletter:=midstr(mailstr,i,1);
  167.     SetLength(singleletter,1);
  168.     j:=(j+ord(singleletter[1])) xor $3;
  169.   end;
  170.   middlestr:=inttostr(strtoint(middlestr)+key+j);
  171.   for i:=1 to Length(macstr) do
  172.   begin
  173.     j:=strtoint(midstr(macstr,i,1));
  174.     middlestr:=middlestr+UpperCase(MidStr(letter,j+1,1));
  175.   end;
  176.   middlestr:=LeftStr(middlestr,5)+'-'+midstr(middlestr,6,Length(middlestr)-5);
  177.   internalReg:=middlestr;
  178.   edit6.Text:=unengypt(internalReg);
  179. end;
  180. function TForm1.unengypt(str: string): string;
  181. var
  182.   i,j:integer;
  183.   singleletter:string;
  184. begin
  185.   result:='';
  186.   for i := 1 to $13 do
  187.   begin
  188.     singleletter:=midstr(str,i,1);
  189.     SetLength(singleletter,1);
  190.     j:=ord(singleletter[1])-$4 -i;
  191.     result:=Result+chr(j);
  192.   end;
  193.   result:=Result+midstr(internalMD5,5,8);
  194. end;
  195. end.