AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

File patchen

Ein Thema von kuba · begonnen am 4. Apr 2009 · letzter Beitrag vom 27. Jan 2023
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.908 Beiträge
 
Delphi 12 Athens
 
#1

Re: File patchen

  Alt 4. Apr 2009, 23:02
Du musst das doch nur exakt wie in ScanFile schon gezeigt machen. Nur eben statt nur suchen ggf. auch ersetzen.

Wobei ich mich allerdings frage was für einen Sinn das hat. Außer um einen Virus zu schreiben. Denn schließlich bringt das ja keinerlei Vorteil für die Sicherheit oder Benutzung des Systems, verhindert aber ggf. die Reparatur des Systems.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: File patchen

  Alt 4. Apr 2009, 23:16
Zitat von jaenicke:
Du musst das doch nur exakt wie in ScanFile schon gezeigt machen. Nur eben statt nur suchen ggf. auch ersetzen.

Wobei ich mich allerdings frage was für einen Sinn das hat. Außer um einen Virus zu schreiben. Denn schließlich bringt das ja keinerlei Vorteil für die Sicherheit oder Benutzung des Systems, verhindert aber ggf. die Reparatur des Systems.
Es ist zur Einrichtung eines KIOSK PC gedacht, dieser darf nicht durch Tastatureingaben in der Startphase unterbrochen werden ! Der abgesicherte Modus ermöglicht weitreichende Manipulationsmöglichkeiten um das System zu kompromittieren.

Der KIOSK PC läuft in einer virtuellen Maschine, daher muss F8 ausser Kraft gesetzt werden !

Die Information mit der F8 Taste kommt selbstverständlich von Microsoft und ist eigentlich nicht für Virenhersteller gedacht.

Die Reparatur des System erfolgt ggf. durch Barts PE

KUBA
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.908 Beiträge
 
Delphi 12 Athens
 
#3

Re: File patchen

  Alt 4. Apr 2009, 23:43
Zitat von kuba:
Der abgesicherte Modus ermöglicht weitreichende Manipulationsmöglichkeiten um das System zu kompromittieren.
Aber nur, wenn kein Administratorpasswort usw. gesetzt ist, denn sonst kommt man erst gar nicht ins System hinein...

Trotzdem: es ist wie gesagt ja eigentlich fast nichts zu ändern im Vergleich zu dem verlinkten ScanFile.
Hier mal eine Version, die auch für Delphi 2009 eine byteweise Ersetzung mittels AnsiStrings zulässt. 3 Zeilen und ein Parameter sind neu und eine Zeile geändert, sonst nur String durch AnsiString und PChar durch PAnsiChar ersetzt.
Delphi-Quellcode:
function ReplaceInFile(const FileName, SearchString, NewString: AnsiString;
  CaseSensitive: Boolean): Longint;
  { returns position of string in file or -1, if not found }
const
  BufferSize = $8001; { 32K+1 bytes }
var
  pBuf, pEnd, pScan, pPos: PAnsiChar;
  filesize: LongInt;
  bytesRemaining: LongInt;
  bytesToRead: Integer;
  F: file;
  SearchFor: PAnsiChar;
  oldMode: Word;
