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