523 Stimmen

Schutz von .NET-Code vor Reverse Engineering?

Die Verschleierung ist eine Möglichkeit, aber sie kann nicht davor schützen, die Sicherheit der Anwendung gegen Piraterie zu verletzen. Wie stelle ich sicher, dass die Anwendung nicht manipuliert wird, und wie stelle ich sicher, dass der Registrierungsmechanismus nicht zurückentwickelt werden kann?

Es ist auch möglich, eine C#-Anwendung in nativen Code zu konvertieren, und Xenocode zu kostspielig ist.

C# bietet viele Funktionen und ist die ideale Sprache für meinen Code, so dass es nicht in Frage kommt, die gesamte Codebasis erneut in C++ zu schreiben.

Sichere Zertifikate können leicht aus den signierten Assemblies in .NET entfernt werden.

702voto

mmcdole Punkte 88559

Das können Sie nicht.

Es gibt Schritte, die Sie unternehmen können, um es zu einem wenig schwieriger, aber letztlich ist jede ausführbare Datei auf dem lokalen Rechner knackbar. Schließlich muss dieser Code in nativen Maschinencode umgewandelt werden, und jede lauffähige Anwendung ist angreifbar.

Sie wollen es nur so schwer machen, dass es sich nicht lohnt, es zu knacken.

Ich habe einige Vorschläge für Sie, um Ihre Bewerbung zu schützen:

  • Verschleiern Ihr Code. Dotfuscator hat eine kostenlose Edition und wird mit Visual Studio geliefert.
  • Utilice öffentlicher/privater Schlüssel o asymmetrische Verschlüsselung um Ihre Produktlizenzen zu generieren. Dies stellt sicher, dass nur Sie können Ihre Lizenzcodes generieren. Auch wenn Ihre Anwendung es geknackt haben, können Sie sicher sein, dass sie keinen Schlüsselgenerator für Ihre Anwendung freigeben werden, da es unmöglich ist, den Algorithmus zur Schlüsselerzeugung umzukehren.
  • Verwenden Sie eine Fremdverpacker um Ihre ausführbare .NET-Datei in eine verschlüsselte Win32-Wrapper-Anwendung zu packen. Themida ist eine der besseren. Dadurch wird verhindert, dass die Leute Ihre Bewerbung in .NET-Reflektor und macht das Auspacken beim Rückwärtsfahren mühsam.
  • Schreiben Sie Ihr eigenes Lohnpacker . Wenn die fremden Packer zu teuer sind, sollten Sie darüber nachdenken, Ihre eigenen zu schreiben. Manchmal können benutzerdefinierte Packer sehr effektiv sein, weil es keine gut veröffentlichten Methoden gibt, wie man sie auspackt. Das Tutorium Wie Sie Ihr eigenes Packprogramm schreiben bietet eine Menge guter Informationen zum Schreiben eines eigenen Win32-Packers.

Letztendlich werden die Leute Ihre Anwendung aber auch nutzen, wenn sie geknackt werden soll. Schauen Sie sich all die kommerzielle Software da draußen an, die eine riesige Menge an Ressourcen hat, um ihre Anwendungen zu schützen, und dennoch werden sie geknackt, bevor die Anwendungen überhaupt für die Öffentlichkeit freigegeben werden.

Ein geschickter Reverse Engineer kann die IDA-Pro und schneiden durch Ihre Anwendung wie Butter, egal was Sie tun. Eine gepackte Anwendung kann ausgepackt werden, und die Verschleierung verhindert nur, dass es ein Spaziergang wird. All Ihre harte Arbeit mit Ihrem komplexen Lizenzcode kann mit einem einzigen Byte-Patch zunichte gemacht werden.

Sie müssen nur akzeptieren, dass die Möglichkeit besteht, dass Ihre Software raubkopiert wird. Es gibt einige Leute, die jamais die Ihre Bewerbung auf jeden Fall bezahlen werden, und das sind die Leute, um die Sie sich nicht kümmern müssen.

