动易2006序列号破解算法公布

所属分类: 实用技巧 / 应用技巧 阅读数: 1170
收藏 0 赞 0 分享
 

 unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,MD5,BASE64,math,CLIPBRD, ExtCtrls,DateUtils;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    GroupBox1: TGroupBox;
    ComboBox1: TComboBox;
    Label4: TLabel;
    ComboBox2: TComboBox;
    Label3: TLabel;
    ComboBox3: TComboBox;
    Label5: TLabel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    RadioGroup1: TRadioGroup;
    Image1: TImage;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    Procedure GenPE2006Key();
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
    PublicKey=63169;
    Modulus=43679;
Function Crypt(const pLngMessage, pLngKey:integer):Integer;
var
  lLngMod,lLngResult,lLngIndex:integer;
begin
  If pLngKey Mod 2 = 0 Then
  begin

    lLngResult := 1;
    For lLngIndex := 1 To pLngKey div 2 do
    begin
      lLngMod := round(Power(pLngMessage , 2)) Mod Modulus;
      // Mod may error on key generation
      lLngResult := (lLngMod * lLngResult) Mod Modulus
    end;
  end
  Else
  begin
    lLngResult := pLngMessage ;
    For lLngIndex := 1 To pLngKey div 2 do
    begin
      lLngMod := round(Power(pLngMessage , 2)) Mod Modulus ;

      // Mod may error on key generation
      lLngResult := (lLngMod * lLngResult) Mod Modulus ;

    end;
  End;
  Result := lLngResult ;
End;

Function Encode(const pStrMessage:String):String;
var
  lLngIndex,lLngMaxIndex:Integer;
  lBytAscii:Byte;
  lLngEncrypted:Integer;
begin
  Result := '';
  lLngMaxIndex := Length(pStrMessage);
  If lLngMaxIndex = 0 Then
    Exit;
  For lLngIndex := 1 To lLngMaxIndex do
  begin
    lBytAscii := Ord(pStrMessage[lLngIndex]);
    lLngEncrypted := Crypt(lBytAscii, PublicKey);
    Result := Result + IntToHex(lLngEncrypted, 4)
  end;
End;

Procedure Gen2006Key(var st1:String; Const sSiteName,sYear,sVersion:String;iStr:Integer);
var
  sSiteMD5,SA,sCRC:String;
  i,k:Integer;
begin
  SA:='';
  sSiteMD5:= cMD5.UpperMD5(cBase64.StrToBase64(sSiteName)+ cBase64.StrToBase64(sVersion));

  sCRC:=Encode(Trim(Copy(sSiteMD5,1,5)));
  SA:=sSiteMD5+sSiteMD5+sYear+sCRC;

  //填充散列
  k:=iStr;
  for i:=1 to Length(SA) do
  begin
    st1[k]:= SA[i];
    k:= k+(i mod 9) +1;
  end;

end;

procedure TForm1.GenPE2006Key;
const
  sBase='123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-=';
var
  sSiteName,sYear:String;
  SN:String;
  st1,st2:String;

  i:integer;

  F1: TextFile;

begin

  sSiteName:=Trim(Edit1.Text);

  DateSeparator := '-';
  ShortDateFormat := 'yyyy-mm-dd';

  case RadioGroup1.ItemIndex of
    0:sYear:=DateToStr(IncDay(Date,3));
    1:sYear:=DateToStr(IncDay(Date,10));
    2:sYear:=DateToStr(IncDay(Date,365));
    3:sYear:=DateToStr(IncDay(Date,3650));
    4:sYear:=Trim(Edit2.Text);
  end;
  sYear:= Trim(cBase64.StrToBase64(sYear));

  Setlength(SN,4096);

  //生成随机数
  SetLength(st1,4064);
  Randomize;
  for i:=1 to Length(st1) do
    st1[i]:= sBase[Random(63)+1];

  if ComboBox1.ItemIndex >0 then
    Gen2006Key(st1,sSiteName,sYear,'CMS'+intTostr(ComboBox1.ItemIndex),1);

  if ComboBox2.ItemIndex >0 then
    Gen2006Key(st1,sSiteName,sYear,'eShop'+intTostr(ComboBox2.ItemIndex),501);

  if ComboBox3.ItemIndex >0 then
    Gen2006Key(st1,sSiteName,sYear,'CRM'+intTostr(ComboBox3.ItemIndex),1001);

    //供求
  if CheckBox1.Checked then
    Gen2006Key(st1,sSiteName,sYear,'SD',3001);

    //房产
  if CheckBox2.Checked then
    Gen2006Key(st1,sSiteName,sYear,'House',3501);

    //企业招聘
  if CheckBox3.Checked then
    Gen2006Key(st1,sSiteName,sYear,'HR',2501);

    //室场登记
  if CheckBox4.Checked then
    Gen2006Key(st1,sSiteName,sYear,'Equipment',2001);

    //学生学籍
  if CheckBox5.Checked then    
    Gen2006Key(st1,sSiteName,sYear,'SDMS',1501);

  st2:= cMD5.UpperMD5(st1);

  //填充序列号
  for i:=1 to 4000 do
    SN[i]:= st1[i];
  for i:=1 to Length(st2) do
    SN[4000+i]:= st2[i];
  for i:=1 to 64 do
    SN[4032+i]:= st1[4000+i];


  Clipboard.Astext := SN ;

  AssignFile(F1, '['+sSiteName+']SN.txt');
  Rewrite(F1);
  Write(F1,SN);
  CloseFile(F1);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GenPE2006Key();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RadioGroup1.Color := RGB(78,111,214);
  GroupBox1.Color := RGB(78,111,214);
