2008-12-05 18 views
17

Dies ist ein Problem, das wir alle irgendwann in Betracht ziehen müssen.Softwareschutz für kleine Anbieter

Nach vielen Jahren und vielen Ansätzen stimme ich generell mit der Staterment überein: "Für jede geschützte Software, die von mehr als ein paar hundert Menschen verwendet wird, kann man eine gekrackte Version finden. Bis jetzt kann jedes Schutzschema sein manipuliert." Does your employer enforce the use of anti-piracy software?

Weiter, jedes Mal, wenn ich über dieses Thema post, wird jemand mich erinnern; "Zuallererst, egal, welche Art von Schutz Sie verwenden werden, wird ein wirklich engagierter Cracker schließlich durch alle Schutzbarrieren kommen." What's the best value for money c# code protection for a single developer

Also, trotz dieser zwei weitgehend zutreffenden Disclaimer, lassen Sie uns über "Schutz" reden!

Ich fühle immer noch, dass für kleinere apps, die unwahrscheinlich sind, die Zeit und die Aufmerksamkeit eines erfahrenen Crackers, Schutz ist eine lohnende Übung.

Es scheint offensichtlich, dass egal, was Sie tun, wenn der Cracker das Ergebnis einer IF-Anweisung (JMP) durch Patchen der Anwendung wechseln kann, dann werden alle Passwörter und Dongles in der Welt nicht helfen.

So hat mein Ansatz gewesen, wie Sie den Code mit Virtualisierung mit Produkten zu verschleiern: http://www.oreans.com/codevirtualizer.php Ich habe mit diesem Produkt sehr zufrieden. Meines Wissens ist es nie besiegt worden. Ich kann sogar die ausführbare Datei mit PEcompact komprimieren Hat jemand Erfahrung damit?

Hatte nichts als Probleme mit EXEcryptor http://www.strongbit.com/news.asp Auch die Website ist ein Kopfschmerz zu verwenden. Die kompilierten Apps stürzen beim Ausführen von WMI-Anrufen ab.

Dieser Ansatz ermöglicht es Ihnen, mit der Verschleierung kleinere Codeabschnitte zu umgeben und somit die Sicherheit schützen Überprüfung usw.

I Nutzen Sie das Online Genehmigungskonzept, da die Anwendung regelmäßig Daten vom Server benötigt, so dass es keinen Sinn macht, für den Benutzer, um es für längere Zeit offline zu verwenden. Per Definition ist die App zu diesem Zeitpunkt wertlos, auch wenn sie geknackt ist.

So ein einfacher verschlüsselter Handshake ist viel gut. Ich überprüfe es nur gelegentlich innerhalb des Verschleierungsschutzes. Wenn der Benutzer die App auf einem anderen Computer installiert, wird beim Start eine neue ID hochgeladen, und der Server deaktiviert die alte ID und gibt eine neue Berechtigung zurück.

Ich benutze auch einen Hash der kompilierten App und überprüfen Sie es beim Start um zu sehen, ob ein einzelnes Bit geändert hat, dann öffnen Sie die App als Datei (mit einem LOCK) aus der App, um zu verhindern, dass jemand es einmal ändert gestartet.

Da alle statischen Zeichenfolgen in der EXE-Datei deutlich sichtbar sind, versuche ich generische mit Fehlermeldungen und so weiter. Sie werden die Zeichenfolge "Autorisierung fehlgeschlagen" nirgendwo finden.

Zum Schutz gegen Speicherauszüge verwende ich eine einfache Textverschleierungstechnik (wie XOR jedes Zeichen) Dies macht Klartextdaten im Speicher schwieriger von Variablen und so weiter zu unterscheiden.

Dann gibt es natürlich AES für alle Daten, die wirklich empfindlich sind.Ich mag den Counter-Modus für Text, weil dadurch keine sich wiederholenden Sequenzen entstehen, die darunterliegende Daten wie eine Folge von Leerstellen offenbaren.

Aber mit all diesen Techniken, wenn der Key oder der Initialisierungsvektor aus dem Speicher ausgegeben oder die IF-Anweisung umgangen werden kann, ist alles verschwendet.

