Es scheint mir, dass Verschleierung eine Idee ist, die irgendwo in das "Sicherheit durch Dunkelheit" oder "falsches Schutzgefühl" -Lager fällt. Um geistiges Eigentum zu schützen, gibt es Copyright; Um zu verhindern, dass Sicherheitsprobleme gefunden werden, gibt es die Behebung dieser Probleme . Kurz gesagt, ich betrachte es als eine technische Lösung für ein soziales Problem. Die funktionieren fast nie.
Aber ich bin anscheinend der Einzige in unserem Entwickler-Team, der sich so fühlt, also liegt ich entweder falsch oder brauche nur überzeugende Argumente. Unser Produkt verwendet .NET, und ein Entwickler schlug .NET Reactor vor (was übrigens in diesem Artikel vorgeschlagen wurde SO Thread auch ).
.NET Reactor stoppt jegliches Dekompilieren vollständig, indem es eine reine .NET Assembly (geschrieben in C #, VB.NET, Delphi.NET, J #, MSIL ...) mit nativem Maschinencode mischt.
Sie werfen also alle Vorteile von Bytecode auf einmal weg?
Gibt es gute technische Vorteile für die Verschleierung?
Ich habe eine Frage gestellt, die Ihnen helfen könnte, einige der Probleme zu besprechen: sollte-ich-besorgt sein-über-obfuscating-my- Netzcode
Sie haben nach technischen Gründen gefragt, es handelt sich also nicht genau um eine Antwort auf die Frage. Aber ich denke, es ist eine gültige Klärung.
Wie Sie sagen, soll Verschleierung ein soziales Problem ansprechen. Und soziale (oder geschäftliche) Probleme haben im Gegensatz zu technischen nur selten eine vollständige Lösung. Es gibt nur Erfolg, das Problem anzugehen oder zu minimieren.
In diesem Fall wird die Verschleierung die Barrieren für jemanden erhöhen, der Ihren Code dekompiliert und stiehlt. Es wird von gelegentlichen Angriffen abgehalten und kann durch Trägheit dazu führen, dass Ihr geistiges Eigentum weniger wahrscheinlich gestohlen wird. Um eine langweilige Analogie zu machen, verhindert eine Wegfahrsperre nicht, dass Ihr Auto gestohlen wird, aber es macht es weniger wahrscheinlich.
Natürlich gibt es Kosten, Wartungsfreundlichkeit (möglicherweise) in der Leistung und vor allem, dass es für die Benutzer schwieriger wird, Fehlerberichte korrekt einzureichen.
Wie GateKiller sagte, wird die Verschleierung ein bestimmtes Team nicht daran hindern, sich zu dekompilieren, aber (und das hängt davon ab, was Ihr Produkt ist), wie bestimmt ein Team Sie wahrscheinlich angreift?
Das ist also keine technische Lösung für ein soziales Problem, es ist eine technische Entscheidung, die einer komplexen sozialen Struktur einen Einfluss hinzufügt.
Wenn ein großes Team von Programmierern wirklich an Ihrem Quellcode interessiert ist und das Zeit, Geld und Mühe hat, dann wären sie erfolgreich.
Verschleierung sollte daher Leute stoppen, die nicht die Zeit, das Geld oder die Anstrengung haben, um Ihre Quelle zu bekommen, Passanten von Ihnen könnten sie nennen.
Wenn Sie sich an die reine Verschleierung von verwaltetem Code halten, können Sie einiges an Assembly-Größe einsparen, und verschleierte Klassen- / Funktionsnamen (auf einzelne Buchstaben reduziert) bedeuten einen geringeren Speicherbedarf. Dies ist fast immer vernachlässigbar, hat aber Auswirkungen auf einige mobile / eingebettete Geräte (und wird häufig verwendet) (allerdings meistens in Java).
Ein möglicher technischer Vorteil besteht darin, dass in einigen Fällen eine Verschleierung kleinere ausführbare Dateien oder andere Artefakte erzeugen kann, z. Das Verdecken von Javascript führt zu kleineren Dateien (weil alle Variablen "a" und "b" anstelle von "descriptionalNameOne" heißen und alle Leerzeichen leer sind, usw.). Dies führt zu schnelleren Ladezeiten für die Webseiten, die verschleiertes JavaScript verwenden. Offensichtlich gilt dies (so viel) nicht in der .NET-Welt, aber es ist ein Beispiel für eine Situation, in der ein direkter technischer Nutzen besteht.
Obwohl es nicht mit .net zusammenhängt, würde ich eine Verschleierung in Javascript und möglicherweise in anderen Interpet-Sprachen in Betracht ziehen. Javascript profitiert gut von der Verschleierung, weil es die Bandbreite reduziert, die benötigt wird, und die Token, die der Parser lesen muss.
Aber das Verschleiern von kompiliertem Bytecode scheint mir nicht wirklich nützlich zu sein. Ich meine, was würdest du versuchen zu erreichen? Ich kann nur sehen, dass die Verschleierung in der Lizenzprüfung etwas nützlich ist, um zu vermeiden, dass sie zu leicht umgangen wird.
Der Hauptgrund für die Verwendung von Verschleierung ist der Schutz des geistigen Eigentums, wie Sie angegeben haben. Im Allgemeinen ist es für ein Unternehmen wesentlich kostengünstiger, ein Verschleierungsprodukt wie .NET Reactor zu kaufen, als es zu versuchen, Ihre Urheberrechte rechtlich durchzusetzen.
Die Verschleierung kann auch andere Vorteile bieten, wie zum Beispiel Leistungsverbesserungen und Reduzierung der Baugruppengröße. Dies wären die engineering Vorteile, nach denen Sie suchen.
Verwenden Sie eine Verschlüsselung, um Informationen auf dem Weg zu schützen.
Verwenden Sie die Verschleierung, um Informationen zu schützen, solange Ihr Programm sie noch enthält.
Tags und Links .net security obfuscation protection