begin
  Result := -1; { assume failure }
  // NEW (first line): if length of string to search and new string does not match, cancel.
  // Of course one could move the rest of the file accordingly instead.
  if (Length(SearchString) <> Length(NewString))
    or (Length(SearchString) = 0) or (Length(FileName) = 0) then Exit;
  SearchFor := nil;
  pBuf := nil;

  { open file as binary, 1 byte recordsize }
  AssignFile(F, FileName);
  oldMode := FileMode;
  FileMode := fmOpenReadWrite; { NEW: access to read and write }
  Reset(F, 1);
  FileMode := oldMode;
  try
    { allocate memory for buffer and pchar search string }
    SearchFor := StrAlloc(Length(SearchString) + 1);
    StrPCopy(SearchFor, SearchString);
    if not caseSensitive then { convert to upper case }
      AnsiUpper(SearchFor);
    GetMem(pBuf, BufferSize);
    filesize := System.Filesize(F);
    bytesRemaining := filesize;
    pPos := nil;
    while bytesRemaining > 0 do
    begin
      { calc how many bytes to read this round }
      if bytesRemaining >= BufferSize then
        bytesToRead := Pred(BufferSize)
      else
        bytesToRead := bytesRemaining;

      { read a buffer full and zero-terminate the buffer }
      BlockRead(F, pBuf^, bytesToRead, bytesToRead);
      pEnd := @pBuf[bytesToRead];
      pEnd^ := #0;
       { scan the buffer. Problem: buffer may contain #0 chars! So we
         treat it as a concatenation of zero-terminated strings. }

      pScan := pBuf;
      while pScan < pEnd do
      begin
        if not caseSensitive then { convert to upper case }
          AnsiUpper(pScan);
        pPos := StrPos(pScan, SearchFor); { search for substring }
        if pPos <> nil then
        begin { Found it! }
          Result := FileSize - bytesRemaining +
            Longint(pPos) - Longint(pBuf);

          // NEW: replace it
          Seek(F, Result);
          BlockWrite(F, PAnsiChar(NewString)^, Length(NewString));

          Break;
        end;
        pScan := StrEnd(pScan);
        Inc(pScan);
      end;
      if pPos <> nil then Break;
      bytesRemaining := bytesRemaining - bytesToRead;
      if bytesRemaining > 0 then
      begin
       { no luck in this buffers load. We need to handle the case of
        the search string spanning two chunks of file now. We simply
        go back a bit in the file and read from there, thus inspecting
        some characters twice
       }

        Seek(F, FilePos(F) - Length(SearchString));
        bytesRemaining := bytesRemaining + Length(SearchString);
      end;
    end; { While }
  finally
    CloseFile(F);
    if SearchFor <> nil then StrDispose(SearchFor);
    if pBuf <> nil then FreeMem(pBuf, BufferSize);
  end;
end; { ScanFile }
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: File patchen

  Alt 5. Apr 2009, 00:21
Hallo,

vielen, vielen Dank !!!

Es funktioniert prima, anbei der "Patcher"

KUBA

PS: winexec ersetzt durch FileSetReadOnly('c:\ntldr', False);
Angehängte Dateien
Dateityp: zip nof8_982.zip (214,7 KB, 34x aufgerufen)
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Re: File patchen

  Alt 26. Jan 2023, 12:14
Hallo,
vielen, vielen Dank !!!
Es funktioniert prima, anbei der "Patcher"
...;
Hallo Community,
ich versuche den betagten "Patcher" (nof8_982.zip aus dem Jahr 2009) von Kuba zum Laufen zu bringen, aber der Code läßt sich selbst mit meinem recht alten XE5 (aus 2013) nicht kompilieren.
Hat jemand von Euch eine angepaßte Version davon?

Danke im Voraus!
Viele Grüße
Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: File patchen

  Alt 26. Jan 2023, 13:10
.. das liegt an dem hier:

SearchFor := StrAlloc(Length(SearchString) + 1); searchFor ist ein pAnsiChar
StrAlloc liefert ein pWideChar

vielleicht funktioniert es so:
SearchFor := pAnsiChar(StrAlloc(Length(SearchString) + 1)); Grüße
Klaus
Klaus

Geändert von Klaus01 (26. Jan 2023 um 13:22 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#7

AW: File patchen

  Alt 26. Jan 2023, 13:17
Vielen Dank, Klaus!
Das war's.

Viele Grüße
Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#8

AW: File patchen

  Alt 26. Jan 2023, 14:30
Ja das Programm läuft zwar (natürlich mit harmlosen Testdateien), aber es wird gar nichts gepatcht: Weder eine Exe, noch eine simple TXT-Datei.

Weiß jemand einen Rat?
Danke im Voraus!

Viele Grüße
Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#9

AW: File patchen

  Alt 26. Jan 2023, 15:17
vielleicht funktioniert es so:
SearchFor := pAnsiChar(StrAlloc(Length(SearchString) + 1));
Das mag vielleicht "erstmal" so halbwegs gehen, aber richtig ist es so
SearchFor := AnsiStrAlloc(Length(SearchString) + 1); .

Außerdem noch StrPCopy zu StrPCopyA usw.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (26. Jan 2023 um 15:20 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#10

AW: File patchen

  Alt 26. Jan 2023, 16:26
Danke Himitsu,
es wird schon besser!
StrPCopyA kennt XE5 noch nicht (oder vielleicht nicht mehr?), aber
ich habe:
Delphi-Quellcode:
StrPCopy(..) durch System.AnsiStrings.StrPCopy(..)
StrEnd(..) durch System.AnsiStrings.StrEnd(..)
StrDispose(..) durch System.AnsiStrings.StrDispose(..)
ersetzt und benutzt. Damit konnte ich eine TXT-Datei erfolgreich patchen, nicht jedoch eine EXE, auch nicht dann, wenn der neue String dieselbe Länge hatte wie der alte in der EXE.
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz