Wenn man darüber nachdenkt, gibt es verschiedene Arten der Verschleierung. Beginnen wir mit der Verschleierung des Quellcodes, was eine völlige Zeitverschwendung darstellt. es ist schwer genug zu verstehen ohne das! Konzentrieren wir uns stattdessen auf die Verschleierung des Lieferpakets und darauf, wie der Code an den Benutzer geliefert wird.
Kleinere Verschleierung
Es gibt eine geringfügige Verschleierung, um zu verhindern, dass der Gelegenheitsbenutzer seine Finger hineinsteckt und Dinge leicht zerbricht. Es hält den entschlossenen Hacker nicht fern, aber es ist wertvoll, um sicherzustellen, dass die Dinge, die Sie unterstützen sollen, das sind, was Sie tatsächlich geliefert haben. Das Schutzniveau, das für solche Dinge erforderlich ist, ist wirklich ziemlich niedrig; Das Lieferpaket muss lediglich nicht lesbar und bearbeitbar aussehen (ohne Spezialwerkzeuge), und das ist ziemlich gut genug.
Die Javascript-Minimierung ist ein Beispiel dafür, obwohl sie nicht als solche vermarktet wird. Niemand, der bei klarem Verstand ist, möchte eine minimierte JS-Datei lesen und bearbeiten, auch wenn dies technisch durchaus möglich ist, wenn Sie entschlossen / hartnäckig genug sind.
Ähnliches gilt für die Bereitstellung von Java-Anwendungen. Das bloße Packen des Codes in eine ausführbare JAR wird die meisten Dummheiten aufhalten, obwohl es die ganze Kraft eines höflichen "Please Keep Off The Grass" -Schilds in einem Stadtpark hat.
Selbst bei der Bereitstellung von C ++ - Code reicht es aus, die unnötigen Symbole aus der ausführbaren Datei zu entfernen, um als geringfügige Verschleierung zu gelten. Der Schlüssel ist, dass es umständlich ist , das Ergebnis als Benutzer zu lesen, aber kein Problem, es als Computer auszuführen.
Hauptverschleierung
Eine große Verschleierung besteht darin, den entschlossenen und sachkundigen Benutzer fernzuhalten. Es ist auch ein total verlorenes Spiel; Wenn ein Computer es ausführen kann, kann eine Person es auseinander nehmen und herausfinden, was es tut. Das Beste, was Sie bekommen könnten, wäre, das Programm dazu zu bringen, sich kontinuierlich zu entschlüsseln und das, was es zu einem Zeitpunkt tut, in eine völlig andere Sache umzuwandeln, die es zu einem anderen Zeitpunkt tut. Das Erstellen eines solchen Dings wäre ziemlich schwierig und würde einen wirklich guten Hacker immer noch nicht davon abhalten (obwohl sie am Ende wirklich ziemlich böse auf Sie wären, wenn der Aufwand erforderlich wäre, um all diesen selbstmodifizierenden Code zu entschlüsseln).
Es ist viel besser, in anderen Lösungen zu denken. Sie können beispielsweise die „Kronjuwelen“ des Codes auf Servern behalten, die Sie steuern, und nur Serviceanrufe zulassen, wodurch der Client zu einem im Wesentlichen kostenlosen Werbegeschenk wird, das ein Front-End für die wertvollen Teile darstellt. Oder Sie gehen den vertraglicheren / rechtlicheren Weg und übergeben ausführbare Dateien nur an Organisationen, die sich formell damit einverstanden erklären, nicht in Ihrem Code herumzustöbern oder Sie zu entschädigen, wenn sie dies tun (das wäre also eine Art NDA). Ziel wäre es, einen starken Anreiz für den Hacker zu schaffen, nicht zu hacken, und für die Benutzer, den Code von Hackern fernzuhalten, die nicht an die Vereinbarung gebunden sind.
Sie dürfen jedoch nicht davon ausgehen, dass Ihr Code niemals geknackt werden kann. Mit der Virtualisierung kann jeder Programmstatus einer Ausführung untersucht und verfolgt werden, und alles, was versucht, dies zu verhindern (z. B. die Verfolgung der Uhr zu einer externen Zeitquelle), verursacht mit größerer Wahrscheinlichkeit Probleme für legitime Benutzer als für Hacker. (In der Geschichte von DRM erfahren Sie, wie selbst sehr entschlossene Herausgeber von Informationen ihre Systeme nicht mehr schützen können, wenn der Code in den Händen ihrer Gegner liegt.) Es ist viel besser, sich darauf zu konzentrieren, legitime Benutzer tatsächlich glücklich zu machen. Die Verluste durch gelegentliche Risse sind nichts im Vergleich zu dem zusätzlichen Geld, das durch die ordnungsgemäße Zufriedenheit der Kunden eingebracht wird.