首页
社区
课程
招聘
[旧帖] [求助]求强人帮我编译成补丁###试了N次不成功#师傅骂了 0.00雪花
发表于: 2008-10-8 13:50 2659

[旧帖] [求助]求强人帮我编译成补丁###试了N次不成功#师傅骂了 0.00雪花

2008-10-8 13:50
2659
■■■■ Delphi注册机 ■■■
   
  uses Math, md5; // MD5网上很多,自己的搜索下载吧。
   
   
  //获得硬盘序列号的无字符值
  function GetDiskSN: string;
  var
      RootPath: array[0..20] of Char;
      VolName: array[0..255] of Char;
      SerialNumber: DWORD;
      MaxCLength: DWORD;
      FileSysFlag: DWORD;
      FileSysName: array[0..255] of Char;
  begin
      RootPath := 'C:\';
      GetVolumeInformation(RootPath, VolName, 255, @SerialNumber, MaxCLength,
          FileSysFlag, FileSysName, 255);
      Result := inttostr(SerialNumber);
  end;
   
  //通过奇偶ASCII值相加后得出最后两位值,合成一串新字符串
  function EvenOddASCII(Str: string): string;
  var
      i, a: integer;
      s: string;
  begin
      Result := '';
      a := 0;
      for i := 1 to Length(Str) do begin
          if i mod 2 = 1 then //奇数
              a := a + strtoint(Str[i])
          else //偶数
              a := a + strtoint(Str[i]) * 3;
      end;
      s := inttostr(a);
      Result := Str + Copy(s, Length(s) - 1, 2);
  end;
   
  function HexToInt(HexStr: string): Int64; // 参考网友的版本
  var
      RetVar: Int64;
      i: Byte;
  begin {Hex2Int   function}
      HexStr := UpperCase(HexStr);
      if HexStr[Length(HexStr)] = 'H' then
          Delete(HexStr, Length(HexStr), 1);
      RetVar := 0;
      for i := 1 to Length(HexStr) do begin
          RetVar := RetVar shl 4;
          if HexStr[i] in ['0'..'9'] then
              RetVar := RetVar + (Byte(HexStr[i]) - 48)
          else if HexStr[i] in ['A'..'F'] then
              RetVar := RetVar + (Byte(HexStr[i]) - 55)
          else begin
              RetVar := 0;
              break;
          end;
      end;
      Result := RetVar;
  end;
   
  procedure TForm1.Button1Click(Sender: TObject);
  var
      Str1, SN,s: string;
      intSN, MD5Code, HexStr, RegCode: string;
  begin
      //随机生成13位数字型字符串,第8位必须为8
      Randomize;
      Str1 := inttostr(RandomRange(1000, 9999)) +
          inttostr(RandomRange(100, 999)) + '8' +
          inttostr(RandomRange(10000, 99999));
      SN := EvenOddASCII(Str1); //形成有效的序列号;
      Edit1.Text := SN;
      //合成新的字符intSN         
      intSN := 'MorningstarSPK' + SN + EvenOddASCII('1' + GetDiskSN);
      //进行标准MD5加密
      MD5Code := MD5Print(MD5String(intSN));
      //取第1,2,5,6,9,10,17,18位字符组合成一个十六进制数字
      HexStr := MD5Code[1] + MD5Code[2] + MD5Code[5] + MD5Code[6] +
          MD5Code[9] + MD5Code[10] + MD5Code[17] + MD5Code[18];
       //转化为十进制     
      RegCode := inttostr(HexToInt(HexStr));
      //如果长度不够10位则前面补0,这种做法比较逊,找不到好的函数啊,大侠们提示一下。
      s := '0000000000';
  CopyMemory(@s[11 - length(RegCode)],@RegCode[1],length(RegCode));
  RegCode := s;
      Edit2.Text := RegCode;
  end;

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
55555555555..哥哥们那去了。。帮帮忙
2008-10-8 20:17
0
游客
登录 | 注册 方可回帖
返回
//