Produktaktivierung mit öffentlichem Schlüsselzertifikat

8

Ich brauche ein paar Ideen, wie man einen Aktivierungsalgorithmus erstellt. Zum Beispiel habe ich ein Demo-Zertifikat. Vorausgesetzt, dass die Anwendung im Demo-Modus ausgeführt wird. Wenn das Vollversionszertifikat bereitgestellt wird, wird die Anwendung im Vollmodus ausgeführt. Ist es überhaupt möglich und wie wäre es ein guter Weg, dieses System zu erstellen?

Eine einfache war, ich dachte, es wäre nur eine 2 verschlüsselte Zeichenfolgen, jetzt, wenn die Entschlüsselung mit dem öffentlichen Zertifikat-Zertifikat erfolgreich ist, dann wird die Anwendung im Demo-Modus und etc ..

laufen

BEARBEITEN: Verwenden von C # und Windows 7

    
hs2d 12.08.2011, 12:14
quelle

7 Antworten

8

Sie könnten etwas tun wie:

  1. Generieren Sie ein öffentliches / privates Schlüsselpaar
  2. Als Besitzer des privaten Schlüssels können Sie diese "Aktivierungszertifikate" (ab sofort AC genannt) unterschreiben
  3. In Ihrer App können Sie mit dem öffentlichen Schlüssel prüfen, ob das Zeichen korrekt ist

Wie Overbose erwähnt wurde - Sie können das Reverse Engineering nicht verhindern. Im Allgemeinen könnte jemand Funktionalität nehmen und sie in seine / ihre eigene App bringen und somit jeden möglichen Aktivierungsalgorithmus eliminieren. Sie können also nur annehmen (oder machen), dass dies schwer genug ist, um die Mühe nicht wert zu sein (das ist das gleiche wie für die Kryptographie - wenn Sie die Kosten für das Brechen der Nachricht höher als den Gewinn machen, können Sie es sagen gut gesichert).

So könnten Sie:

  1. Machen Sie die ausführbare Datei selbstüberprüfend (von Ihnen signiert, selbstüberprüfend basierend auf einem fest codierten öffentlichen Schlüssel (eine Sache: Sie müssen diesen Wert bei der Selbstüberprüfung überspringen)).
  2. Machen Sie ein paar Tricks mit Zeigern (zeigen Sie auf die Aktivierungsfunktion, gehen Sie zum 7. Bit und ändern Sie den Wert für etwas basierend auf dem Wert eines anderen Zeigers; an einigen seltsamen Orten ändern Sie hartkodierte Werte in solche basierend auf dem Auftreten einiger Bits an anderen Stellen des Codes, im Allgemeinen - machen Sie es schwieriger zu brechen als durch einfaches Ändern der Bits in der ausführbaren Datei mit dem Hex-Editor.
  3. Versuchen Sie, ein Protokoll zu erstellen, das Ihr Server verwenden würde, um Fragen zur App zu stellen ("Gib den Wert von 293 Byte von dir selbst") und überprüfe die Antworten.
  4. Benutze deine Vorstellungskraft und denke an eine seltsame Selbstprüfungsmethode, die niemand zuvor benutzt hat:)

Wie bereits erwähnt, ist nichts davon sicher, den Authentifizierungsteil abzuschalten. Aber nichts ist und das könnte es für Cracker schwieriger machen.

    
kgadek 12.08.2011, 12:56
quelle
3

Hintergrund: Ich habe ein aktivierungsbasiertes System implementiert, das auf einem Lizenzsystem eines Drittanbieters aufbaut, d. h. Server, Datenbank, E-Commerce-Integrationen. Ich habe auch separat ein C # -Aktivierungssystem mit RSA-Schlüsseln geschrieben, aber nie bereitgestellt.

Produkt Aktivierung bedeutet üblicherweise, dass die Software auf einer bestimmten Maschine aktiviert werden muss. Ich nehme an, dass du das meinst. Wenn Sie nur zwei Zeichenfolgen haben wollen, die "demo" und "käuflich" bedeuten, werden sie innerhalb von Stunden entschlüsselt und verteilt (vorausgesetzt, Ihr Produkt ist wertvoll). Es gibt einfach keinen Sinn.

Also. Angenommen, Sie möchten "Aktivierung", dann muss der folgende Prozess passieren, wenn der Benutzer Ihre Software kauft:

  1. Die Order-Fulfillment-Software weist den Server an, "Purchase Key" zu generieren und an den Benutzer
  2. zu senden
  3. Der Benutzer gibt "Purchase Key" in die Software
  4. ein
  5. Die Software sendet den Kaufschlüssel und die eindeutige Computer-ID an den Server.
  6. Server kombiniert Kaufschlüssel und Maschinen-ID in einer Zeichenfolge und signiert sie mit ihrem Zertifikat und gibt sie an den Benutzer zurück.
  7. Die Software überprüft, ob die Signatur mit dem öffentlichen Schlüssel des Servers gültig ist.
  8. Die Software konnte an vielen Stellen nachsehen: die Sig an vielen Orten laden, in anderen überprüfen.

Beim Generieren von Kaufschlüsseln kann der Server nicht nur speichern, welches Produkt gekauft wurde, sondern auch, um welches Produktniveau es sich handelt. Sie können auch "freie" Produkte haben, die zeitlich begrenzt sind, so dass der Benutzer die Vollversion der Software 30 Tage lang ausprobieren kann.

Sie verwenden C #, also vergewissern Sie sich, dass Sie die Binärdateien mit dotfuscator oder ähnlichem verschleiern. Aber selbst damit kann man nichts gegen einen entschlossenen Hacker tun. Ich gehe davon aus, dass Ihr Ziel darin besteht, nicht zahlende Benutzer zu zwingen, selbst Hacker zu sein oder mit einer gecrackten Version zu riskieren: Kinder kümmern sich nicht, Unternehmen könnten es tun. YMMV.

Der Code, der die Überprüfung durchführt, muss sich in jeder zu schützenden Assembly befinden. Andernfalls kann ein Angreifer den Schutz trivial entfernen, indem er die Assembly ersetzt, die die Überprüfung durchführt. Schneiden Sie den Code aus und fügen Sie ihn bei Bedarf ein.

Oder kauf einfach etwas.

Eine weitere Option besteht darin, dass der Server "Kaufschlüssel" vorgeneriert und sie dem Fulfillment-Dienst für Bestellungen zur Verfügung stellt, aber dann den Schlüssel nicht mit den Kundendetails verknüpfen (zumindest nicht, bis sie sich registrieren). Es ist besser, wenn der E-Commerce-Server Ihren Server trifft, wenn ein Kauf getätigt wurde, und Ihr Server ihn senden lässt.

Der schwierige Teil ist nicht so sehr die Generierung von Aktivierungsschlüsseln als die Erstellung des Servers, der Datenbank und der Integration mit E-Commerce-Software und vor allem menschliche Probleme: erlauben Sie unbegrenzte Installationen pro Kaufschlüssel? Nur 1? Wenn nur 1, dann müssen Sie Kunden-Support und eine Möglichkeit haben, um es einem Benutzer zu ermöglichen, es auf einem neuen Computer zu installieren. Das ist nur ein Problem. Allerlei Spaß.

    
jamie 25.08.2011 09:58
quelle
2

Dieser Typ schrieb einen Blogbeitrag über eine ähnliche Idee und erklärte, was er mit ihnen gemacht hat eigene kommerzielle Software. Auch schrieb eine Liste von Empfehlungen über die offensichtlichsten Cracking-Techniken. Hoffe es hilft.

    
Ither 12.08.2011 13:46
quelle
1
  

Eine einfache Idee war, ich hätte nur eine 2 verschlüsselt   Strings, jetzt, wenn die Entschlüsselung mit der Demopublik erfolgreich ist   Schlüsselzertifikat dann wird die Anwendung im Demo-Modus und etc ..

laufen

Könnte eine einfache Lösung sein. Auf diese Weise verhindern Sie nicht, dass jemand Ihre Binärdateien zurückentwickelt und die Ausführung in die richtige Zeile springt. Jeder hat dein Programm, hat eine komplette Version davon, also ist es nur eine Frage des Findens, wie man diesen einfachen Mechanismus bricht.

Vielleicht ist eine bessere Lösung, einen Teil der Binärdateien zu verschlüsseln, die benötigt werden, um die vollständige Anwendungsversion anstelle einer einfachen Zeichenfolge zu verwenden. Auf diese Weise, um die vollständige Version der Anwendung auszuführen, muss jemand diese Binärdateien entschlüsseln, um sie auszuführen.

Bitte beachten Sie, dass selbst diese Lösung nicht ausreicht. Es gibt andere Probleme damit:

  1. Wird die gesamte Version Ihres Tools denselben Verschlüsselungsschlüssel verwenden? Einen von ihnen brechen, um alles zu brechen ..
  2. Selbst wenn Sie für jede freigegebene Binäranwendung einen anderen Schlüssel verwenden, ist die verschlüsselte Binärdatei identisch? Einmal geknackt, können Sie die unverschlüsselten Binärdateien für alle verteilten Anwendungen wiederverwenden.

Wie löst man diese Probleme? Es gibt keine einfache Lösung. Die meisten der wichtigeren kommerziellen Software mit sogar hochentwickelten Schutzsystemen sind nur wenige Stunden oder Tage nach ihrer Veröffentlichung kaputt.

    
Heisenbug 12.08.2011 12:20
quelle
0

Die Produktaktivierung ist kein Problem, das die asymmetrische Kryptographie lösen kann. Bei der asymmetrischen Kryptographie geht es darum, Geheimnisse vor Ihrem Gegner zu bewahren. Das Problem ist, dass Sie kein Geheimnis behalten können, das auf Ihrer Gegnermaschine gespeichert ist, das wäre security obscurity .

Der richtige Weg zur Produktaktivierung . Erzeugt eine kryptografische Nonce , die in einer Datenbank auf Ihrem Server gespeichert ist. Sie geben diese Nonce dem Kunden, wenn sie das Produkt kaufen, und dann aktivieren sie es online. Dieser Aktivierungsprozess könnte neues Material herunterladen, was es dem Angreifer erschweren würde, die Kopie, die er hat, zu zu modifizieren . entsperren "neue Funktionen.

Aber selbst mit DRM-Systemen, die verlangen, dass Sie während der Verwendung des Produkts online sind . Wie die in neuen Spielen wie "From Dust" gefundenen sind noch wenige Stunden nach ihrer Veröffentlichung kaputt .

    
rook 21.08.2011 19:04
quelle
0

Sie können AsProtect verwenden, um dieses Problem zu lösen. Das ist ein guter Anfangspunkt.

    
vromanov 22.08.2011 17:52
quelle
0

Einer der Vorteile der Verschlüsselung mit öffentlichem Schlüssel ist, dass Sie Verifizieren Sie den Ursprung eines bestimmten Datenelements. Wenn Sie also den öffentlichen Schlüssel in Ihrer Assembly speichern und dann ein bestimmtes Datenelement (z. B. einen Autorisierungscode oder eine Seriennummer) signieren, kann Ihre Assembly nachweislich feststellen, dass Sie derjenige waren, der diese Daten erstellt hat - und kein Hacker. Die eigentlichen Daten selbst sind nicht so wichtig - es kann ein einfacher Pass / Fail-Wert sein.

Dies ist eigentlich ziemlich einfach mit .NET zu tun. Sie können ein x509-Zertifikat verwenden oder wie wir DeployLX-Lizenzierung die RSACryptoServiceProvider .

Ich würde wärmstens empfehlen, ein kommerzielles Produkt zu kaufen (es spielt keine Rolle, welches DeployLX ausgezeichnet ist) und dies nicht selbst aus zwei Gründen zu tun.

  1. Selbst wenn Sie ein großartiger Entwickler sind, werden Sie beim ersten Mal wahrscheinlich falsch liegen. Und alle Ersparnisse, die Sie durch das eigene Rollen genossen haben, gehen verloren, um sich von diesem Fehler zu erholen.
  2. Sie werden viel mehr Zeit damit verbringen, an Ihrem eigenen System zu arbeiten - Zeit, die Sie damit verbringen sollten, Ihr Produkt großartig zu machen.

Die zweite Phase beim Schutz der Software besteht darin, sicherzustellen, dass sie so läuft, wie Sie sie erstellt haben - und nicht von einem Hacker verändert wurde. Es spielt keine Rolle, welche Verschlüsselung Sie verwenden, wenn Hacker if( licensed ) auf if( true ) überprüfen können.

    
Paul Alexander 07.03.2012 22:01
quelle