AGB  ·  Datenschutz  ·  Impressum  







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

EXE editieren

Ein Thema von albert1985 · begonnen am 8. Feb 2007 · letzter Beitrag vom 10. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
albert1985

Registriert seit: 14. Jan 2007
38 Beiträge
 
Delphi 7 Personal
 
#1

EXE editieren

  Alt 8. Feb 2007, 22:36
Hi,
Wie wäre es möglich, eine exe-Datei zu "verändern" ? Hab mich schon darüber informiert, wobei
ich jetzt die Möglichkeit mit Ressourcen ganz interessant finde...
Leider fällt mir es recht schwer da komplett durchzublicken und ich würde
mich freuen wenn mir jemand ein beipspiel zeigen könnte, denn ich denke so werd ich es am
effektivsten lernen !

Also nehmen wir an ich hätte zB ein Programm geschrieben, dass beim Klick auf einen Button
eine Nachricht anzeigt mit einem bestimmten Text, der in meinem Programm über ein Edit-Feld
eingegeben wurde:

Delphi-Quellcode:
...
procedure Button1Click(Sender: TObject);
begin
  Showmessage (Edit1.Text);
end;
...
Ich will es nun quasi irgendwie ermöglichen, dass ich in meinem Programm immer wieder neue exen "erzeugen" kann, eben mit unterschiedlichem edit1.text. Geht dass nun so, dass ich das Nachrichten-Programm kompiliere und dann irgendwie in meinem hauptprogramm den Editfeld-Text in die Exe hineinschreibe ? Ich hab zwar schon von Offsets gehört, die per Hex-Editor gesucht werden müssen etc., aber wie gesagt blick ich da nicht so richtig durch und weiß nicht wo ich nun genau anfangen soll

Hoffe ihr könnt mir weiter helfen Danke
"Was machen Sie? – Wie? Machen? – Ich meine beruflich… – Wieso? Damit Sie Interesse heucheln können?"
  Mit Zitat antworten Zitat
SMALLID

Registriert seit: 10. Aug 2004
78 Beiträge
 
#2

Re: EXE editieren

  Alt 9. Feb 2007, 02:05
Willst du das denn unbedingt in einer Datei haben? Ansonsten hättest du einfach eine Exe machen können und verschiedene "ini" oder "txt" dateien ausliefern können, in denen unterschiedliche werte für Edit1.Text stehen.

Ich weiß nicht ob es eine elegante Lösung ist, aber über einen FileStream kannst du die Exe direkt aufmachen und editieren. Besser wäre, aber wenn man auch da noch direkt auf die Eigenschaft Text zugreifen könnte. Es gibt Komponenten, die eine "Ressource" in deine Exe bringen, die veränderbar ist. Die Ressource müsste dann nur noch vom Edit ausgelesen werden.

Ansonsten läuft die Alternative mit den Filestreams so:

Delphi-Quellcode:
var
  FileStream : TFileStream;
begin
  FileStream := TFileStream.Create('meineExe.exe', fmOpenReadWrite);
  try
    FileStream.Position := .... //hier die Position eintragen, ab der du ändern möchtest
    FileStream.Write(...) //oder so ähnlich
  finally
    FileStream.Free;
  end;
end;
Muh
  Mit Zitat antworten Zitat
albert1985

Registriert seit: 14. Jan 2007
38 Beiträge
 
Delphi 7 Personal
 
#3

Re: EXE editieren

  Alt 9. Feb 2007, 17:04
Hm, die Methode mit dem Filestream hört sich ganz gut an ... aber wie zB finde ich heraus
zu welcher Position ich muss ?
"Was machen Sie? – Wie? Machen? – Ich meine beruflich… – Wieso? Damit Sie Interesse heucheln können?"
  Mit Zitat antworten Zitat
gauggi

Registriert seit: 18. Apr 2006
177 Beiträge
 
#4

Re: EXE editieren

  Alt 9. Feb 2007, 17:19
Das kannst du soviel ich weiß mit einem Hex Editor ermitteln. Nimm lieber INI Dateien, denn es ist einfacher.
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#5

Re: EXE editieren

  Alt 9. Feb 2007, 17:34
Eine weitere Möglichkeit wäre auch Hier im Forum suchenupdateresource. Funktioniert aber erst ab Windows2000.