Es gibt jedoch viele Unternehmen, die niemals einen Rechtsstreit riskieren würden und gerne Softwarelizenzen kaufen, und viele Computernutzer, die das Risiko entweder nicht eingehen wollen, es falsch finden oder technisch nicht versiert genug sind, um Raubkopien zu erstellen. Das sind Ihre wahren Kunden, und Sie sollten sich darauf konzentrieren, ihnen eine gute Benutzererfahrung zu bieten, und die Leute, die Ihre Software knacken, ignorieren.

Meine Anwendung wurde schon einmal raubkopiert, und ich habe es als persönlichen Affront empfunden. Da war ich nun, ein kleiner Entwickler, der sein Herz und seine Seele in eine Anwendung gesteckt hatte, und diese Leute hatten die Frechheit, von mir zu rauben?! Sie haben mir das Geld direkt aus der Tasche gezogen!

Ich fügte sofort einen Haufen drakonischen DRM-Code ein und versuchte, jede Person zu sabotieren, die eine illegale oder geknackte Kopie verwendete. Ich hätte natürlich daran arbeiten sollen, meine Anwendung zu verbessern, anstatt zu versuchen, das Unvermeidliche zu verhindern. Nicht nur das, ich habe auch meine wahr Die Kunden werden all diese zusätzlichen Schutzmaßnahmen, die ich eingeführt habe, in Anspruch nehmen.

Nach einem langen Kampf wurde mir klar, dass ich gegen die Gezeiten ankämpfte und dass die ganze Zeit, die ich verschwendet hatte, umsonst war. Ich entfernte den gesamten Phone-Home-Code mit Ausnahme der einfachen Lizenzfunktionen und blickte nie wieder zurück.

270voto

Joel Coehoorn Punkte 377088

Keine Anwendung (ob verwaltet oder nicht) lässt sich vollständig absichern. Wenn Systeme wie die Playstation und das iPad geknackt werden können - bei denen der Hersteller sogar die Hardware kontrolliert - welche Hoffnung hat dann Ihre Anwendung? Zum Glück wollen Sie das auch gar nicht. Meiner Meinung nach müssen Sie Ihre Anwendung gerade so weit absichern, dass jemand sie nicht knacken kann. versehentlich Ihr Produkt piraten, und nicht mehr.

Wenn Sie z. B. eine Lizenz pro Maschine verwenden, sollte es nicht nur funktionieren, wenn Sie es auf einem neuen zweiten Rechner installieren. Sie brauchen eine gute Fehlermeldung, um zusätzliche Supportanrufe zu vermeiden, aber nehmen Sie sich nicht zu viel Zeit, um das Problem zu umgehen, und überrumpeln Sie die Benutzer nicht damit.

Ein weiteres Beispiel ist ein zeitlich begrenzter Versuch. Kümmern Sie sich nicht einmal um so einfache Dinge wie die Möglichkeit, die Systemuhr zurückzustellen. Jemand, der das tut, weiß, dass er gegen Ihre Lizenz verstößt, und solange ein Benutzer kennt Wenn sie gegen die Vorschriften verstoßen, haben Sie genug getan.

Sie müssen dies tun, weil die Benutzer sich nicht um Ihre Lizenz kümmern. Lizenzen sind erfundene Dinge, die niemand bis sie es müssen. Keiner liest sie, und das sollte auch nicht nötig sein. Die beste Möglichkeit, dem Benutzer mitzuteilen, wo die Grenzen liegen, ist daher, wenn das Verhalten Ihrer Anwendung im Auslieferungszustand mit der Lizenz übereinstimmt. Im ersten Fall bedeutet dies, dass die Installation entweder nicht durchgeführt wird oder beim zweiten Mal im Testversionsmodus installiert wird. Im letzteren Fall könnte es bedeuten, dass nur ein Klartextdatum in einer Konfigurationsdatei überprüft wird. Wie auch immer, stellen Sie sicher, dass Sie es auf elegante, hilfreiche und respektvolle Weise handhaben.

