Anwendung die sich selbst aktualisieren kann.

Tikonteroga

Erfahrenes Mitglied
Hallo,

ich möchte gerne eine Windows Forms Anwendung entwickeln, die sich selbst aktualisieren kann.

Gibt es hierfür Methodiken die durch das .NET Framework bzw. Microsoft angeboten bzw. empfohlen werden?

Ich habe mit auch schon mal gedanken darüber gemacht, wie ich das machen könnte.

Ich würde folgendermaßen vorgehen:

  • Bei der Installation der Windows Forms Anwendung wird auch ein Windows Dienst installiert, der über System-Berechtigungen verfügt.
  • Wenn der Benutzer in der MenuBar der Windows Forms Anwendung über "Hilfe - Softwareaktualisierung" die Aktualisierung startet, wird der Systemdienst "aufgeweckt".
  • Wenn in der Windows Forms Anwendung eine Datei geöffnet ist, wird diese Datei gespeichert.
  • Die Windows Forms Anwendung wird beendet
  • Der Windows Dienst installiert die Windows Forms Anwendung neu (ohne Windows Dienst).
  • Der Windows Dienst startet die Windows Forms Anwendung und öffnet die zuvor gespeicherte Datei
  • Der Windows Dienst legt sicht wieder schlafen.

Was haltet ihr davon? Habt ihr vielleicht verbesserungsvorschläge?
 

Tikonteroga

Erfahrenes Mitglied
Hallo,

also die Anwendung wird auf Systemen eingesetzt, auf denen die Benutzer des Programms nicht als Administrator angemeldet sind sondern als Standardbenutzer.

Wenn ich nun einen Dienst verwende, hat dieser als Mitglied der Benutzergruppe "System" die Berechtigung um ein Programm zu deinstallieren und zu installieren.

Bei einer zweiten EXE würde es nur funktionieren, wenn man diese zusätzliche EXE über die Sekundäre Anmeldung mit einem Benutzer ausführt, der Mitglied der Benutzergruppe der Administratoren ist.
 

Tikonteroga

Erfahrenes Mitglied
Ich hab mir jetzt auch den Link durchgelesen. Das hatte ich vorher vergessen.

Das Konzept müsste ich mir mal genauer anschauen. Dass man dabei Software von einer Website installieren muss, könnte ein Grund sein, dass dies vom Kunde abgelehnt wird.
 

Gotenks

Mitglied
Hallo,

Wenn du eine Form/Anwendung haben willst die sich selbst aktualisiert, dann arbeite doch mit einem Timer, den kannst du so einstellen, dass sich die Anwendung alle 3 oder 5 min. Atualisiert.

Lg
 

FormFollowsFunction

Grünschnabel
:eek: Achtung, eigene Updateroutinen sind potenziell gefährlich (!), wenn man nicht genau weis, was man tut.
https://www.vb-paradise.de/index.php/Thread/102786-Updater-Warum-sollte-man-eigene-Updater-vermeiden/ hat gesagt.:
auf Grund der Tatsache, dass ich immer wieder sehe, dass besonders Anfänger sich an eigenen Updatern bzw. Patchern versuchen, dachte ich mir, dass ich hier mal 'nen Thread dazu aufmache.

Zunächst: Viele Entwickler möchten ihre Programme mit einem eigenen Updater ausstatten. Dies ist eine gute Idee, denn das hat den Vorteil, dass man einmal ein Paket hochlädt und schon können alle Benutzer das Programm updaten, ohne groß Updates herunterzuladen und manuell zu verwalten.

Jedoch bringt exakt das meist eine riesige Sicherheitslücke mit sich und es hängt da weitaus mehr dran, als gedacht. Jetzt stellt euch vor, Ihr ladet ein Updatepaket auf einen Server hoch und ein Client möchte sich dieses nun laden. Dieser Client sitzt in einem öffentlichen Netzwerk, zum Beispiel an einem Flughafen o. ä. (Man muss zwar sagen, dass es mittlerweile auch dort Sicherheitsstandards gibt, aber natürlich nicht überall und vor allem ist das ja nicht die einzige Gefahrenquelle.)
Nun gut, BTT: Mit diesem Client im (W)LAN sitzt nun ein Angreifer, der sich sowas zu Nutze macht, um dem Client einen Virus oder generell Malware unterzujubeln.

Wie geht das?

Kurze Version

Der Hacker sitzt einfach im selben lokalen Netzwerk und leitet nun den Datenverkehr zu sich um (ARP-Spoofing nennt man das mit Fachbegriff), indem er die ARP-Tabelle manipuliert und seine MAC-Adresse dort angibt, um dann eben jene für den Client oder Router vorgesehenen Pakete zu empfangen. Dann tauscht er das Paket aus und gibt dieses infizierte Paket an den Client weiter. Der bemerkt wahrscheinlich nicht mal, was gerade geschieht.

Quelle: https://www.vb-paradise.de/index.ph...er-Warum-sollte-man-eigene-Updater-vermeiden/

Es gibt aber fertige Alternativen, nUpdat z.B..
 
Zuletzt bearbeitet:

cwriter

