Teilweise Administratorrechte

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Teilweise Administratorrechte

    Ich habe einen Updater/Installer. Dieser fordert momentan bei JEDEM Start Administratorrechte (<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />).
    Nun will Ich das ganze aber so machen, dass er nur nach Administratorrechten fragt, falls ein Update oder eine Installation durchgeführt wird. Ansonsten soll das Programm weiter wie gewohnt ausgeführt werden.

    Das Programm braucht Administratorrechte, um in das Verzeichnis "Programme x86" schreiben zu können.
    Danke für deine Antwort. Ich verwende jedoch kein solches Update System, weil alles in meinem Programm enthalten ist.
    Ich denke Ich werde das ganze so handhaben, dass das Programm in dem Fall einfach neugestartet wird und dann Administratorrechte anfordert.
    In Deinem Programm enthalten? Das will ich sehen! Ich sage nur ARP-Spoofing (Janusangriff) und Remote Code Execution.
    Wenn Du nicht willst, dass Dein Programm ne Virenschleuder wird, dann sei bitte so vernünftig und schnappe Dir ne sichere Lösung.
    Auch ist das Paketemanagement hier leichter.

    tl;dr: Nimm das oder lade deine Updates eigens im Thread hoch.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ich verstehe gerade nicht was das Problem ist. Also das ist jetzt sicher nicht böse gemeint.

    Ich habe einerseits das Project, was geupdatet/installiert werden soll.
    Und andererseits habe Ich den Updater, der sämtliche Projekte Updatet soll.

    Das ganze ist so ähnlich wie der Technic Launcher.


    //EDIT
    Funktioniert nun übrigens alles so, wie es sollte. Danke an nikeee13 und Gather. ;)


    Meine Güte. Es geht NICHT um die Funktionalität, sondern darum, dass ein Updater, der keine Binaries signiert eine gewaltige Sicherheitslücke ist, die Du nicht riskieren sollst.
    Nimm das Updatesystem.NET, das kannste da genau so einbauen, nur, dass dieses sicher ist und man einfach alles abgenommen bekommt.

    Wenn ich jetzt ARP-Spoofing bzw. einen Man-In-The-Middle-Angriff ausführe/betreibe, dann bist Du ohne Signierung am Arsch. Darum geht es.
    Schutz vor Malware für deine Clienten. Wenn DU Dir aus dem Netz irgendnen Virus ziehst, dann ist das Dein Problem, aber Du kannst das nicht zulassen, wenn die Nutzer Deines Programms Opfer von Angriffen werden, die dann evtl sogar bis zu DDoS-Attacken weiterführen, was weiß ich, wofür ein Angreifer mehrere PCs infizieren will.

    Also bitte nochmal: Es tut nicht weh und ist sicher vor jenen Attacken. Bitte nehme das, spare Dir ne Menge Arbeit und gut ist's.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    timchen100 schrieb:

    das Programm in dem Fall einfach neugestartet wird und dann Administratorrechte anfordert.


    Ein Programm mit Adminrechten starten funktioniert so:

    Visual Basic-Quellcode

    1. Dim psi As new ProcessStartInfo()
    2. psi.Verb = "runas" ' runas steht für "Run As Administrator"
    3. psi.FileName = "Datei.exe"
    4. psi.Arguments = "Arugmente" ' z. B. -update
    5. Process.Start(psi)


    Bedenke, dass der Benutzer ggf. gefragt wird, ob das Programm mit Adminrechten gestartet werden soll.
    Von meinem iPhone gesendet
    @ThuCommix Wieso das? Wenn das Paket ausgetauscht wird und der Client das installiert und ausführt, dann hat er die Malware drauf. Es reicht auch sich in nem unsicheren WLAN zu befinden.

    Außerdem was ist, wenn die Gefahr schon vom Server ausgeht?
    Dein Argument würde gut passen, wenn ein Janusangriff mit RCE verbunden wird, dann kann man wirklich nix dafür. Das ist dann die Schuld des Clienten, wenn er Viren aufm PC hat, die das dann machen, aber so im normalen Fall muss man signieren, siehe die Punkte grade eben oben.
    Zudem wäre das wenig sinnvoll, wenn man versucht einen bereits manipulieren PC zu manipulieren.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Trade“ () aus folgendem Grund: Weitere Argumentationen hinzugefügt :P

    wieder dieses viren hier vieren da, ich benutzte seit einem halben jahr kein virensystem mehr (weils mich nervt) habt vor 2 monaten mein PC mit Anti-Maleware durchsuchen lassen (hat fast 24std gedauert) und siehe da 9 funde, und das waren alles fehl funde, und vor allem macht sich keiner die mühe bei so nem kleinen Programm von so nem hobby programmierer das zu hacken um dann ganze 5 oder 6 nutzer zu infizieren. da gibt es defenitiv bessere methoden
    Meine Software findet ihr HIER, bin in Android und Windows entwicklung aktiv.

    Falls ihr meine begehrte Movie Box für Android haben wollt, diese findet ihr auch auf meiner Website oder hier direkt download.
    @tarkelasgang Bitte, bevor Du andere überredest unsicheres Zeugs zu nutzen, halte Dich bitte raus, danke.
    Eine Signierung ist notwendig, das sage ich nicht aus Spaß oder weil mir langweilig ist, sondern weil es sein muss.

    Selbst einfach Anwendungen hier haben im Schnitt mehr als 10 Downloads, jetzt stelle Dir mal vor so ein Programm ist gut und wird von mehreren genutzt. Hat aber leider nen unsicheren Updater. Ein Paradies für Angreifer Malware zu verbreiten, ohne, dass es vielleicht jemand sogar merkt.
    Ist hier btw schon mal passiert, nur so.

    Ich denke, dass Du auch einsiehst, dass große Firmen sowas brauchen... Ist ja klar. Aber bei solchen Showroom-Sachen muss man kein Risiko eingehen. Es gibt sicher mehrere potenzielle Nutzer und willst Du denen sowas zumuten? Ich nicht.
    Außerdem warum sollte man sich die ganze Arbeit machen, wenn man es so einfach haben kann mit dem Management?

    tarkelasgang schrieb:

    ich benutzte seit einem halben jahr kein virensystem mehr

    Update-, nicht Virensystem. ;)

    Aber vermutlich interessiert das ja den TE eh nicht.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    @Trade was für Updatesystem? antivirensystem mein ich natürlich, AutoUpdate benutz ich auch nicht mehr aber nur weils beschissen ist.
    Meine Software findet ihr HIER, bin in Android und Windows entwicklung aktiv.

    Falls ihr meine begehrte Movie Box für Android haben wollt, diese findet ihr auch auf meiner Website oder hier direkt download.
    Achso, in dem Bezug, ok, aber ist ja auch egal.

    tarkelasgang schrieb:

    AutoUpdate benutz ich auch nicht mehr aber nur weils beschissen ist

    Begründung bitte. :)
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    umständlich, bei meinen Programmen ist es meißt so das wenn sich was ändert, dann nur ein String, und denn ändere ich jetzt einfach auf meinem server und bei jedem applications start downloaded sich dieser string neu, dass falls ich ihn ändere damit er auch gleich neu drinne ist (nachteil, falls mein server down ist, ist auch die App down)

    und falls ich ne Beta oder Alpha Release, dann mach ich das gleiche (auch mit download String) zB. hab ich eine /Application5/Alpharealeased.txt auf meinem server in der steht drin einfach nur true oder false, falls ich dann das fertige programm release ändere ich das auf false und in meiner App steht.

    VB.NET-Quellcode

    1. Private Sub Form1_Load (BlaBla)
    2. Try
    3. If DownloadString("/Application5/Alpharealeased.txt") = "false" Then Me.Close()
    4. Catch ex As Exeption
    5. Me.Close()
    6. End Try
    7. End Sub


    Primitiv aber einfach und effektiv so hab ich auch immer ne statusbar mit ner meldung drinne für den user.
    Meine Software findet ihr HIER, bin in Android und Windows entwicklung aktiv.

    Falls ihr meine begehrte Movie Box für Android haben wollt, diese findet ihr auch auf meiner Website oder hier direkt download.
    Für Strings ist das mit dieser Methode in der Tat unnötig. Ist halt die Frage, wenn man mehrere Sachen patcht, dann macht das schon Sinn.
    Verstehe aber nicht, wieso Du Updater als beschissen bezeichnest, Du brauchst sie halt einfach nicht, das kann man ja sagen. ;)
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    meistens mach ich ein rechtsbündiges Label iwo in die ecke mit vollgendem:

    VB.NET-Quellcode

    1. Dim Update_uir As Uri
    2. //FormLoad:
    3. If DownloadString("v1.txt") = "false" Then //man braucht für jede version ne eig txt
    4. Label1.Text = ""
    5. Else
    6. Label1.Text = "Update"
    7. Update_uri = DownloadString("v1.txt")
    8. End If
    9. //Label Click Event
    10. If Not Update_uri = Nothing Then Process.Start(Update_uri)
    11. // so ungefähr
    Meine Software findet ihr HIER, bin in Android und Windows entwicklung aktiv.

    Falls ihr meine begehrte Movie Box für Android haben wollt, diese findet ihr auch auf meiner Website oder hier direkt download.
    Hm, ist halt wie gesagt, wenn das so geladen wird unsicher und unnötige Arbeit. Zudem dreht mir die Nichteinhaltung der Guidelines ein wenig den Magen um :D
    Aber nun gut, abgesehen davon, es ist halt umständlich für jede Version ne eigene .txt anzulegen und dann das alles so zu prüfen, was Du btw mit String.IsNullOrEmpty tun solltest.

    Normale Updatesysteme benutzen eine Konfigurationsdatei, in die Daten serialisiert und verarbeitet werden. Macht Updatesystem.NET mit XML und nUpdate 1.1.0.0 beispielsweise mit JSON so.
    Ist halt nen klarer Vorteil. Zudem gibt es die Version-Klasse.

    Wenn man halt so leichtes Management und Sicherheit hat, dann ist es halt fraglich, warum man sich nen eigenen schreiben soll, wenn es gut und sicher und mit wenig Mühen geht.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: