Laden...

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

Erstellt von Regenwurm vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.599 Views
R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren
[erledigt] Eigentliches Programm über eine Server-Applikation starten.

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

ServiceStack & Angular = =)

2.298 Beiträge seit 2010
vor 13 Jahren

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 |

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren

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 = =)

2.298 Beiträge seit 2010
vor 13 Jahren

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 |

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren

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

genau

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

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 = =)

2.298 Beiträge seit 2010
vor 13 Jahren

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);

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

Z
403 Beiträge seit 2007
vor 13 Jahren

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é

799 Beiträge seit 2007
vor 13 Jahren

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
R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren

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 😃

ServiceStack & Angular = =)

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

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:

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

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren

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 = =)

M
27 Beiträge seit 2010
vor 13 Jahren

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

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren

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 = =)

2.298 Beiträge seit 2010
vor 13 Jahren

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 |

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren

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 = =)

2.298 Beiträge seit 2010
vor 13 Jahren

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 |

799 Beiträge seit 2007
vor 13 Jahren

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
Z
403 Beiträge seit 2007
vor 13 Jahren

Hallo Regenwurm,

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é

1.815 Beiträge seit 2005
vor 13 Jahren

Hallo!

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.

Nobody is perfect. I'm sad, i'm not nobody 🙁

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren

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 = =)

265 Beiträge seit 2006
vor 13 Jahren

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=-

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Regenwurm,

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

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren

Hallo,

Vielen Dank - ihr habt mich überzeugt. 😉

cheers

ServiceStack & Angular = =)