We don't display ads so we rely on your Bitcoin donations to 1KWEk9QaiJb2NwP5YFmR24LyUBa4JyuKqZ
Post date: Sep 15, 2010 4:33:42 AM
EOF is the storage method of appending your data to the end of an executable. To recover the data, parse the PE headers to determine the offset at which the file ends and the EOF data begins; then read it.
{ uEOF Author: Xash Description: Read/Write in EOF [FR] hacksecu.com [EN] ic0de.org}unit uEof;interfaceuses Windows;function ReadFile(FileName: String): AnsiString;function ReadEof(Delimit1, Delimit2 :String) :String;function WriteEof(FileName, Res, Delimit1, Delimit2 :String) :String;implementationfunction ReadFile(FileName: String): AnsiString;var F :File; Buffer :AnsiString; Size :Integer; ReadBytes :Integer; DefaultFileMode:Byte;begin Result := ''; DefaultFileMode := FileMode; FileMode := 0; AssignFile(F, FileName); Reset(F, 1); if (IOResult = 0) then begin Size := FileSize(F); while (Size > 1024) do begin SetLength(Buffer, 1024); BlockRead(F, Buffer[1], 1024, ReadBytes); Result := Result + Buffer; Dec(Size, ReadBytes); end; SetLength(Buffer, Size); BlockRead(F, Buffer[1], Size); Result := Result + Buffer; CloseFile(F); end; FileMode := DefaultFileMode;end;function ReadEof(Delimit1, Delimit2 :String) :String;var Buffer :AnsiString; ResLength :Integer; i :Integer; PosDelimit :Integer;begin Buffer := ReadFile(ParamStr(0)); if Pos(Delimit1, Buffer) > Pos(Delimit2, Buffer) then PosDelimit := Length(Buffer)-(Pos(Delimit1, Buffer)+Length(Delimit1)) else PosDelimit := Length(Buffer)-(Pos(Delimit2, Buffer)+Length(Delimit2)); Buffer := Copy(Buffer, (Length(Buffer)-PosDelimit), Length(Buffer)); ResLength := Pos(Delimit2, Buffer)-(Pos(Delimit1, Buffer)+Length(Delimit1)); for i := 0 to (Reslength-1) do Result := Result+Buffer[Pos(Delimit1, Buffer)+(Length(Delimit1)+i)];end;function WriteEof(FileName, Res, Delimit1, Delimit2 :String) :String;var F: TextFile;begin AssignFile(F,FileName); Append(F); Writeln(F,Delimit1+Res+Delimit2); CloseFile(F);end;end.