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

📄 crch2.pas

📁 CRC校验算法 CRC校验算法 CRC校验算法 CRC校验算法
💻 PAS
字号:
unit Main1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    LabeledEdit1: TLabeledEdit;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    LabeledEdit2: TLabeledEdit;
    LabeledEdit3: TLabeledEdit;
    Button3: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    procedure AddToFile(const filename: string; const buffer: pointer;
                        const Length:byte);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
  uses crc32;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
If OpenDialog1.Execute then LabeledEdit1.Text:=Opendialog1.FileName;
end;

procedure TForm1.Button2Click(Sender: TObject);
var CRC: Cardinal;
begin
CRC:=FileCRC32(LabeledEdit1.Text);
LabeledEdit2.Text:=IntToHex(CRC,8);
end;

procedure TForm1.Button3Click(Sender: TObject);
var ReqCRC, CRC, dummie: Cardinal;
    Buffer: Pointer;
    i:Byte; j:Word;
    c: Cardinal;
begin
Memo1.Lines.Add(TimeToStr(now)+' : ');
Memo1.Lines.Add('Examining file '+LabeledEdit1.Text);
CRC:=FileCRC32(LabeledEdit1.Text);
Memo1.Lines.Add(TimeToStr(now)+' : ');
Memo1.Lines.Add('CRC32 found: '+IntToHex(CRC,8));
ReqCRC:=StrToInt('$'+LabeledEdit3.Text);
Memo1.Lines.Add('Requested CRC: '+IntToHex(ReqCRC,8));
Memo1.Lines.Add(TimeToStr(now)+' : ');
Memo1.Lines.Add('Analysis...');
if ReqCRC = CRC then begin Memo1.Lines.Add('Nothing to be done'); Exit; end;
Screen.Cursor:=crHourGlass;
try
Memo1.Lines.Add(TimeToStr(now)+' : ');
Memo1.Lines.Add('Testing 1 byte...');
for i:=0 to High(i) do begin
 Buffer:=@i;
 dummie:=CRC;
 CalcCRC(dummie,buffer,1);
 if dummie=ReqCRC then begin
   Memo1.Lines.Add(TimeToStr(now)+' : ');
   Memo1.Lines.Add('Requested CRC32 found! Add byte $'+
                    IntToHex(i,2)+' to your file!');
   if MessageDlg('Requested CRC found. Add byte to file?',mtConfirmation,
          [mbYes,mbNo],0) = mrYes then begin
            AddToFile(LabeledEdit1.Text,buffer,1);
            Memo1.Lines.Add('Bytes appended to file!');
          end;
   Exit;
 end;
end;
Memo1.Lines.Add(TimeToStr(now)+' : ');
Memo1.Lines.Add('Testing 2 bytes...');
Application.ProcessMessages;
for j:=0 to High(j) do begin
 Buffer:=@j;
 dummie:=CRC;
 CalcCRC(dummie,buffer,2);
 if dummie=ReqCRC then begin
   Memo1.Lines.Add(TimeToStr(now)+' : ');
   Memo1.Lines.Add('Requested CRC32 found! Add bytes $'+
                   IntToHex(Ord(PChar(buffer)[0]),2)+
                   IntToHex(Ord(PChar(buffer)[1]),2)+
                   ' to your file!');
   if MessageDlg('Requested CRC found. Add bytes to file?',mtConfirmation,
          [mbYes,mbNo],0) = mrYes then begin
            AddToFile(LabeledEdit1.Text,buffer,2);
            Memo1.Lines.Add('Bytes appended to file!');
          end;
   Exit;
 end;
end;
Memo1.Lines.Add(TimeToStr(now)+' : ');
Memo1.Lines.Add('Testing 3 bytes...');
Application.ProcessMessages;
GetMem(buffer,3);
try
 For j:=0 to High(j) do begin
  PChar(buffer)[0]:=Chr(Hi(j));
  PChar(buffer)[1]:=Chr(Lo(j));
  for i:=0 to High(i) do begin
    PChar(buffer)[2]:=Chr(i);
    dummie:=CRC;
    CalcCRC(dummie,buffer,3);
    if dummie=ReqCRC then begin
      Memo1.Lines.Add(TimeToStr(now)+' : ');
      Memo1.Lines.Add('Requested CRC32 found! Add bytes $'+
                   IntToHex(Ord(PChar(buffer)[0]),2)+
                   IntToHex(Ord(PChar(buffer)[1]),2)+
                   IntToHex(Ord(PChar(buffer)[2]),2)+
                   ' to your file!');
      if MessageDlg('Requested CRC found. Add bytes to file?',mtConfirmation,
          [mbYes,mbNo],0) = mrYes then begin
            AddToFile(LabeledEdit1.Text,buffer,3);
            Memo1.Lines.Add('Bytes appended to file!');
          end;
      Exit;
    end;
  end;
 end;
finally
FreeMem(buffer,3)
end;
Memo1.Lines.Add(TimeToStr(now)+' : ');
Memo1.Lines.Add('This will take some time, no indicator is shown');
Memo1.Lines.Add('Do not kill me please :)');
Memo1.Lines.Add('Testing 4 bytes...');
Application.ProcessMessages;
c:=0;
repeat
 Buffer:=@c;
 dummie:=CRC;
 CalcCRC(dummie,buffer,4);
 if dummie=ReqCRC then begin
   Memo1.Lines.Add(TimeToStr(now)+' : ');
   Memo1.Lines.Add('Requested CRC32 found! Add bytes $'+
                IntToHex(Ord(PChar(buffer)[0]),2)+
                IntToHex(Ord(PChar(buffer)[1]),2)+
                IntToHex(Ord(PChar(buffer)[2]),2)+
                IntToHex(Ord(PChar(buffer)[3]),2)+
                ' to your file!');
   if MessageDlg('Requested CRC found. Add bytes to file?',mtConfirmation,
          [mbYes,mbNo],0) = mrYes then begin
            AddToFile(LabeledEdit1.Text,buffer,4);
            Memo1.Lines.Add('Bytes appended to file!');
          end;
   Exit;
 end;
 c:=c+1;
until c=4294967295;
//we have to do it one final time
 Buffer:=@c;
 dummie:=CRC;
 CalcCRC(dummie,buffer,4);
 if dummie=ReqCRC then begin
   Memo1.Lines.Add(TimeToStr(now)+' : ');
   Memo1.Lines.Add('Requested CRC32 found! Add bytes $'+
                IntToHex(Ord(PChar(buffer)[0]),2)+
                IntToHex(Ord(PChar(buffer)[1]),2)+
                IntToHex(Ord(PChar(buffer)[2]),2)+
                IntToHex(Ord(PChar(buffer)[3]),2)+
                ' to your file!');
   Memo1.Lines.Add('You were damned unlucky! This was the final value tested!');
   if MessageDlg('Requested CRC found. Add bytes to file?',mtConfirmation,
          [mbYes,mbNo],0) = mrYes then begin
            AddToFile(LabeledEdit1.Text,buffer,4);
            Memo1.Lines.Add('Bytes appended to file!');
          end;
   Exit;
 end;
Memo1.Lines.Add('Sorry, not found!');
finally
Screen.Cursor:=crDefault;
end;
end;

procedure TForm1.AddToFile(const filename: string; const buffer: Pointer;
                        const Length:byte);
var f: file of byte;
begin
AssignFile(f,filename);
Reset(f);
try
 Seek(f,FileSize(f));
 Blockwrite(f,buffer^,length);
finally
 CloseFile(f);
end;
end;

end.

⌨️ 快捷键说明

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