📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
GroupBox1: TGroupBox;
ComboBox1: TComboBox;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
Label1: TLabel;
BitBtn2: TBitBtn;
GroupBox2: TGroupBox;
CheckBox1: TCheckBox;
LabeledEdit3: TLabeledEdit;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
ProgressBar1: TProgressBar;
LabeledEdit4: TLabeledEdit;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
ProgressBar2: TProgressBar;
LabeledEdit5: TLabeledEdit;
Label2: TLabel;
Label3: TLabel;
BitBtn5: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
procedure buildPwds(TS: TStrings; maxnum: Int64);
procedure savecur;
procedure loadcur;
public
{ Public declarations }
end;
type
T_rf_init = function(port: integer; baud: longint): longint; stdcall;
T_rf_card = function(icdev: longint; _Mode: integer; var Snr: longint): integer; stdcall;
T_rf_load_key_hex = function(icdev: longint; _Mode: integer; SecNr: integer; Key: Pchar): integer; stdcall;
T_rf_authentication = function(icdev: longint; _Mode: integer; SecNr: integer): integer; stdcall;
T_rf_read_hex = function(icdev: longint; Adr: integer; Data: pchar): integer; stdcall;
T_rf_write_hex = function(icdev: longint; Adr: integer; Data: pchar): integer; stdcall;
T_rf_exit = procedure(icdev: longint); stdcall;
var
Form1: TForm1;
rf_init: T_rf_init;
rf_exit: T_rf_exit;
rf_card: T_rf_card;
rf_load_key_hex: T_rf_load_key_hex;
rf_authentication: T_rf_authentication;
rf_read_hex: T_rf_read_hex;
rf_write_hex: T_rf_write_hex;
PassList: array of string;
CheckIndex: integer;
const
Cst32Null = '00000000000000000000000000000000';
PWDChar: array[0..15] of string = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
implementation
uses inifiles;
{$R *.dfm}
procedure TForm1.savecur;
var
inif: TInifile;
begin
inif := TInifile.Create(pchar(extractfilepath(paramstr(0)) + 'aa.cur'));
inif.WriteInteger('Parms', 'CheckIndex', CheckIndex);
inif.Free;
end;
procedure TForm1.loadcur;
var
inif: TInifile;
begin
try
inif := TInifile.Create(pchar(extractfilepath(paramstr(0)) + 'aa.cur'));
CheckIndex := inif.ReadInteger('Parms', 'CheckIndex', 0);
finally
inif.Free;
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
lhnd: THandle;
icdev: longint;
Snr: longint;
Buf: array[0..31] of char;
rst: integer;
Success: Boolean;
i, k: integer;
count, maxPos: int64;
date1, date2: TDatetime;
usedtime, alltime: integer;
begin
lhnd := Loadlibrary(pchar(extractfilepath(paramstr(0)) + 'mwrf32.dll'));
if lhnd < HINSTANCE_ERROR then begin
ShowMessage('DLL.DLL加载错');
Exit;
end;
//初始化
loadcur;
@rf_init := GetprocAddress(lhnd, 'rf_init');
@rf_card := GetprocAddress(lhnd, 'rf_card');
@rf_load_key_hex := GetprocAddress(lhnd, 'rf_load_key_hex');
@rf_authentication := GetprocAddress(lhnd, 'rf_authentication');
Snr := strtoint(LabeledEdit2.Text);
icdev := rf_init(ComboBox1.ItemIndex, strtoint(LabeledEdit1.Text));
ProgressBar2.Visible := true;
try
//寻卡
Success := False;
ProgressBar2.max := length(PassList);
date1 := now;
if (Sender as TBitBtn).Tag = 1 then
CheckIndex := 0;
for i := CheckIndex to high(PassList) do begin
CheckIndex := i;
if rf_card(icdev, 1, Snr) <> 0 then begin
savecur;
showmessage('无卡!');
exit;
end;
//装载密码
k := rf_load_key_hex(icdev, 0, Snr, pchar(PassList[i]));
if k <> 0 then begin
showmessage('装载密码错误');
exit;
end;
//验证密码
Success := rf_authentication(icdev, 0, Snr) = 0;
if Success then begin
LabeledEdit5.Text := PassList[i];
exit;
end;
if i mod 10 = 0 then begin
date2 := now;
usedtime := trunc((date2 - Date1) * 1440);
if i <> 0 then
alltime := (usedtime * ProgressBar2.max div i);
Label3.Caption := inttostr(usedtime) + '/' + inttostr(alltime);
Label2.Caption := inttostr(i) + '/' + inttostr(ProgressBar2.max);
ProgressBar2.Position := i;
application.ProcessMessages;
end;
end; //for
if not Success then
showmessage('没有找到适合的密码!');
finally
ProgressBar2.Visible := false;
@rf_exit := GetprocAddress(lhnd, 'rf_exit');
rf_exit(icdev);
FreeLibrary(lhnd);
end;
end;
procedure TForm1.buildPwds(TS: TStrings; maxnum: Int64);
var
i, j, k, l, m, n: integer;
count, maxPos: int64;
pws: string;
begin
count := 0;
maxPos := 16 * 16 * 16 * 16 * 16 * 16;
if maxPos > maxnum then
maxPos := maxnum;
ProgressBar1.Max := maxPos;
for i := 0 to 15 do
for j := 0 to 15 do
for k := 0 to 15 do
for l := 0 to 15 do
for m := 0 to 15 do
for n := 0 to 15 do begin
pws := PWDChar[i] + PWDChar[j] + PWDChar[k] + PWDChar[l] + PWDChar[m] + PWDChar[n];
TS.Add(pws + pws);
inc(count);
ProgressBar1.Position := count;
application.ProcessMessages;
if count >= maxPos then
exit;
end;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
var
TS: TStrings;
begin
if LabeledEdit3.Text = '' then begin
showmessage('输入文件名!');
exit;
end;
ProgressBar1.Visible := true;
TS := tstringlist.Create;
buildPwds(ts, strtoint(LabeledEdit4.Text));
ts.SaveToFile(LabeledEdit3.Text);
ts.free;
ProgressBar1.Visible := false;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if SaveDialog1.Execute then
LabeledEdit3.Text := SaveDialog1.FileName;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
filename: string;
i: integer;
TS: TStrings;
begin
if OpenDialog1.Execute then begin
TS := tstringlist.Create;
filename := OpenDialog1.FileName;
ts.loadfromfile(filename);
setlength(PassList, ts.count);
for i := 0 to ts.count - 1 do
PassList[i] := ts.strings[i];
ts.free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -