(* file patcher * * written in borland pascal 7.0 * * has a filesize check and checks for original bytes * * you are able to "undo" your patch ! * * done by F. Mόcke in 1998 * * f_muecke@gmx.de *) Var FileName:String[13]; Ver,Cracker:String; T, TotalChanges:Integer; BytePos:Array[1..1000] Of LongInt; ShouldBe,IsGonnaBe:Array[1..1000] Of Byte; F:File of Byte; Size:longint; C:Byte; Dummy:Char; Procedure SetArray; Begin FileName:='filename.exe'; (* filename to patch *) Ver:='1.00B'; (* version of cracked prog *) Size:=654321; (* filesize in bytes *) Patcher:='ichselbst'; (* your name *) BytePos[1]:=131527; ShouldBe[1]:=116; IsGonnaBe[1]:=235; BytePos[2]:=131528; ShouldBe[2]:=117; IsGonnaBe[2]:=235; (* Offset[n], OriginalByte[n], PatchedByte[n]; with n<1000 all in decimal values *) TotalChanges:=2; (* I think you can imagine ! *) End; Begin SetArray; writeln; writeln(' ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΊ'); writeln(' Ί E V O L U T i O N CRACKZ Ί'); writeln(' ΊΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ'); writeln(' ³ FiLE......: ',FileName); writeln(' ³ VERSiON...: ',Ver); writeln(' ³ SiZE......: ',Size,' bytes'); writeln(' ³ DONE.BY...: ',Patcher); writeln(' ³'); WriteLn(' ώ Opening file'); Assign(F,FileName); {$I-} Reset(F); {$I+} If IOResult = 0 Then Begin WriteLn(' ώ Checking filezize'); if filesize(F) <> Size Then Begin WriteLn(' ώ ERROR: ',FileName ,' is the wrong size');halt(1); end; WriteLn(' ώ Patching ',TotalChanges,' bytes'); Seek (F, BytePos[1]); Read (F, C); If C=ShouldBe[1] Then Begin For T:=1 To TotalChanges Do begin Seek (F, BytePos[T]); Write (F, IsGonnaBe[T]); end; End Else Begin WriteLn(' ώ ',FileName,' has already been patched'); Write(' Undo patch [y,n]? '); ReadLn(Dummy); if Dummy='y' Then Begin For T:=1 To TotalChanges Do begin Seek (F, BytePos[T]); Write (F, ShouldBe[T]); end; End Else Begin WriteLn(' ώ ERROR: nothing to patch'); Halt(1); End; End; Close(F); WriteLn(' ώ Groovy! Patch successful!'); End Else WriteLn(' ώ ERROR: could not open ',FileName); End.