Erfahrenes Mitglied
:eek: Achtung, eigene Updateroutinen sind potenziell gefährlich (!), wenn man nicht genau weis, was man tut.
Weiss der Autor des verlinkten Posts aber auch nicht wirklich... Ein Updater selbst hat nicht viel mit dem Protokoll zu tun, es gibt einige Bibliotheken, die HTTPS implementieren (z.B. curl) oder das Problem fällt mehr oder weniger auf IP-Ebene weg (mit IPSec).


Zudem beschreibt der Autor ein sehr eingeschränktes Modell des Dolev-Yao-Attackers, was an sich nicht falsch ist, aber halt zu kurz gedacht, wenn man schon mit Sicherheit argumentieren will.

Signaturen helfen natürlich, aber
Da die RSA-Klasse hierbei hochkomplexe Mathematik anwendet, ist es bei richtiger Implementierung unmöglich 4096 Bit zu knacken.
stimmt schon mal gar nicht.

ALLES, was mit Computern zu tun hat, ist potentiell unsicher.

Grundsätzlich hast du nicht Unrecht, dass Sicherheit relativ schwierig ist, aber:
1) Wer sagt, dass die "fertigen" Updater besser sind?
2) Diese "Anfänger können das eh nicht"-Mentalität führt nur dazu, dass schlussendlich niemand mehr etwas kann, weil man entweder
a) überqualifiziert
b) unterqualifiert
c) nicht zuständig
ist.


Und dafür einen 4 Jahre alten Thread auszuheben...

Gruss
cwriter
 

FormFollowsFunction

Grünschnabel
Die Kernaussagen des velinkten Artikels, sind korrekt, und die Details fallen Anfängern eh nicht auf (mir übrigens auch nicht), von daher ....:D

Fertige Updater sind natürlich nicht grundsätzlich besser, von "Profis" über Jahre hinweg enwickelte, im Gegensatz zu allem was ein Anfänger sich zusammenfrickeln kann, aber schon.

Wie alt der Thread ist, spielt keine Rolle, da er ja noch von allen gelesen werden kann. Ich will nur darauf hinweisen, daß Updateroutinen eine kritische Angelegenheit darstellen.

Ich würde mich als "Fortgeschrittener Anfänger" bezeichnen und bin weit davon entfernt, mich an derartiges ran zu wagen. :cool:
 

cwriter

Erfahrenes Mitglied
Wie alt der Thread ist, spielt keine Rolle, da er ja noch von allen gelesen werden kann. Ich will nur darauf hinweisen, daß Updateroutinen eine kritische Angelegenheit darstellen.
Ok.
Eine Funktion mit Arrays (also so ziemlich jede):
"Anfänger sollten sich nicht damit versuchen, da 90% aller Sicherheitslücken mit Over- oder Underflows zu tun haben."

Sockets:
"Anfänger sollten keine Socket-Applikationen schreiben, da dort besonders auf inkorrekte Eingaben reagiert werden muss".

Computertreiber:
"Anfänger sollten sich nicht damit versuchen, da 99% aller BSoDs/Kernel Panics von Treibern ausgelöst werden".

GUIs:
"Anfänger sollten sich nicht damit versuchen, da viele Bedienfehler abgefangen werden müssten und Klaus im KKW aus Versehen eine Kernschmelze auslösen könnte".

Autofahren:
"Anfänger sollten sich nicht damit versuchen, da X% der Autounfälle mit zu wenig Erfahrung zusammenhängt."

Wo ziehst du die Grenze?

Irgendwann muss man schlicht einmal beginnen. Die Grenze des "Anfängertums" ist auch fliessend.
Ein Updater ist da noch eines der einfacheren Projekte. Und solange der Code nicht in Produktivsystemen Verwendung findet, was soll's.

Die Kernaussagen des velinkten Artikels, sind korrekt, und die Details fallen Anfängern eh nicht auf (mir übrigens auch nicht), von daher ....:D
Die Kernaussage ist schlicht: Das Internet ist kein vertrauenswürdiger Ort.

Fertige Updater sind natürlich nicht grundsätzlich besser, von "Profis" über Jahre hinweg enwickelte, im Gegensatz zu allem was ein Anfänger sich zusammenfrickeln kann, aber schon.
https://github.com/ProgTrade/nUpdate/blob/master/nUpdate.Administration/Core/AesManager.cs

Auch wenn "Profis" noch statische Salts verwenden? :-]
(Kommt es sehr drauf an? Nein. Ist es imperfekt? Ja.)
Und das habe ich nach wenigen Minuten gefunden - abgesehen von der Verwendung von FTP, was fast noch schlimmer ist...

Und "grundsätzlich" ist gar nichts "besser". *Heartbleed* *hust* *hust*

Wie gesagt, du hast Recht, wenn du sagst, dass es ein kritischer Bereich ist. Auf der anderen Seite: Welcher Bereich ist dann deiner Meinung nach unkritisch?
Ist es unkritisch, wenn dein Programm abschmiert und dadurch nicht mehr gekauft wird?
Ist es unkritisch, wenn dein Programm nicht so funktioniert wie beschrieben und dir daher tausende 1-Stern-Bewertungen in einem Store geben?

Wenn sich ein Anfänger mit dem Thema beschäftigt, dann lernt er auch dabei, wie's gehen müsste, sofern er nicht bei jeder Sicherheitsfrage den Kopf in den Sand steckt.

Gruss
cwriter