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

📄 mainprog.pas

📁 别人作的MD5的破解源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  EncyPassList.Free;
end;

procedure TMainForm.StopBtnClick(Sender: TObject);
begin
  Stop := True;
end;

procedure TMainForm.SaveBtnClick(Sender: TObject);
begin
  SaveDialog.Title := '保存破解结果';
  if SaveDialog.Execute then begin
    Try
      HackResult.Lines.SaveToFile(SaveDialog.FileName);
    except
      Application.MessageBox('保存失败','提示',16);
    end;
  end;
  chdir(_Softpath);
end;

procedure TMainForm.QJModalClick(Sender: TObject);
begin
  QiongJuOption.BevelOuter := bvLowered;
  ZiDianOption.BevelOuter  := bvRaised;
end;

procedure TMainForm.ZDModalClick(Sender: TObject);
begin
  QiongJuOption.BevelOuter := bvRaised;
  ZiDianOption.BevelOuter  := bvLowered;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  EncyPassList := TStringList.Create;
  _Softpath :=ExtractFilePath(Application.ExeName);
  Stat := StatImage.Canvas;
  OpenDialog.InitialDir := _SoftPath;
  SaveDialog.InitialDir := _SoftPath;
end;

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

Function CheckPass_LJJH(const Pass : String ) : Boolean; Stdcall;  //灵剑江湖算法,如果是别的算发,请改程序
var
  Tmp , cPass : String;
  i , Len , chi : integer;
