📄 mainprog.pas
字号:
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 + -