C# Programm, das zur Laufzeit eine benutzerdefinierte und angepasste EXE-Datei generiert

Phuesick

Cadet 2nd Year
Registriert
Jan. 2016
Beiträge
29
Hallo Community,
ich arbeite z.Z an einer Client-Server-Applikation. Der Server besitzt ein GUI zur Verwaltung des Clienten. Der Client hingegen wir lediglich gestartet und bekommt den Verbindungsstatus als Nachricht mitgeteilt. Nun möchte ich jedoch den Clienten mit Hilfe des GUIs des Servers generieren. Es soll eine Option: "Build Client" im Server-GUI geben, die IP, Port und weitere Angaben entgegennimmt und aus diesen den benutzerdefinierten Clienten generiert.

Wie ist das möglich? Wie kann ich eine .EXE mit angepassten Variablen und Werten zur Laufzeit eines anderen Programmes generieren?

Ich habe schon viele Projekte auf Github gesehen, wo EXE-Dateien generiert wurden, konnte diese jedoch aufgrund ihrer Komplexität und meines Unwissens nicht nachvollziehen. Eines der Projekte benutzte eine .BIN-Datei aus der letztendlich auf mysteriöse Art und Weise die "custom EXE" erstellt wurde.

Ich bin leider noch sehr unerfahren was dies angeht.
Könnt ihr mir einen Tipp geben wie dies funktionieren soll? Ich wäre euch sehr dankbar!
MfG, Phuesick :)
 
Zuletzt bearbeitet: (Typo)
https://support.microsoft.com/en-us/help/84062/how-to-append-data-to-the-end-of-an--exe-file schrieb:
How to Append Data to the End of an .EXE File

Appending data to the end of an executable file may be useful when you need to include data with your program but do not want to have extra data files.
Kannst du ja mal versuchen.
 
Dankeschön für die schnelle Antwort. Ich werde es mal ausprobieren.
 
Was willst du damit genau machen? Für mich klingt das sehr nach einem RAT.
 
Du willst praktisch eine individualisierte EXE haben, wo IP und sonstige Konfiguration hard reinkompiliert ist?

Also entweder der Server compiliert jedes mal neu oder man erzeugt sich eine Template-Exe in der man ein paar Platzhalter mit bestimmtem Tag im Data-Segment erzeugt, die man im Nachhinein relativ einfach an der bekannten Adresse ersetzen/patchen kann. Allerdings würde ich die Daten zumindest irgendwie codieren sodass die sich nicht so einfach vom "bösen" Clienten manipulieren lassen.

Oder man versuchts auf diesem Wege:

https://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider(v=vs.110).aspx
 
Zuletzt bearbeitet:
Du könntest mit der Server GUI ja zB über gcc deinen Client erzeugen.
 
DaZpoon schrieb:
Du willst praktisch eine individualisierte EXE haben, wo IP und sonstige Konfiguration hard reinkompiliert ist?

Also entweder der Server compiliert jedes mal neu oder man erzeugt sich eine Template-Exe in der man ein paar Platzhalter mit bestimmtem Tag im Data-Segment erzeugt, die man im Nachhinein relativ einfach an der bekannten Adresse ersetzen/patchen kann. Allerdings würde ich die Daten zumindest irgendwie codieren sodass die sich nicht so einfach vom "bösen" Clienten manipulieren lassen.

Oder man versuchts auf diesem Wege:

https://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider(v=vs.110).aspx

Danke für diese Antwort! Ich habe mich daraufhin erkundigt und bin auf Mono.Cecil gestoßen. Mit dieser Bibliothek kann man Assemblies laden, Daten bearbeiten und anschließend wieder speichern. Mit der Codierung hast du recht. Am besten wäre natürlich gleich verschlüsseln. Da das allerdings nur ein kleines Test-Projekt sein soll werde ich diesbezüglich nicht in die Tiefe gehen.

Danke für die Antwort, hat mir sehr weiter geholfen! :)
Ergänzung ()

Shio schrieb:
Du könntest mit der Server GUI ja zB über gcc deinen Client erzeugen.

Ginge natürlich auch, ist jedoch keine portable Lösung. Danke trotzdem für den Einfall! :)
 
Ich habe allerdings bzgl. der Codierung vergessen anzumerken, dass .NET Code generell sehr leicht zu disassemblieren ist und das auch fast wie im Original lesbar ist. Siehe ILSpy. Sprich: Jeden Verschlüsselungsalgorithmus oder Schlüssel kann man sehr einfach ausfindig machen.
 
DaZpoon schrieb:
Sprich: Jeden Verschlüsselungsalgorithmus oder Schlüssel kann man sehr einfach ausfindig machen.
Hi,

genau dafür wurden asymetische Verfahren entwickelt. Wenn z.b. der Public Key im Binary enthalten und die Binary selbst signiert ist, sollte es schon ziemlich schwer sein Werte zu manipulieren.

Wenn das Ziel nicht Manipulationssicherheit ist, warum dann nicht einfach eine Konfig-Datei mit ausliefern welche das Binary dann ausliest?

hth
 
Kannst du nicht einfach eine Standard .exe mit entsprechenden Argumenten ausstatten und dann z.B. die exe + custom Batch verteilen, die die entsprechenden Werte enthält?
 
Zurück
Oben