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 = =)
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 |
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 = =)
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 |
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 = =)
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 |
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é
Hallo, folgende Fragen hab ich da:
As a man thinketh in his heart, so he is.
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.
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 = =)
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
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 = =)
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
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 = =)
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 |
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 = =)
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 |
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.
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é
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 🙁
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 = =)
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=-
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
Hallo,
Vielen Dank - ihr habt mich überzeugt. 😉
cheers
ServiceStack & Angular = =)