📄 crch2.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 + -