Ich neige dazu, eine switch-Anweisung anstelle einer bedingten Anweisung zu verwenden. Dann erstelle ich eine zweite Funktion, die im Grunde eine Sackgasse ist, anstelle der Funktion, die tatsächlich die gewünschte Aufgabe ausführt.

Eine andere Idee besteht darin, Zeiger mit einer hinzugefügten Variablen zu codieren. Die Variable ist das Ergebnis der Autorisierung (normalerweise Null). Dies wird irgendwann zu einem GPF führen. Ich benutze dies nur als letzten Ausweg, nachdem ein paar niedrigere Berechtigungen gescheitert sind, sonst könnten echte Benutzer darauf stoßen. Dann ist der Ruf Ihrer Software geringer.

Welche Techniken verwenden Sie?

(dies ist kein Gewinde die Verdienste der Umsetzung etwas diskutieren. Es ist für diejenigen geeignet, die etwas zu tun haben beschlossen)

+0

Als ich in einem Hacker-Forum eine Frage zu einigen derzeit verfügbaren Software-Schutz-Tools stellte, sagte man: "Über Code Virtualizer habe ich einen CodeUnvirtualizer erstellt, um virtuelle Opcodes vollständig in Assembler-Sprache umzuwandeln". So wurde Code Virtualizer tatsächlich besiegt. Aber nachdem ich das gesagt habe, ist es das Werkzeug, das ich wählen werde, um ASProtect zu ersetzen. Die meisten anderen Programme fügen einfach viel zu der exe hinzu und machen Anti-Virus- und Anti-Spyware-Fehlalarme viel wahrscheinlicher. – smartins

Antwort

11

Ich stimme nicht zu xsl.

Wir schützen unseren Code, nicht weil wir unsere Einnahmen schützen wollen - wir akzeptieren, dass diejenigen, die ohne Lizenz verwendet würden, wahrscheinlich niemals dafür bezahlen würden.

Stattdessen haben wir es die Investition unsere Kunden in unsere Software gemacht haben, zu schützen. Wir glauben, dass die Verwendung unserer Software sie wettbewerbsfähiger auf ihrem Markt macht und dass, wenn andere Unternehmen Zugang haben, ohne zu zahlen, sie einen unfairen Vorteil haben, dh sie werden so konkurrenzfähig, ohne den Overhead der Lizenzkosten zu haben.

Wir achten sehr darauf, dass der Schutz - der aus dem eigenen Haus stammt - für die gültigen Benutzer so unauffällig wie möglich ist, und zu diesem Zweck würden wir niemals eine Lösung "von der Stange" kaufen, die sich darauf auswirken könnte .

+1

Dies ist nur eine Rationalisierung. Wenn Sie sich wirklich Sorgen machen über den Wettbewerbsnachteil, den die hohen Kosten Ihrer Software für Ihre Kunden bedeuten, können Sie das Problem leichter beheben, indem Sie die Kosten senken. –

+2

Ich stimme nicht zu. Unsere Software ist sehr Nische, das Unternehmen wäre nicht in der Lage, sich selbst zu erhalten, wenn wir weniger berechnen. Mit weniger als hundert Sitzen und einer Sättigungssenkung würden die Kosten das Produkt komplett vom Markt nehmen. – Martin

8

verwende ich persönlich die Code-Techniken discussed here. Diese Tricks haben den Vorteil, Piraten zu belästigen, ohne den legitimen Endnutzern das Leben zu erschweren

Aber die interessantere Frage ist nicht "was", sondern "warum". Bevor ein Softwareanbieter mit dieser Art von Übung beginnt, ist es wirklich wichtig, ein Bedrohungsmodell zu erstellen. Zum Beispiel unterscheiden sich die Bedrohungen für ein günstiges B2C-Spiel völlig von denen für eine hochwertige B2B-App.

Patrick Mackenzie hat einen guten Aufsatz, wo er discusses some of the threats, einschließlich einer Analyse von 4 Arten von potenziellen Kunden. Ich empfehle, diese Bedrohungsanalyse für Ihre eigene App durchzuführen, bevor Sie Entscheidungen zum Schutz Ihres Geschäftsmodells treffen.

+0

+1 für die Links - sehr informativ! –

11

Sie brauchen nicht ein paar hundert Benutzer, um Ihre Software geknackt zu bekommen. Ich war genervt, meine Shareware so oft geknackt zu haben, dass ich als Experiment ein Programm namens Magic Textbox (das nur ein Formular mit einem Textfeld war) erstellte und es auf Shareware-Sites veröffentlichte (es hatte seine eigene PAD-Datei und alles). Einen Tag später war eine gecrackte Version von Magic Textbox verfügbar.

Diese Erfahrung hat mich ziemlich aufgegeben, meine Software mit etwas mehr als rudimentärem Kopierschutz zu schützen.

+0

Ich wette, es gibt irgendwo einen Torrent der originalen Magic Textbox :) –

+0

Wenn nicht, wäre es nicht zu schwierig es neu zu schreiben, vielleicht in .NET diesmal. :) – MusiGenesis

1

Ich habe verwendet.NET Reactor in der Vergangenheit mit guten Ergebnissen - http://www.eziriz.com/

Was mir an diesem Produkt gefallen hat, ist, dass es nicht erforderlich war, den Code zu verschleiern, um ziemlich guten Schutz zu haben.

+1

.NET Reactor wird häufig von Crackern entpackt – mmcdole

+0

Ihr ist keine Unterstützung von dieser Firma, alle Support-E-Mails sind unbeantwortet. –

6

Ich habe Hardware-Keying (Dongle) vor mir selbst implementiert, so dass ich nicht völlig mit den Problemen nicht vertraut bin. Tatsächlich habe ich viel darüber nachgedacht. Ich stimme mit niemandem überein, der gegen das Urheberrecht verstößt, wie es deine Cracker tun. Wer keine Kopie Ihrer Software legal erwerben möchte, sollte darauf verzichten. Ich verletze niemals selbst Software-Copyright. Das sagte ...

Ich mag wirklich, wirklich das Wort "schützen" hier verwendet. Das einzige, was Sie zu schützen versuchen, ist Ihre Kontrolle. Sie sind nicht Schutz der Software. Die Software ist genauso gut wie Ihre Benutzer.

Der Grund dafür, dass Menschen davon abgehalten werden, Ihre Software zu kopieren und zu teilen, ist solch eine unheilige PITA, dass das Verhindern solcher Aktivitäten unnatürlich ist. Das ganze Konzept eines Computers dreht sich um das Kopieren von Daten, und es ist einfach menschliche Natur, nützliche Dinge zu teilen. Sie können diese Tatsachen bekämpfen, wenn Sie wirklich darauf bestehen, aber es wird ein lebenslanger Kampf sein. Gott macht die Menschen nicht anders, und ich kaufe keinen Computer, der die Dinge nicht kopieren kann. Vielleicht wäre es besser, einen Weg zur Arbeit mit Computern und Menschen zu finden, anstatt gegen sie die ganze Zeit zu kämpfen?

Ich, zusammen mit der Mehrheit der professionellen Softwareentwickler, bin Vollzeit beschäftigt von einem Unternehmen, das Software entwickelt, so dass es sein Geschäft tun kann, nicht so kann es ein "Softwareprodukt" mit künstlicher Knappheit zu "verkaufen "für Benutzer. Wenn ich etwas allgemein Nützliches schreibe (das hier kein "Wettbewerbsvorteil" ist), können wir es als Freie Software veröffentlichen. Kein "Schutz" ist erforderlich.

3

xsl, das ist eine sehr enge Sicht mit vielen eingebauten Annahmen.

Es scheint für mich offensichtlich, dass jede App, die auf die Bereitstellung von etwas von einem Server unter Ihrer Kontrolle angewiesen ist, in der Lage sein sollte, ziemlich gut herauszufinden, wer einen gültigen Account hat!

Ich bin auch der Überzeugung, dass regelmäßige Updates (was bedeutet, eine neu kompilierte App mit Code an verschiedenen Standorten) Cracken Vesrions schnell veraltet machen wird. Wenn Ihre App mit einem Server kommuniziert, ist es ein Kinderspiel, einen zweiten Prozess zu starten, um die Hauptprogrammdatei jede Woche zu ersetzen.

Also ja, nichts ist unknackbar, aber mit einem cleveren, intrinsischen Design wird es strittig. Der einzige Faktor, der signifikant ist, ist wie viel Zeit die Cracker bereit sind, dafür auszugeben, und wie viel Aufwand Ihre potentiellen Kunden sind, die sich bemühen, das Produkt ihrer Bemühungen wöchentlich oder sogar täglich zu finden!

Ich vermute, dass, wenn Ihre App eine nützliche Funktion bietet, sie bereit sind, einen fairen Preis dafür zu bezahlen. Wenn nicht, werden wettbewerbsfähige Produkte auf den Markt kommen und Ihr Problem hat sich gerade gelöst.

4

Von einigen der Verbindungen:

Das Konzept, das ich versuchte zu erklären ist, was ich als die „Crack Spread“. Es spielt keine Rolle, ob ein Crack (oder keygen, oder raubkopierte Serie oder was auch immer) für Ihre Anwendung existiert. Was zählt, ist, wie viele Menschen Zugang zum Riss haben.

Wo/wann die Seriennummer überprüfen: Ich überprüfe einmal beim Start.Viele Leute sagen "Check-in an allen möglichen Orten", um es für jemanden schwieriger zu machen, indem er den Scheck streicht. Wenn Sie besonders scharf auf den Cracker sein wollen, checken Sie alle möglichen Orte mit inline Code ein (dh NICHT alles in SerialNumberVerifier.class externalisieren) und wenn möglich, machen Sie es multi-threaded und schwer zu erkennen, wenn es scheitert , auch. Aber das macht es nur schwieriger, den Riss zu machen, nicht unmöglich, und erinnere dich daran, dass dein Ziel im Allgemeinen nicht darin besteht, den Cracker zu besiegen. Den Cracker zu besiegen, macht dich nicht zu einer nennenswerten Menge Geld. In den meisten Fällen müssen Sie nur den gelegentlichen Benutzer besiegen, und der gelegentliche Benutzer hat keinen Zugriff auf einen Debugger und kann ihn auch nicht verwenden.

Wenn Sie nach Hause telefonieren, sollten Sie mit ihren Benutzerinformationen nach Hause telefonieren und die Seriennummer als Ausgabe des Skripts Ihres Servers akzeptieren, nicht mit der Seriennummer nach Hause telefonieren und einen booleschen Wert usw. akzeptieren die Ausgabe. d. h., Sie sollten die Schlüsselinjektion durchführen, nicht die Schlüsselüberprüfung. Die Schlüsselüberprüfung muss letztendlich innerhalb der Anwendung erfolgen, weshalb Public Key Crypto der beste Weg ist, dies zu tun. Der Grund ist, dass die Internetverbindung auch in den Händen des Gegners ist :) Du bist ein Host-Dateiwechsel weg von einem Break-Once, Break-Everywhere-Exploit, wenn deine Software nur erwartet, einen Booleschen Code aus dem Internet zu lesen.

Machen Sie keinen "interessanten" oder "herausfordernden" Schutz. Viele Cracker knacken nur für die intellektuelle Herausforderung. Machen Sie Ihren Schutz schwer zu knacken, aber so langweilig wie möglich.

Es gibt einige Risse, die nach Byte-Mustern auf der Suche nach dem Ort zum Patchen suchen. Sie werden normalerweise nicht durch eine Neukompilierung besiegt, aber wenn Ihre .EXE gepackt ist (von ASProtect, Armadillo, etc) müssen diese Art von Rissen zuerst die .EXE entpacken .. und wenn Sie einen guten Packer wie ASProtect verwenden, der Cracker kann die EXE manuell mit einem Assembly-Level-Debugger wie SoftICE entpacken, aber es wird nicht möglich sein, ein Tool zu erstellen, das die .EXE automatisch entpackt (um anschließend die Byte-Patches anzuwenden).

+3

Die weitere Tatsache, dass Sie sich auf Ihre Benutzer als "der Widersacher" beziehen, sollte darauf hinweisen, wie weit Sie sich vom Weg hierher entfernt haben. :-( –

+4

Benutzer, die die Software gestohlen haben, sind definitionsgemäß der Gegner ... –