Gruß
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: EXE editieren

  Alt 9. Feb 2007, 20:15
Du kannst auch einen String an die EXE anhängen und diesen dann auslesen. Das funktioniert dann auch unter Windows 98, ist sicher nicht so professionell wie updateresource.

Folgenden Code fügst du in das zu patchende Programm ein. Er liest den String am Dateiende der eigenen Datei aus.
Delphi-Quellcode:
Type TText= record
  Text1, Text2, Text3: array[0..99] of Char;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  FileStream: TFileStream;
  Text: TText;
begin
  FileStream:= TFileStream.Create(application.ExeName, fmOpenRead);
  try
    FileStream.Position:= FileStream.Size- SizeOf(Text);
    if FileStream.Read(Text, SizeOf(Text))= SizeOf(Text) then
      Edit1.Text:= String(Text.Text2);
  finally
    FileStream.Free;
  end;
end;
Und diesen Code fügst du in das Programm ein, welches die andere Datei patcht.
Delphi-Quellcode:
Type TText= record
  Text1, Text2, Text3: array[0..99] of Char;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  FileStream: TFileStream;
  Text: TText;
  Pfad: AnsiString;
begin
  Pfad:= 'C:\Project1.exe';
  ZeroMemory(@Text, SizeOf(Text));
  StrCopy(Text.Text2, PChar(Edit1.Text));
  if FileExists(Pfad) then
  begin
    FileStream:= TFileStream.Create(Pfad, fmOpenReadWrite);
    try
      FileStream.Position:= FileStream.Size;
      if FileStream.Write(Text, SizeOf(Text))= SizeOf(Text) then
      Showmessage('fertig');
    finally
    FileStream.Free;
    end
  end;
end;
EDIT: Code geändert, man kann jetzt mehrere Strings mittels Record in an die EXE anhängen und auslesen.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
albert1985

Registriert seit: 14. Jan 2007
38 Beiträge
 
Delphi 7 Personal
 
#7

Re: EXE editieren

  Alt 9. Feb 2007, 20:24
Hab mich jetzt nach einem groben Überblick für die Resourcen entschieden ... Aber da das ganze für mich doch
recht kompliziert ist, hoff ich natürlich weiterhin auf eure Hilfe

Also, mein Problem ist immer noch, dass ich nicht konkret weiß, wie ich jetzt genau vorzugehen hab...
Hab zwar einiges gefunden zu Icons etc. die über "Updateresource" geändert werden, aber das bringt mich nicht gerade weiter ...

Muss man zunächst den über das EditFeld eingegebenen Text in einer RES-,RC (...) datei abspeichern ?
und dann den updatebefehl ausführen?? Ich verstehe immer noch nicht wie ich dann das in die exe bekomme, also mit den
Parametern etc... wenn in der exe sowas wie "showmessage(B)" steht ... wie müsste die zugehörige RES-Datei aussehen ???

MfG
"Was machen Sie? – Wie? Machen? – Ich meine beruflich… – Wieso? Damit Sie Interesse heucheln können?"
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: EXE editieren

  Alt 9. Feb 2007, 20:38
Hier ist ein Link mit String.
string aus resource auslesen
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
albert1985

Registriert seit: 14. Jan 2007
38 Beiträge
 
Delphi 7 Personal
 
#9

Re: EXE editieren

  Alt 10. Feb 2007, 16:29
Nochmal ne Frage zu bitsetters Vorschlag über die Stream-Methode:

Geht das auch wenn ich mehr als einen String an die EXE anhängen will ??
Wenn ja wie? Hab zwar schonmal bisschen probiert das irgendwie hinzukriegen, aber irgendwie klappts noch nicht
Mann müsste ja sozusagen immer an einer anderen Stelle anfangen zu lesen, oder ?

MfG Albert
"Was machen Sie? – Wie? Machen? – Ich meine beruflich… – Wieso? Damit Sie Interesse heucheln können?"
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: EXE editieren

  Alt 10. Feb 2007, 17:44
Hallo albert1985,

den Code weiter oben habe ich nun so abgeändert, dass man nun mehrere Strings mit Hilfe eines Records speichern kann. Die Records kannst du noch weiter ausbauen, müssen in beiden Programmen jedoch identisch sein.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz