Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] Eigentliches Programm über eine Server-Applikation starten.
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

[erledigt] Eigentliches Programm über eine Server-Applikation starten.

beantworten | zitieren | melden

Hallo zusammen,

Ich habe schon einige Programme gesehen die - aus Sicherheitsgründen - "Launcher" benutzen.
Sprich, man kauft sich eine Lizenz und sieht dann beim Launcher auf welche Applikationen man von dieser Firma Zugriff hat.

Nun wählt man eine Applikation aus, der Launcher synchronisiert den aktuellen Status mit einem Server, und startet dann die Applikation.
Es scheint so, als würde der Client einen Request an den Server senden, sodass er danach die Applikation wie 'runterlädt' und dann direkt startet.

Dies macht natürlich nur Sinn wenn die Applikationen selber nicht irrsinnig gross sind. ;)

Wie funktioniert das Ganze genau?
Was könnten für Probleme auftreten?

Gruss,
Regenwurm
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Regenwurm am .
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

beantworten | zitieren | melden

Ich sehe in so einem verfahren keinerlei Vorteile und muss gestehen dass ich es bisher auch noch nicht gesehen habe.

Was passiert denn Beispielsweise wenn der Kunde kein Internet hat?

Was ich kenne sind bei Spielen die Anwendungen, wie Steam, welche direkt auf Updates prüfen bei Spielstart. Meinst du soetwas?
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

beantworten | zitieren | melden

Es geht mir vorallem darum um die App zu vor Cracks zu schützen.
Die Applikationen die so gestartet werden setzen Internet voraus. - Also das ist kein Problem :)
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

beantworten | zitieren | melden

Das heißt im Ernst, du hast vor bei jedem Programmstart das eigentliche Programm ersteinmal herunter zu laden?

Und vorallem, was ist wenn der Benutzer deinen Launcher Crackt?

Allgemein bleiben mir die Vorteile noch immer verborgen.

Das einzige was ich sinnvoll fände, wäre dass der "Launcher" eine Checksum oder ähnliches prüft. Passt das Programm nicht wird es halt nicht gestartet.

Aber bei deiner Lösung bestände ja auch das Problem:

Nutzer startet Launcher -> Anwendung wird heruntergeladen -> Nutzer navigiert zum Programm und kopiert es.

Nun kann er es Problemlos starten.

Schaue ich mir die großen Firmen an die ähnliche verfahren haben, sieht man dass ein Crack Schutz nur bedingt Wirkung erzielt.

Du erschwerst zwar das Cracken der Anwendung, ermöglichst mit deiner Vorgehensweise aber wieder andere Dinge die ein cracken Beispielsweise hinfällig machen.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

beantworten | zitieren | melden

Zitat von inflames2k
Das heißt im Ernst, du hast vor bei jedem Programmstart das eigentliche Programm ersteinmal herunter zu laden?

genau
Zitat
Und vorallem, was ist wenn der Benutzer deinen Launcher Crackt?

Inwiefern sollte das funktionieren?
Der Launcher sendet jedesmal einen Lizenzschlüssel mit.
Dieser sollte dann vom Server überprüft werden. - Ist dieser nicht valid, so gibt es keine Antwort
Zitat
Aber bei deiner Lösung bestände ja auch das Problem:

Nutzer startet Launcher -> Anwendung wird heruntergeladen -> Nutzer navigiert zum Programm und kopiert es.

Nun kann er es Problemlos starten.

Das war meine eigentliche Frage.. Der Server müsste quasi das Programm als komplettes ByteArray absenden & der Launcher lädt dies direkt in seinen RAM.
Somit hat der Benutzer keine Chance das abzuspeichern.


grz
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

beantworten | zitieren | melden

Würde ich nicht tun.

Das Programm im RAM halten wäre OverKill was willst du deinem Kunden denn sagen warum er X MB/GB Arbeitsspeicher für eine Datenverarbeitung braucht? (Datenverarbeitung dient als Beispiel)

Bin mir nun nicht sicher ob das Funktioniert, aber du könntest versuchen dein byte-Array (oder Stream) in ein Assembly-Objekt zu pressen und die mit der Activator Klasse eine Instanz einer Hauptklasse zu holen / zu erstellen.

// EDIT:

Assembly aus Byte-Array: Assembly.Load(byte[] rawAssembly);
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von inflames2k am .
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Zicore
myCSharp.de - Member



Dabei seit:
Beiträge: 403

beantworten | zitieren | melden

Hallo Regenwurm,

wenn du wirklich probleme mit crackern hast, werden die bestimmt auch wissen das man relativ leicht, den Launcher disassemblen- und den Code so umschreiben kann, dass z.B. das Byte array in eine Datei geschrieben wird oder ggf. den Stream sniffen und selbiges machen. Selbst mit einem Synchronem Verschlüsselungsverfahren wirst du nicht mehr sicherheit rein bringen.

Daher halte ich dein Vorgehen für mehr als sinnlos, nichts für ungut


Gruß André
private Nachricht | Beiträge des Benutzers
der-schlingel
myCSharp.de - Member

Avatar #avatar-3239.jpg


Dabei seit:
Beiträge: 799
Herkunft: Österreich/Wien

beantworten | zitieren | melden

Hallo, folgende Fragen hab ich da:
- Gibt es so eine Kunden-Anforderung oder ist dass reines "Sicherheitsbedürfnis" deinerseits? (In erster Linie ist dass nämlich eine Hürde für den Benutzer der sich - sofern er die Wahl hat, da schnell für eine andere Lösung entscheidet.)
- Hast du tatsächlich die Ressourcen immer zu garantieren, dass dein Server up ist wenn der Kunde sein Programm verwenden will?
- Wirklich Internet oder handelt es sich um ein Intranet? (Da wären dann z.B. Remoting-Lösungen machbar.)
As a man thinketh in his heart, so he is.
- Jun Fan
Es gibt nichts Gutes, außer man tut es.
- Erich Kästner
Krawutzi-Kaputzi
- Kasperl
private Nachricht | Beiträge des Benutzers
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

beantworten | zitieren | melden

Hallo zusammen,


@inflames
Ich gehe davon aus dass das Programm nicht mehr als 50 MB RAM in Anspruch nehmen wird.
Danke schonmal für den Assembly Typ.


@TheGear
Sprich auch wenn ich bspw das komplette App-Byte Array mittels XOR verschlüssle, ist der Cracker im Stande sich an dem Punkt einzuhacken wo das entschlüsselte Programm in die Assembly geladen wird?

@der-schlingel
Es ist ein reines "Sicherheitsbedürfnis".
Ich habe dies nur mal so gesehen und wollte mich mal informieren wo der Sinn des Ganzen liegt & wie das überhaupt funktioniert.

Ja, die Ressourcen wären immer vorhanden & es handelt sich um das Internet. ;)
------------

Was gäbe es sonst noch für Möglichkeiten ausser einem Server / Client Login, seine Applikation zu schützen?
Ausser natürlich das übliche à la obfuscator etc.

cheers :)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Regenwurm am .
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
Zitat
Es ist ein reines "Sicherheitsbedürfnis".
Schau Dir dazu mal folgenden Thread an: Software mit Registrierungsschlüssel schützen
Da wurde viel zu dieser Thematik diskutiert. Besonders den ersten Absatz in der ersten Antwort von herbivore möchte ich Dir ans Herz legen:
Zitat von herbivore
vorneweg: von dem Gedanken von (ständigen) Online-Prüfungen solltest du dich dringend verabschieden. Das stellt eine unangemessene Benachteiligung deiner Kunden da. Gerade wenn du nur eine kleine Firma hast oder sogar als Einzelunternehmer auftrittst, würden die Kunden bei Geschäftsaufgabe, Insolvenz o.ä. das bezahlte Programm nicht mehr nutzen können. Mal ganz abgesehen von den Regressansprüchen, die auf dich zukommen, wenn der Lizenz-Server mal nicht verfügbar ist.
Im weitern Verlauf sind noch einige weitere Threads zur Thematik verlinkt, besonders in diesem Beitrag.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

beantworten | zitieren | melden

Hallo,


Also die bzgl. Login via Server & Registry Einträge:
Ich habe einfach "Angst" dass die Leute dass dann einfach via OllyDbg oder anderen Debugger umgehen.
Darum kam mir die Idee das Ganze per Server zu "verteilen".

cheers
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers
MotS
myCSharp.de - Member



Dabei seit:
Beiträge: 27

beantworten | zitieren | melden

Es besteht natürlich auch die Möglichkeit die Software per Dongle zu schützen.
Ist natürlich eine Kostenfrage und ein 100% Schutz ist das auch nicht, da es für die meisten Dongles Softwarelösungen gibt die das ganze Umgehen.

Gruß
MotS
private Nachricht | Beiträge des Benutzers
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

beantworten | zitieren | melden

Zitat von MotS
Es besteht natürlich auch die Möglichkeit die Software per Dongle zu schützen.

Nein sorry, das lohnt sich in meinem Fall überhaupt nicht. :)
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

beantworten | zitieren | melden

Die Verteilung per Server halte ich nach wie vor für nicht notwendig und einfach OverKill. Auch wenn es sich dabei nur um 50 MB handelt.

Eine andere Idee wäre die Software mittels WCF oder ähnlichem zu entwickeln. - Eventuell dazu noch ein Tansystem und die Entbenutzer erhalten jeweils Clients. - Natürlich müsste der Server dann für jeden Client eigene Klasseninstanzen bereitstellen.

Hier könntest du aber über die Sicherheit gewiss sein. - Einziger Nachteil hier wäre, dass der Client dauerhaft mit dem Server interagieren muss.

Die Idee mit dem Tan-System kann man aber auch mit deiner Idee umsetzen.

Jedoch würde ich beide Varianten nicht einschlagen auch wenn mir meine Variante da mehr zusagt.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

beantworten | zitieren | melden

Kannst du mir erklären was du genau mit einem TanSystem meinst?

Ich denke ich behalte einfach wichtige Infos die der Client benötigt auf dem Server zurück, und dann jeweils per Client angefordert werden müssen.
Dies geschieht ständig mit einer Lizenz-Abgleichung oder einem Username & Passwort.

Gruss
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

beantworten | zitieren | melden

Was allgemein ein Tan-System ist weist du sicher.

Meine Überlegung wäre eben der Benutzer erhält bei Aktivierung der Anwendung eine Tanliste von x Tans.

Bei jedem Anwendungsstart muss er sich beim Server authentifizieren und wird nach einer zufällig ausgewählten Tan von seiner Liste befragt.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
der-schlingel
myCSharp.de - Member

Avatar #avatar-3239.jpg


Dabei seit:
Beiträge: 799
Herkunft: Österreich/Wien

beantworten | zitieren | melden

Bedenke aber: So ne App wird sich wohl kaum verkaufen. Wer tut sich das schon freiwillig an? Und die ganze Problematik mit dem Server u. der Erreichbarkeit oder der unverhältnismäßigen Benachteiligung des Kunden bleibt bestehen.
As a man thinketh in his heart, so he is.
- Jun Fan
Es gibt nichts Gutes, außer man tut es.
- Erich Kästner
Krawutzi-Kaputzi
- Kasperl
private Nachricht | Beiträge des Benutzers
Zicore
myCSharp.de - Member



Dabei seit:
Beiträge: 403

beantworten | zitieren | melden

Hallo Regenwurm,
Zitat
Sprich auch wenn ich bspw das komplette App-Byte Array mittels XOR verschlüssle, ist der Cracker im Stande sich an dem Punkt einzuhacken wo das entschlüsselte Programm in die Assembly geladen wird?

Es spielt keine Rolle welche Verschlüsselung du nimmst, alle Synchronen Verschlüsselungen kann man mittels dissassembler (in .Net) *einfach* wieder umgehen.

Ich würde eine einmalige asynchrone Authentifizierung verwenden.
Und den Code mit einem Obfuscator schützen.

Gruß André
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Zicore am .
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

Hallo!
Zitat von Regenwurm
Ja, die Ressourcen wären immer vorhanden & es handelt sich um das Internet. ;)
Aha, du kannst also garantieren, dass die Verbindung des Kunden zum Internet jederzeit gewährleistet ist (darauf zielten die vorherigen Fragen nämlich primär ab) ?!

Problem: Beim Kunden ist ein Handwerker vor Ort, welcher die DSL-Leitung kappt, weil er seinen Bohrer nicht unter Kontrolle hatte, oder ein Bagger auf der Strasse haut die Leitungen des Ganzen Blocks kurz und klein.

Bis das behoben ist, wäre der Kunde nicht in der Lage, dein Programm zu benutzen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von tom-essen am .
Nobody is perfect. I'm sad, i'm not nobody
private Nachricht | Beiträge des Benutzers
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

beantworten | zitieren | melden

Zitat von tom-essen
Aha, du kannst also garantieren, dass die Verbindung des Kunden zum Internet jederzeit gewährleistet ist (darauf zielten die vorherigen Fragen nämlich primär ab) ?!


Mein Programm ist nur eine - nennen wir es mal "Erweiterung" - für ein anderes Programm (welches NICHT von mir kommt).
Das andere Programm läuft auch nur mittels Internet.

Hat der User also kein Internet mehr, macht mein Programm keinen Sinn für ihn. ;)

cheers
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers
MasterMax
myCSharp.de - Member

Avatar #avatar-2173.gif


Dabei seit:
Beiträge: 265
Herkunft: Deutschland

beantworten | zitieren | melden

Da es für alle bekannten Computerspiele Cracks gibt, selbst für die, die Launcher haben und ständige Internetverbindung fordern, denke ich nicht, dass du deine Software zu 100% schützen kannst. Der Aufwand zu cracken wird höher, aber die Benachteiligung des ehrlichen Kunden auch.
-=MasterMax=-
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Regenwurm,
Zitat
Hat der User also kein Internet mehr, macht mein Programm keinen Sinn für ihn.
es geht ja nicht nur darum, ob das Internet verfügbar ist, sondern auch darum, ob dein Server verfügbar ist. Kurz gesagt: Ich würde ein Programm, dass mich dermaßen gängelt nie einsetzen und kann nur jedem davon abraten. Das ist - wie schon mehrfach verlautet - eine unangemessene Benachteiligung des Kunden. Und alles nur wegen einer diffusen Angst. Das ist ist nicht einzusehen. Es geht eben nicht nur um deine Rechte und deine Interessen, sondern du bist verpflichtet, auch die Rechte des Kunden zu wahren und seine Interessen zu berücksichtigen.

herbivore
private Nachricht | Beiträge des Benutzers
Regenwurm
myCSharp.de - Member



Dabei seit:
Beiträge: 295
Herkunft: Zentralschweiz

Themenstarter:

beantworten | zitieren | melden

Hallo,

Vielen Dank - ihr habt mich überzeugt. ;)

cheers
ServiceStack & Angular = =)
private Nachricht | Beiträge des Benutzers