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.