AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

EXE-Datei überschreiben mit blockwrite?

Ein Thema von Lyan · begonnen am 21. Aug 2012 · letzter Beitrag vom 21. Aug 2012
 
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#1

EXE-Datei überschreiben mit blockwrite?

  Alt 21. Aug 2012, 14:33
Delphi-Version: 7
Hallo,

habe soeben versucht einen String einer EXE zu ersetzen, dazu habe ich die von Luckie bereitgestellte procedure verwendet:

Delphi-Quellcode:
var
  f: File;
  cntWritten: Integer;
  cntRead: Integer;
  buffer: Array of Byte;

begin
  AssignFile(f, extractfilepath(paramstr(0)) + 'output.exe');
  {$I-}
  Reset(f);
  if IOResult = 0 then
  begin
    SetLength(buffer, Length(fstr));
    BlockRead(f, buffer[0], Length(fstr), cntRead);
    ShowMessage('Gelesener Text: ' + string(buffer) + '. Gelesene Bytes: ' + IntToStr(cntRead));
    CloseFile(f);
  end
  else
    ShowMessage(SysErrorMessage(GetLastError));
  {$I+}
  AssignFile(f, extractfilepath(paramstr(0)) + 'output.exe');
  {$I-}
  Rewrite(f);
  if IOResult = 0 then
  begin
    BlockWrite(f, fstr[1], Length(fstr), cntWritten);
    ShowMessage('Geschrieben Bytes: '+IntToStr(cntWritten));
    CloseFile(f);
  end
  else
    ShowMessage(SysErrorMessage(GetLastError));
  {$I+}

end;
Dummerweise ist die EXE nach ausführen des obigen codes immer leer(0kb).

Vorhaben:

1. EXE-Datei mit FileToStr in einen String lesen.
2. Mit meiner Funktion einen beliebigen String in der EXE suchen und ersetzen
3. Die alte EXE mit dem neuen String(den bearbeiteten EXE-String) mit Blockwrite überschreiben.

Hat jemand bessere Ideen? Ich habe es selbstverständlich auch schon so gemacht, dass ich eine Textdatei, in die ich normale ASCII Zeichen hineingeschrieben hab einfach in .exe umbenannt habe..

Hier ersetze ich den String:
Delphi-Quellcode:
function TFormL.searchex(ssearch,sfile,strrep : string) : string;
var
  ipos: Integer;
  search : Treplaceflags;

begin
  search := [rfReplaceAll, rfIgnoreCase];
  result := StringReplace(sfile,ssearch,strrep,search);
end;
ssearch : Der Suchbegriff(String)
sFile : Der schon eingelesene String der EXE-Datei
strrep : Der String der ssearch ersetzen soll


Und hier die procedure zum Überschreiben:

Delphi-Quellcode:
procedure TFormL.WriteEx;
var
  f: File;
  cntWritten: Integer;
  cntRead: Integer;
  buffer: Array of Byte;

begin
  AssignFile(f, extractfilepath(paramstr(0))+'test.exe');
  {$I-}
  Rewrite(f);
  if IOResult = 0 then
  begin
    BlockWrite(f, fstr[1], Length(fstr), cntWritten);
    CloseFile(f);
  end
  else
    ShowMessage(SysErrorMessage(GetLastError));
  {$I+}
end;
Hoffe hier weiß jemand wo der Fehler liegt.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:55 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