end;

end.

更多精彩内容其他人还在看

Win XP系统语言栏丢失解决三例

案例一:   问:一台计算机使用Windows XP操作系统,最近任务栏内无法显示语言栏,我通过“区域和语言选项”里的设置找回了语言栏,重新启动计算机后,问题依旧,请问是什么问题造成的?
收藏 0 赞 0 分享

设计软件中的系统字体应用小技巧

大家都知道,在操作系统的安装目录下有字体库,要使用种字体首先需要安装,但是这会造成字体占用系统盘空间过多。设计使用的字体都不少,怎么说也有几个G,很占资源,下面教大家一个稍微节省资源的方法。
收藏 0 赞 0 分享

Access中字段上自动打开的输入法的解决方法

打开Access数据库时,在里面数据表字段输入数值时,总是会跳出输入法来,很是烦人,在网上找了一下,找到了相应的解决办法:
收藏 0 赞 0 分享

“internet explore 无法打开internet站点 已终止操作”的解决方法

在IE下,当页面还没有加载完全时,如果正在执行的JS代码中含有使用了document.createElement的话,很容易引起页面加载失败.导致提示"internet explore 无法打开internet站点 http://www.xxx.com/xxx/xxx.
收藏 0 赞 0 分享

十个习惯让你精通新的开发技术

这篇文章,是从我的《高效开发人员的五个特征》一文中抽出的一个观点。从我自身的事业和习惯中,我考虑了很多方式怎么样才能有效地学习。
收藏 0 赞 0 分享

小谈RADMIN爆破

最近做渗透测试时常碰到RADMIN一类的东西.. 一碰到此类的程序,一般我都会先看下对方把RADMIN的端口配置成什么..以及相应的PASS(加密过的)
收藏 0 赞 0 分享

动易2006序列号破解算法公布

动易2007就快发布了,把2006的算法公开吧,赚点人气,希望动易不要来找我 。
收藏 0 赞 0 分享

联众密码的逆向算法公布

闲来无事,每天上联众,联众的密码经过加密后保存在本地注册表里,看看是怎么加密的。下了个ollydbg,一路跟踪,发现算法极其简单,给出Delphi版本的解密算法(加密部分有兴趣的一起来讨论)。算法比较粗糟,谁帮优化一下:)
收藏 0 赞 0 分享

关于三种主流WEB架构的思考

做WEB好几年了,各种语言和技术都稍有涉猎。今天心血来潮,突然想总结一下。其实不论什么技术,什么需求,通常WEB开发就是通过WEB前端管理一个或大或小或独立或分布式的关系型数据库,很多东西都是相通的。这里说的WEB架构,是指WEB应用开发中每种技术独有的资源组织形式(包括文件,数
收藏 0 赞 0 分享

一篇关于程序员性格的文章第1/3页

软件开发中人们很少注意个人性格问题。自从 1965年Edsger Dijkstra的有里程碑意义的文章“程序开发是一种人类活动”发表以来,程序员性格被认为是合理的和有成效的研究领域,虽然有些题目如“大桥建筑者的心理”和“对律师行为的研究实验”看起来可能是荒唐的,而在计算机领域,“
收藏 0 赞 0 分享
查看更多