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

📄 mainprog.pas

📁 别人作的MD5的破解源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit MainProg;

interface

uses
  SysUtils, Graphics, Forms,ComCtrls,ExtCtrls, StdCtrls, Controls, Classes,
  Windows , MD5Encrypt, Dialogs, Buttons, jpeg, TB97Ctls;

type
  TMainForm = class(TForm)
    passoption: TGroupBox;
    passModel: TGroupBox;
    LJJH: TRadioButton;
    Status_View: TGroupBox;
    MD5_16: TRadioButton;
    HackResult: TMemo;
    Label7: TLabel;
    MD5_32: TRadioButton;
    OpenDialog: TOpenDialog;
    NTLM: TRadioButton;
    BrowseBtn: TSpeedButton;
    SaveDialog: TSaveDialog;
    StatImage: TImage;
    QiongJuOption: TPanel;
    Label5: TLabel;
    Label6: TLabel;
    FHChar: TCheckBox;
    NumberChar: TCheckBox;
    UpperChar: TCheckBox;
    LowChar: TCheckBox;
    Label3: TLabel;
    Label2: TLabel;
    Label1: TLabel;
    Label4: TLabel;
    QJModal: TRadioButton;
    ZiDianOption: TPanel;
    ZDModal: TRadioButton;
    Label8: TLabel;
    BrowseZDBtn: TSpeedButton;
    Image1: TImage;
    PassFile: TEdit97;
    MinPassLen: TEdit97;
    MaxPassLen: TEdit97;
    AfterCharEdit: TEdit97;
    EndCharEdit: TEdit97;
    ZDFile: TEdit97;
    SaveBtn: TSpeedButton;
    StopBtn: TSpeedButton;
    StartBtn: TSpeedButton;
    ProgressBar: TProgressBar;
    procedure StartBtnClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure StopBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure LJJHClick(Sender: TObject);
    procedure BrowseBtnClick(Sender: TObject);
    procedure NTLMClick(Sender: TObject);
    procedure SaveBtnClick(Sender: TObject);
    procedure QJModalClick(Sender: TObject);
    procedure ZDModalClick(Sender: TObject);
    procedure BrowseZDBtnClick(Sender: TObject);
  private
    Function CheckInput : Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;
  Procedure HackerPass_LJJH ; Stdcall;
  Procedure HackerPass_MD5_16 ; Stdcall;
  Procedure HackerPass_MD5_32 ; Stdcall;
  Function InsIndexs : Boolean; stdcall;
  Function CheckPass_LJJH(const Pass : String ) : Boolean; Stdcall;
  Procedure OnOverProc ;

var
  MainForm: TMainForm;
  _Softpath : String;

implementation

Const
  SpaceS = '                                                                                                  ';
  LowChrs   : String = 'abcdefghijklmnopqrstuvwxyz';
  UpperChrs : String = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  Numbers   : String = '0123456789';
  FuHaos    : String = #39' !@#$%^&*()-_=+[{]}\|;:",<.>/?`~';
  TextOutTop : integer = 2;
  LocalTextOutLeft : integer = 167;

  LJJHMsg : String = '  这个功能的破解程序已经不实用'#13#10'  因为我已经开发了一个反推程序'#13#10'  但仍然可以使用。';
  NTLMMsg : String = '  该版本不支持这个功能';
var
  AfterChar , EndChar , PassChars : String;
  PassLength , NI , MaxCount , LocalIndex : integer;
  Indexs : array [0..100] of integer;
  nMin , nMax : integer;
  Stop : Boolean;
  hThread:Thandle;//定义一个句柄
  EncyPassList : TStringList;   //密码文件

  Stat : TCanvas;
{$R *.DFM}

Procedure MsgBox(Msg : String);
begin
  application.MessageBox(pchar(Msg),'提示',MB_OK+MB_ICONWARNING);
end;
Function Left(Str:string ; n:integer):string;
begin
   Result := copy(str,0,n);
end;
Function IsNumber(Str:String) : integer;
var
   XSD , i : integer;
   cTmp : String;
begin
   if (Str='') or (Str='+') or (Str='-') then begin Result := 0; exit ; end;
   XSD := pos('.',Str);
   if XSD >0 then Result := 1 else Result := 2;
   for i:=1 to length(Str) do begin
     cTmp :=copy(Str,i,1);
     if ((cTmp ='+') or (cTmp='-')) and (i>1) then Result := 0;
     if (cTmp='.') and (XSD<>i) then Result := 0;
     if (pos(cTmp,'+-0123456789.')<1) then Result := 0;
   end;
end;

Function ReplaceString(SourceStr , keyStr , ReplStr: string):string;
var
   n , m : integer;
begin
   n := length(keyStr);
   while pos(keyStr , SourceStr)>0 do begin
      m :=pos(keyStr , SourceStr);
      SourceStr := left(SourceStr , m-1) + ReplStr + copy(SourceStr , n+m , length(SourceStr));
   end;
   Result := SourceStr;
end;

Function TMainForm.CheckInput : Boolean;
begin
  Result := False;
  if IsNumber(Trim(MinPassLen.Text))<>2 then begin
     MsgBox('密码位数输入无效');
     MinPassLen.SelectAll;
     MinPassLen.SetFocus;
     exit;
  end;
  if IsNumber(Trim(MaxPassLen.Text))<>2 then begin
     MsgBox('密码位数输入无效');
     MaxPassLen.SelectAll;
     MaxPassLen.SetFocus;
     exit;
  end;
  if Not (UpperChar.Checked or LowChar.Checked or NumberChar.Checked or FHChar.Checked) then begin
     MsgBox('没有选择任何符号');
     LowChar.SetFocus;
     exit;
  end;
  if Strtoint(Trim(MinPassLen.Text))>Strtoint(Trim(MaxPassLen.Text)) then begin
     MsgBox('最小密码位数比最大密码位数小');
     MinPassLen.SelectAll;
     MinPassLen.SetFocus;
     exit;
  end;
  Result := True;
end;

Function InsIndexs : Boolean; stdcall;
var
  i  : integer;
begin
  Result := True;
  Indexs[0] := Indexs[0] +1 ;
  if Indexs[0]>PassLength then begin  //进位
    Indexs[0] := 1;
    for i:=1 to Ni-1 do begin
      if Indexs[i]<PassLength then begin
        Indexs[i] := Indexs[i]+1;
        Break;
      end;
      Indexs[i] := 1;
      if i=Ni-1 then Result := False;
    end;
    if Ni=1 then Result := False;
  end;
end;

procedure TMainForm.StartBtnClick(Sender: TObject);
var
  i , j , Tmpi : integer;
  ThreadID:DWord;
begin
  EncyPassList.Clear;
  try
    EncyPassList.LoadFromFile(Trim(PassFile.Text));
  except
    Application.MessageBox(pchar('文件:'+Trim(PassFile.Text)+' 打开失败'),'提示',64);
    exit;
  end;
  if Not CheckInput then exit;
  PassChars := '';
  if LowChar.Checked then
    PassChars := PassChars + LowChrs;
  if UpperChar.Checked then
    PassChars := PassChars + UpperChrs;
  if NumberChar.Checked then
    PassChars := PassChars + Numbers;
  if FHChar.Checked then
    PassChars := PassChars + FUHAOS;

  PassLength := Length(PassChars);
  nMin := Strtoint(Trim(MinPassLen.Text));
  nMax := Strtoint(Trim(MaxPassLen.Text));
  Stop := False;
  MaxCount := 0;
  LocalIndex := 0;
  AfterChar := Trim(AfterCharEdit.Text);
  EndChar   := Trim(EndCharEdit.Text);

  for i:=nMin to nMax do begin
    Tmpi := 1;
    for j:=1 to i do Tmpi := Tmpi*PassLength;
    MaxCount := MaxCount + Tmpi;
  end;
  HackResult.Text := 'Start Time : ' + DatetimetoStr(Now());
  Stat.Font.Assign(Font);
  Stat.TextOut(16,TextOutTop,SpaceS);
  Stat.TextOut(16,TextOutTop,'Count:'+inttostr(MaxCount));

  if LJJH.Checked then
    hthread := CreateThread(nil,0,@HackerPass_LJJH,nil,0,ThreadID)
  else if MD5_16.Checked then
    hthread := CreateThread(nil,0,@HackerPass_MD5_16,nil,0,ThreadID)
  else if MD5_32.Checked then
    hthread := CreateThread(nil,0,@HackerPass_MD5_32,nil,0,ThreadID);
  StartBtn.Enabled := hThread=0;
  if hThread = 0 then begin
    MsgBox('系统故障,程序运行无效');
  end;
end;

procedure TMainForm.LJJHClick(Sender: TObject);
begin
  Application.MessageBox(pchar(LJJHMsg),'提示 :)',64);
end;

procedure TMainForm.BrowseBtnClick(Sender: TObject);
begin
  if OpenDialog.Execute then PassFile.Text := OpenDialog.FileName;
  chdir(_Softpath);
end;

procedure TMainForm.NTLMClick(Sender: TObject);
begin
  Application.MessageBox(pchar(NTLMMsg),'提示 :)',64);
  MD5_16.Checked := True;
end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if hThread <> 0 then begin
    Stop := True;
    Sleep(1000);
    ExitThread(hThread);
  end;

⌨️ 快捷键说明

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