Das erklärt also, was es bedeutet, genau das zu tun. Aber warum nicht noch weiter gehen? Warum sollte man nicht jedes kleine Loch stopfen, das man findet? Die Antwort besteht aus zwei Teilen. Erstens, wenn jemand die ethische Schwelle von Bewusst Wenn Sie gegen Ihre Lizenzbedingungen verstoßen - und sei es auch nur auf einfache Weise -, werden sie auch bereit sein, etwas Schwierigeres oder Gefährlicheres zu tun, wie z. B. Ihre Bewerbung von einem torrent Website - und die Ausführung von Anwendungen, die von nicht vertrauenswürdigen Quellen heruntergeladen wurden, birgt eine gewisse Gefahr. Wenn Sie es diesen Nutzern noch schwerer machen, ist das nur ein kleines Ärgernis für sie, und Sie riskieren, Probleme mit Ihren zahlenden Kunden zu bekommen. Wenn Sie es einfach halten, kann dies jemanden davon abhalten, Ihre Anwendung zu knacken und einen umfassenderen Crack zu veröffentlichen. Zweitens haben Sie nur wenige Augen, um nach Fehlern zu suchen; die Hacker haben viele, und sie haben mehr Übung darin, sie zu finden. Sie brauchen nur eine kleine Schwachstelle zu übersehen, und Ihre Anwendung wird auf den Piratenseiten genauso verbreitet sein, als hätten Sie nichts getan. Sie müssen jedes Mal richtig liegen, die Hacker müssen nur einmal Glück haben. Der Aufwand ist also sehr hoch, und die Wahrscheinlichkeit eines Erfolgs ist sehr gering.

Letztendlich, wenn jemand möchte, dass Pirat Ihre Anwendung (im Gegensatz zu ihrer bloßen Nutzung), und das ist ihr Hauptziel, werden sie es tun. Sie können nichts tun, um sie aufzuhalten. Das liegt in der Natur der Software: Sobald sich die Dateien, aus denen Ihr Produkt besteht, auf dem Computer eines Benutzers befinden, sind sie sera mit ihnen machen können, was sie wollen. Dies ist besonders wichtig in verwalteten Umgebungen wie Java oder .NET aber es gilt definitiv auch für nativen Code. Die Zeit ist auf ihrer Seite, und mit genügend Zeit kann jede digitale Sicherheit geknackt werden.

Da Sie die Nutzer nicht davon abhalten können, Ihr Produkt zu rauben, ist es am besten, wenn Sie diese Gruppe von Nutzern auf eine Art und Weise ansprechen, die sie zu Ihrem Vorteil nutzt. Oft ist es möglich, sie dazu zu bringen, für Sie zu arbeiten und nicht gegen Sie. In diesem Sinne lohnt es sich wahrscheinlich, unabhängig von der Art Ihrer Anwendung, eine kostenlose Version bereitzuhalten, die fast vollständig funktionsfähig ist und nicht abläuft. Selbst bei einem Preis von 1 US-Dollar ist der Unterschied zu einer kostenlosen Version enorm, und sei es nur aus dem Grund, dass der Kunde Ihnen seine Kreditkarte nicht anvertrauen muss. Eine kostenlose Version Ihres Produkts wird nicht nur der Verbreitung von Raubkopien ein Ende setzen (warum sollten Sie eine Raubkopie riskieren, wenn Sie für denselben Preis eine legale Version anbieten können), sondern hat auch das Potenzial, Ihr Publikum dramatisch zu vergrößern.

Das Ergebnis ist, dass Sie möglicherweise den Preis der kostenpflichtigen Version erhöhen müssen, so dass Sie am Ende statt 2.000 Benutzern zu je 20 Dollar 100.000 kostenlose Benutzer haben, von denen 500 bereit sind, 99 Dollar für die "professionelle" Version zu zahlen. Damit verdienen Sie mehr Geld, als wenn Sie einen Haufen Zeit damit verbringen würden, Ihr Produkt zu sperren. Darüber hinaus können Sie diese kostenlosen Nutzer einbinden und die Beziehung auf mehrere wichtige Arten nutzen.

Eine ist die Unterstützung. Ein Pessimist würde diese Gelegenheit nutzen, um sich über die erhöhten Kosten für den Support von 100.000 kostenlosen Benutzern zu beschweren, aber stattdessen passiert etwas Erstaunliches: Ihr Produkt wird weitgehend selbsttragend. Man sieht das immer wieder bei großen Open-Source-Projekten, die kein Geld für Supportkosten haben. Die Benutzer werden aufspringen und es möglich machen.

Kostenlose Nutzer haben in der Regel von vornherein geringere Erwartungen an den Support, und das aus gutem Grund. Alles, was Sie tun müssen, ist, die kostenlose Version so zu kennzeichnen, dass sie nur für den Community-Support in Frage kommt, und zu diesem Zweck ein von Benutzern moderiertes Online-Forum einzurichten. Ihre Support-Wissensbasis generiert sich selbst, und fortgeschrittene Benutzer werden diejenigen, die zusätzliche Hilfe benötigen, in Ihrem Namen betreuen. Noch wichtiger ist, dass Sie dadurch Fehler schneller erkennen und beheben können, was letztlich die Qualität Ihres Produkts verbessert und die gesamten Supportkosten senkt. Das war früher nicht möglich, weil Ihre Nutzerbasis nicht groß genug war, aber wenn Sie die kostenlosen Nutzer wie Kunden behandeln, kann das sehr gut funktionieren.

Eine andere ist das Feedback. Wenn Sie Ihr Forum beobachten, erfahren Sie wichtige Verbesserungsvorschläge, die Sie sonst vielleicht nie in Betracht gezogen hätten. Auf diese Weise können Sie letztendlich mehr Ihrer kostenlosen Nutzer in zahlende Nutzer verwandeln und ein attraktiveres Produkt schaffen, das ein noch größeres Publikum anzieht.

Schließlich müssen Sie auch an das Marketing denken. All diese kostenlosen Nutzer sind jetzt Fans und keine Gegner mehr, und sie werden sich entsprechend verhalten. Und nicht nur das: Wenn es an der Zeit ist, Ihre nächste Version zu veröffentlichen, werden diese Nutzer alle über Ihren genehmigten Vertriebskanal gegangen sein und nicht über einen anderen unbekannten Mechanismus. Das bedeutet, dass Sie bei der nächsten Version mit einem größeren, hoch interessierten und unterstützenden Publikum in Kontakt treten.

Die besten Funktionen, die für die Professional Edition reserviert werden sollten, sind Tools, die die Bereitstellung und Verwaltung in Unternehmen erleichtern. Für einen Cracker sind diese Funktionen nicht zwingend genug, um die Software für den eigenen Gebrauch zu hacken, aber für ein Unternehmen, das 300 Lizenzen kaufen und unternehmensweit verteilen möchte, ist dies ein Muss. Natürlich wird die Professional Edition trotzdem raubkopiert werden, aber auch hier gilt: Machen Sie sich nichts draus, denn Sie wären wahrscheinlich nicht in der Lage, das Produkt an diese Raubkopierer zu verkaufen, egal was Sie tun. 何れも Einnahmen.

Auch wenn es psychologisch schwierig sein kann, Ihr Produkt so weit zu verschenken, können Sie hoffentlich verstehen, dass dies wirklich der beste Weg ist. Und nicht nur das, es ist auf lange Sicht der einzige Weg. Ich weiß, dass es da draußen jemanden gibt, der denkt, dass er es nicht auf diese Weise machen will. Schließlich haben sie ihr 20-Dollar-Produkt jahrelang gut verkauft. Aber das ist einfach zu schade, denn wenn man es nicht so macht, schließlich wird jemand anderes . Und ihr Produkt wird genauso gut sein wie Ihres, oder nahe genug dran, dass sie das auch behaupten können. Dann sieht Ihre Preisgestaltung plötzlich unverschämt aus, die Umsätze gehen dramatisch zurück, und Sie können nichts mehr tun. Wenn es sein muss, können Sie sich für eine zusätzliche mittlere Stufe entscheiden, aber das wird Ihnen wahrscheinlich nicht helfen.

45voto

Kent Boogaart Punkte 170094

Meiner Erfahrung nach schadet es Ihren ehrlichen Kunden, wenn Sie Ihre Anwendung oder Bibliothek schwieriger zu knacken machen, während Sie die unehrlichen Kunden nur ein wenig aufhalten. Konzentrieren Sie sich darauf, ein großartiges, reibungsarmes Produkt zu entwickeln, anstatt das Unvermeidliche mit großem Aufwand hinauszuzögern.

41voto

Eric Lippert Punkte 628543

Ein Geheimnis, das man mit vielen Menschen teilt, ist kein Geheimnis. Wenn Sie geheimes Material in Ihrem Code haben, ist die Verschleierung kein Schutz; es muss nur entschleiert werden. einmal . Wenn Sie ein Geheimnis haben, das Sie nicht mit Ihren Kunden teilen wollen, dann teilen Sie sie nicht mit Ihren Kunden . Schreiben Sie Ihren Code als Webdienst und speichern Sie Ihren supergeheimen Code auf Ihrem eigenen Server, wo nur Sie ihn sehen können.

25voto

Mystic Punkte 4694

Grob gesagt, gibt es drei Gruppen von Menschen.

  • Diejenigen, die Ihre Software nicht kaufen und auf Cracks zurückgreifen, oder, wenn sie keine finden, Ihre Software überhaupt nicht benutzen. Erwarten Sie nicht, dass Sie mit dieser Gruppe Geld verdienen. Sie verlassen sich entweder auf ihre eigenen Fähigkeiten oder auf Cracker (die dazu neigen, ihre Zeit danach einzuteilen, wie nützlich Ihre Software ist und wie groß Ihr Publikum ist. Je nützlicher, desto eher wird ein Crack verfügbar sein).

  • Die Gruppe der rechtmäßigen Benutzer, die Ihre Software kaufen (bezahlen) wird, unabhängig davon, welchen Schutzmechanismus Sie verwenden. Machen Sie Ihren rechtmäßigen Benutzern das Leben nicht schwer, indem Sie einen komplizierten Schutzmechanismus verwenden, denn sie werden in jedem Fall dafür bezahlen. Ein komplexer Schutzmechanismus kann leicht die Benutzererfahrung beeinträchtigen, und das wollen Sie dieser Gruppe nicht antun. Ich persönlich würde gegen jede Hardware-Lösung stimmen, die die Kosten für Ihre Software erhöht.

  • Eine Minderheit, die auf "unethisches" Knacken zurückgreift und nur bezahlen. für Ihre Software denn seine Funktionen sind durch einen Lizenzierungsmechanismus geschützt. Sie wollen es dieser Gruppe wahrscheinlich nicht allzu leicht machen, Ihren Schutz zu umgehen. Der ganze Aufwand, den Sie für den Schutz Ihrer Software betreiben, wird sich jedoch auszahlen, je nachdem, wie groß diese Gruppe von Personen ist. Das hängt ganz von der Art der Software ab, die Sie entwickeln.

Wenn Sie der Meinung sind, dass es eine ausreichend große Minderheit gibt, die zum Kauf Ihrer Software gedrängt werden kann, dann sollten Sie eine Form des Schutzes einführen. Überlegen Sie, wie viel Geld Sie an dieser Minderheit verdienen können, im Vergleich zu der Zeit, die Sie für den Schutz aufwenden, oder dem Betrag, den Sie für eine Schutz-API/ein Schutz-Tool eines Drittanbieters ausgeben.

Wenn Sie eine eigene Lösung implementieren möchten, ist die Verwendung von Public-Key-Kryptographie (im Gegensatz zu symmetrischen Algorithmen) ein guter Weg, um einfache Hacks zu verhindern. Sie könnten zum Beispiel Ihre Lizenz (Seriennummer oder Lizenzdatei) digital signieren. Die einzige Möglichkeit, dies zu umgehen, wäre dann, den Code zu dekompilieren, zu ändern und neu zu kompilieren (was Sie mit Techniken wie den in Simucals Antwort vorgeschlagenen erschweren könnten).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X