![]() |
Über Programm eine exe verändern!?
hallo miteinander,
Ich habe vor ca einer woche zum ersten mal delphi ausprobiert und bin jetzt ziemlich fasziniert davon. Hab mir schon unzählige informationen von hier geholt, mal ein herzliches dankeschön dafür. :thumb: Eigentlich wäre mein Programm soweit voll funktionsfähig, aber ich würde es trotzdem gerne ein wenig erweitern. Meine Frage: Ist es möglich einzelne Zeilen in einer exe Datei zu verändern? So ähnlich wie es mit ini's möglich ist. Bevor antworten kommen wie ich wollte etwas cracken oder so, erkläre ich wieso ich das benötige. In der Firma wo ich arbeite stehen einige CNC Maschinen. Bei allen CNC Programmen ist es möglich einzelne Benutzerkonten einzurichten, damit sich die Arbeiter nicht gegenseitig die CNC Programme verändern. Bis auf dieses eine nervige Programm für das ich mein Programm geschrieben habe. Bis jetzt habe ich die exe von Hand mit einen Debuger verändert. Das heisst in der Exe steht in ca 10 Zeilen wo die CNC Programme gespeichert und abgerufen werden sollen, und diese habe ich nun verändert und für jeden eine eigene exe erstellt. Mein programm schreibt jetzt nur ein paar ini's um, verschiebt eine exe und startet dann das programm. Ich gehe mal davon aus, das diese veränderung nicht wirklich gegen das urheberrecht verstösst, oder so? :gruebel: Egal, ich möchte jetzt mein programm so erweitern, das ich keine exe mehr verschieben muss, sondern sie an Ort und Stelle bearbeiten kann. Vielen Dank schonmal für eure hinweise. Grüsse neo_polo |
Re: Über Programm eine exe verändern!?
EDIT Jelly: Quote entfernt. Den ganzen ersten Beitrag nochmals zu zitieren macht nun wirklich keinen Sinn.
Hallo, soweit ich das verstehe, willst du String-Konstanten ändern. Ich habe zwar auch schon mit dem Debugger Software "eingedeutscht", wenn es keine andere Möglichkeit gab, aber die Technik ist heute doch etwas weiter fortgeschritten und es gibt zahlreiche Gründe, Parametrisierungen nicht direkt in der EXE vorzunehmen, ich führe bloss mal Verständlichkeit und Wartbarkeit auf. Das Urheberrecht käme nur ins Spiel, wenn es sich um Strings handelt, die jemand anders geschrieben hat. Ich würde das Problem unter allen Umständen im Sourcefile lösen. Wenn du die Unterschiede schon nicht in eine Ini-Datei auslagern, sondern im Programm selbst verankern willst, dann mach eben eine Reihe von Konstanten und jage das Ganze für jeden User durch den Compiler. Eine von zahlreichen Möglichkeiten ist bedingte Kompilierung:
Delphi-Quellcode:
Damit kommt dann auch jemand klar, der dein Programm in 20 Jahren pflegen muss.
{$DEFINE User1}
... const {$IFDEF User1} UserPath = 'C:\CNC\USER1'; {$ENDIF} {$IFDEF User2} UserPath = 'C:\CNC\USER2'; {$ENDIF} Gruss Reinhard [edit=Jelly] Mfg, Jelly[/edit] |
Re: Über Programm eine exe verändern!?
das programm ist ja auch nicht von mir, das Programm ist speziell für diesen Maschinentyp und gibts dazu.
Das heisst es ist auf einem Win98 PC der an der maschine angeschlossen ist. Leider ist es nicht möglich das irgendwie anders zu lösen. |
Re: Über Programm eine exe verändern!?
Hallo,
mit einem TFileStream könntest du andere Dateien editieren.
Delphi-Quellcode:
Type TText= record
Text1, Text2: string[10];//Beispiel end; procedure TForm1.Button1Click(Sender: TObject); var FileStream: TFileStream; Text: TText; Pfad: AnsiString; begin Pfad:= 'C:\Project1.exe'; ZeroMemory(@Text, SizeOf(Text)); if FileExists(Pfad) then begin FileStream:= TFileStream.Create(Pfad, fmOpenReadWrite); try FileStream.Position:= 100;//Beispiel Leseposition FileStream.Read(Text, SizeOf(Text)); // Text.Text1:= .... weiterverarbeiten FileStream.Position:= 100;//Leseposition if FileStream.Write(Text, SizeOf(Text))= SizeOf(Text) then Showmessage('fertig'); finally FileStream.Free; end; end; end; |
Re: Über Programm eine exe verändern!?
geht klassisch mit seek und 'ner typsierten datei. ich leg mal 'n beispiel dazu... den rest solltest du aus der hilfe bekommenn..
Delphi-Quellcode:
var
f: file of byte; i: integer; c: byte; begin assign(f, 'test.txt'); rewrite(f); //datei erstellen c := byte('i'); for i := 0 to 100 do //was zum test reinschreiben write(f,c); //ab hier fängts an seek(f,30); c := byte('X'); for i := 0 to 3 do write(f,c); close(f); end. |
Re: Über Programm eine exe verändern!?
danke für die hilfe, werde es sobald ich dazu komme ausprobieren.
|
Re: Über Programm eine exe verändern!?
Wenn er die EXE verändert will, würde sich da nicht ein Resourcen-Editor anbieten? Also: Resourcen extrahieren, bearbeiten, wieder einbinden?
|
Re: Über Programm eine exe verändern!?
Ich würde auch vorschlagen die Ressourcen in eine Dll auszulagern, deren Inhalt man dann einfach austaucshen/erweitern kann.
|
Re: Über Programm eine exe verändern!?
Die Exe ist doch nicht von ihm, wie soll er die da in eine DLL auslagern... :gruebel:
Also bei den letzten zwei Posts frage ich mich, ob ihr die Anforderungen überhaupt gelesen habt :stupid:. Nicht böse gemeint, vielleicht auch falsch verstanden. Ich habe es so verstanden, er möchte eine bestehende EXE durch sein Programm patchen und ausführen, da dieses Programm keine Profile unterstützt, sondern nur mit default-Werten arbeitet. Er hat nun vor eine art Profil-Wrapper zu basteln, welcher das Programm an den User anpasst. Wenn diese Strings sich von der Länge nicht verändern sollte es kein Problem sein, diese per Filestream zu modifizieren. Wenn nicht, wird es etwas kniffliger. |
Re: Über Programm eine exe verändern!?
Zitat:
Genau das will ich. Nein die länge muss ich nicht verändern, die länge des ordnernamens auf den zugegriffen wird, muss einfach (DATA_P) 6 Zeichen betragen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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