begin
  Tmp := copy(pass+'godxtll,./',1,10);
  cPass := '';
  for i:=1 to Length(Tmp) do cPass := Tmp[i] + cPass;  //反排字符串
  Len := Length(pass);
  Tmp := '';
  for i:=1 to 10 do begin
    chi := ord(cPass[i]) - Len + i;
    if i=10 then chi := chi + 1;
    Tmp := Tmp + char(chi);
  end;
  Tmp := ReplaceString(Tmp,#39,'B');
  for i:=0 to EncyPassList.Count -1 do begin
     cPass := EncyPassList.Strings[i];
     cPass := Copy(cPass,Pos(':',cPass)+1,Length(cPass));
     if Tmp = cPass then begin
     MainForm.HackResult.Lines.Add(EncyPassList.Strings[i]+'   -->  '+Pass);
     EncyPassList.Delete(i);
     end;
  end;
  LocalIndex := LocalIndex + 1;
  if LocalIndex mod 5000 =0 then begin
    Stat.TextOut(LocalTextOutLeft,TextOutTop, 'Index:'+inttostr(LocalIndex) + ' LocalKey:'+Pass+' Pass:'+Tmp);
    MainFOrm.ProgressBar.Position := LocalIndex*1000 div MaxCount;
  end;
  Result := EncyPassList.Count=0;
end;

Procedure HackerPass_LJJH ; Stdcall;
var
  i , j : integer;
  TestPass : String;
  ZDList : TStringList;
begin
  if MainForm.QJModal.Checked then
    for i := nMin to nMax do begin
       Ni := i;  //通知系统当前位数
       for j:=0 to i-1 do Indexs[j] := 1;
       while Indexs[0] <= PassLength do begin
          TestPass := '';
          for j:=0 to i-1 do TestPass := TestPass + PassChars[Indexs[j]];
          if CheckPass_LJJH(AfterChar + TestPass + EndChar) then begin
             Stop := True;
             break;
          end;
          if Stop or (Not InsIndexs) then break;
       end;
       if Stop then break;
    end
  else begin
    ZDList := TStringList.Create;
    ZDList.LoadFromFile(MainForm.ZDFile.Text);
    for i:=0 to ZDList.Count-1 do begin
      TestPass := ZDList.Strings[i];
      if CheckPass_LJJH(TestPass) then begin
        Stop := True;
        break;
      end;
      if Stop then break;
    end;
    ZDList.Free;
  end;
  OnOverProc;
end;

Function CheckPass_MD5_16(Pass:String):Boolean;
var
  i : integer;
  Tmp ,cPass : String;
  PassCount : integer;
begin
  Tmp := MD5_16Byte(Pass);
  PassCount := EncyPassList.Count;
  i := 0;
  while i < PassCount do begin
    cPass := EncyPassList.Strings[i];
    cPass := Copy(cPass,Pos(':',cPass)+1,Length(cPass));
    if Tmp = cPass then begin
      MainForm.HackResult.Lines.Add(EncyPassList.Strings[i]+'   -->  '+Pass);
      EncyPassList.Delete(i);
      Dec(PassCount);
    end;
    inc(i);
  end;
  Inc(LocalIndex);
  if LocalIndex mod 1000 =0 then begin
    Stat.TextOut(LocalTextOutLeft,TextOutTop, 'Index:'+inttostr(LocalIndex) + ' LocalKey:'+Pass+' Pass:'+Tmp);
    MainFOrm.ProgressBar.Position := LocalIndex*1000 div MaxCount;
  end;
  Result := EncyPassList.Count=0;
end;

Function CheckPass_MD5_32(Pass:String):Boolean;
var
  i : integer;
  Tmp , cPass : String;
begin
  Tmp := MD5_32Byte(Pass);
  for i:=0 to EncyPassList.Count -1 do begin
    cPass := EncyPassList.Strings[i];
    cPass := Copy(cPass,Pos(':',cPass)+1,Length(cPass));
    if Tmp = cPass then begin
      MainForm.HackResult.Lines.Add(EncyPassList.Strings[i]+'   -->  '+Pass);
      EncyPassList.Delete(i);
    end;
  end;
  Inc(LocalIndex);
  if LocalIndex mod 5000 =0 then begin
    Stat.TextOut(LocalTextOutLeft,TextOutTop, 'Index:'+inttostr(LocalIndex) + ' LocalKey:'+Pass+' Pass:'+Tmp);
    MainFOrm.ProgressBar.Position := LocalIndex*1000 div MaxCount;
  end;
  Result := EncyPassList.Count=0;
end;

Procedure HackerPass_MD5_16 ; Stdcall;
var
  i , j : integer;
  TestPass : String;
  ZDList : TStringList;
begin
  if MainForm.QJModal.Checked then
    for i := nMin to nMax do begin
       Ni := i;  //通知系统当前位数
       for j:=0 to i-1 do Indexs[j] := 1;
       while Indexs[0] <= PassLength do begin
          TestPass := '';
          for j:=0 to i-1 do TestPass := TestPass + PassChars[Indexs[j]];
          if CheckPass_MD5_16(AfterChar + TestPass + EndChar) then begin
             Stop := True;
             break;
          end;
          if Stop or (Not InsIndexs) then break;
       end;
       if Stop then break;
    end
  else begin
    ZDList := TStringList.Create;
    try
      ZDList.LoadFromFile(MainForm.ZDFile.Text);
    except
      Application.MessageBox(pchar('打开文件:'+MainForm.ZDFile.Text+'失败'),'提示',16);
    end;
    for i:=0 to ZDList.Count-1 do begin
      TestPass := ZDList.Strings[i];
      if CheckPass_MD5_16(TestPass) then begin
        Stop := True;
        break;
      end;
      if Stop then break;
    end;
    ZDList.Free;
  end;
  OnOverProc;
end;

Procedure HackerPass_MD5_32; Stdcall;
var
  i , j : integer;
  TestPass : String;
  ZDList : TStringList;
begin
  if MainForm.QJModal.Checked then
    for i := nMin to nMax do begin
       Ni := i;  //通知系统当前位数
       for j:=0 to i-1 do Indexs[j] := 1;
       while Indexs[0] <= PassLength do begin
          TestPass := '';
          for j:=0 to i-1 do TestPass := TestPass + PassChars[Indexs[j]];
          if CheckPass_MD5_32(AfterChar+TestPass+EndChar) then begin
             Stop := True;
             break;
          end;
          if Stop or (Not InsIndexs) then break;
       end;
       if Stop then break;
    end
  else begin
    ZDList := TStringList.Create;
    ZDList.LoadFromFile(MainForm.ZDFile.Text);
    for i:=0 to ZDList.Count-1 do begin
      TestPass := ZDList.Strings[i];
      if CheckPass_MD5_32(TestPass) then begin
        Stop := True;
        break;
      end;
      if Stop then break;
    end;
    ZDList.Free;
  end;
  OnOverProc;
end;

Procedure OnOverProc;
var
  S : String;
begin
  Stat.TextOut(16,TextOutTop,SpaceS);
  MainForm.HackResult.Lines.Add('End   Time : ' + DatetimetoStr(Now()));
  Stat.TextOut(16,TextOutTop, '完成     本次成功破解:'+inttostr(MainForm.HackResult.Lines.Count-2)+'个密码');
  MainForm.StartBtn.Enabled := True;
  MainForm.ProgressBar.Position := 0;
  hThread := 0;
  S := '是否将未破解的'+inttostr(EncyPassList.Count)+'个密码保存到文件?';
  if Application.MessageBox(pchar(S),'提示',36)=ID_YES then begin
    MainForm.SaveDialog.Title := '保存破解结果';
    if MainForm.SaveDialog.Execute then
      EncyPassList.SaveToFile(MainForm.SaveDialog.FileName);
    chdir(_SoftPath);
  end;
end;

end.

⌨️ 快捷键说明

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