Programm effektiv schützen?
-
Reflector (oder Plugins davon) ist ja ein kostenloser Decompiler, sogar mit Ausgabe in *.cs Files inkl. Solution und Projekt.
Simon
-
Hallo
Das ist auch nicht gefährlich. Warum sollte es das auch sein?
chrische
-
Decompiler sind recht effektiv und nicht zu unterschätzen.
Aber täusche ich mich oder ist es bei der vorgehensweise sowieso leicht den Schlüssel zu erfahren indem man einfach den Arbeitsspeicher ausliest und dann damit Missbrauch treibt?
-
Bei Verschlüsselungen mit getrenntem Public- und Private-Key ist es kein Problem wenn man an den Public-Key drankommt.
Das Problem hier ist wohl eher, dass man das Programm recht einfach "zurückübersetzen", den License-Test entfernen, und dann neu bauen kann.
Oder alternativ: den Public-Key durch einen eigenen ersetzen, zu dem man auch den passenden Private-Key hat, und dann das Lizenz-File selbst signieren.Allerdings gibt's ja netterweise Code-Objuscator.
-
Bei Verschlüsselungen mit getrenntem Public- und Private-Key ist es kein Problem wenn man an den Public-Key drankommt.
Bei getrennten Schlüsseln ist es eben ein sehr großes Problem den anderen Schlüssel zu bekommen. Oder habe ich dich hier falsch verstanden?
Im Spiel selbst ist nur der öffentliche Schlüssel vorhanden. Daraus den für die Signierung nötigen privaten Schlüssel zu bestimmen ist rechnerisch sehr zeitaufwendig, und damit meine ich: Es ist quasi unmöglich.
Wie du schon selber sagst: Es gibt wesentlich leichtere Wege die Registrierung zu umgehen...
-
Ja, so gesehen ja. Man kann aber, wie hustbaer sagt das Programm selber mit seinem Privaten Key neu signieren und dann deinen Public Key auch durch den eigenen ersetzen. Das Programm denkt dann alles ist ok, woher soll es merken das es mit neuen Keys versehen wurde?
Und auch verschlüsselte Programme müssen zur Ausführung entschlüsselt und in den Speicher geladen werden... Dort kann man sie dann auslesen, manipulieren und neu zusammensetzen. So werden auch viele Programme geknackt die Dongles benutzen...
Wirkliche Sicherheit hat man wohl erst mit Quantencomputern... Oder?
-
Jo, den Weg des Austauschens meinte ich mit "Es gibt wesentlich leichtere Wege die Registrierung zu umgehen..." :). Ich hab da aber noch einen wesentlich leichteren im Kopf, aber ich muss erstmal schaun, ob das so machbar ist (erstmal decompilieren, bin noch nicht dazu gekommen).
Das Spiel selbst ist übrigens nicht verschlüsselt, nur die XML-Datei (Lizenz
) ist signiert. Und die kann nur ich erstellen. Bzw. kann nur ich die erstellen, die zum öffentlichen Schlüssel passt, der im Spiel integriert ist.
Quantencomputer ;)... da können wir vorerst aber noch ein Weilchen warten, bis die kommen.
-
Paul W schrieb:
Bei Verschlüsselungen mit getrenntem Public- und Private-Key ist es kein Problem wenn man an den Public-Key drankommt.
Bei getrennten Schlüsseln ist es eben ein sehr großes Problem den anderen Schlüssel zu bekommen. Oder habe ich dich hier falsch verstanden?
Mit "ist es kein Problem wenn man an den Public-Key drankommt" meinte ich: es macht nix wenn jemand an den Public-Key drankommt, weil er damit nix anfangen kann. Eben weil er sich den dazupassenden Private-Key nicht ausrechnen kann. War vielleicht etwas misverständlich formuliert.
Sollte heissen: es besteht keine Gefahr dadurch, dass der Key leicht rauszubekommen ist. Es ist aber sehrwohl ein Problem, wenn man den Code decompiliert, und dann einfach das "if (not_signed) return;" rauslöscht, und damit die ganze Signier-/Key-Geschichte einfach umgeht.
-
Geh auf C++
-
[quote="hustbaer"]
Paul W schrieb:
Sollte heissen: es besteht keine Gefahr dadurch, dass der Key leicht rauszubekommen ist. Es ist aber sehrwohl ein Problem, wenn man den Code decompiliert, und dann einfach das "if (not_signed) return;" rauslöscht, und damit die ganze Signier-/Key-Geschichte einfach umgeht.
deshalb sollte man einen solchen mechanismus etwas unübersichtlicher coden und einen ofuscator verwenden. dann sehen alle bezeichner im quelltext aus wie hashcodes und der cracker kann schon rätselraten
du könntest z.b. für klassen die sicherheitsrelevant sind proxys verwenden, und/oder die abfrage etwas schachteln und verteilen.