Mit Dotfuscator erstellte Anwendungen verschleiern (Visaul Studio 2022 Version)
Zusammenfassung
Anwendungen, die auf der .NET-Reihe von Frameworks basieren, werden in einer so genannten gemeinsamen Zwischensprache erstellt, sodass sie mithilfe von Disassemblierungstools und dergleichen in einer Form gelesen werden können, die dem ursprünglichen Quellcode nahe kommt. In diesem Abschnitt wird beschrieben, wie Sie Klassen und Methodennamen mithilfe der kostenlosen Version von Dotfuscator, dem in Visual Studio enthaltenen Obfuscator-Tool, in leicht lesbare Formate verschleiern.
Es wird mit Visual Studio 2022 beschrieben, kann aber auch in anderen Versionen von Dotfuscator verwendet werden.
Betriebsumgebung
- Visual Studio
-
- Visual Studio 2022
Über Dotfuscator
Dotfuscator ist ein Verschleierungstool, das das Lesen von Quellcode beim Zerlegen für Anwendungen, die mit der .NET-Frameworkfamilie (im Folgenden als .NET bezeichnet) beschrieben wurden, schwierig macht. Dotfuscator wird mit Visual Studio kostenlos und gegen Gebühr geliefert.
Die kostenlose Version ist nicht verfügbar, es sei denn, viele ihrer Funktionen sind eingeschränkt oder Visual Studio wird gestartet, aber jeder kann sie verwenden, solange Visual Studio installiert ist. Die kostenpflichtige Version verfügt über viele leistungsstarke Verschleierungsfunktionen, die in der kostenlosen Version nicht zu finden sind, aber sie wird zu einem Preis angeboten, der für die breite Öffentlichkeit schwer zu leisten ist.
Dotfuscator hat je nach Version unterschiedliche Funktionen, Preise und Editionen, daher besuchen Sie bitte die folgende Homepage für Details.
Allgemeine Einführung: Assemblierung
Ich habe bereits erwähnt, dass in .NET geschriebene Anwendungen den ursprünglichen Quellcode leicht disassemblieren und lesen können, aber was tatsächlich passiert, ist, dass, wenn Sie eine .exe-Datei (oder .dll-Datei) disassemblieren, wie in der folgenden Abbildung gezeigt, Sie den ursprünglichen Quellcode fast reproduzieren können, z. B. Namespace, Klassenname, Methodenname usw.
Arten von Programmen, die verschleiert werden sollten
Es gilt hauptsächlich für Programme, die an nicht spezifizierte Benutzer verteilt und ausgeführt werden. Zum Beispiel Desktop-Anwendungen. Umgekehrt sind Webanwendungen, die Schwierigkeiten haben, direkt auf Programmdateien zuzugreifen, für die Verschleierung weniger wichtig.
Dieses Mal betrachten wir ein Projekt in WPF, eine Desktopanwendung.
Dotfuscator installieren
Diese Anwendung wird mit Visual Studio 2022 geliefert, ist jedoch nicht in der Standardinstallation enthalten (in einigen früheren Visual Studios kann sie von Grund auf neu installiert werden).
So fügen Sie einen Dotfuscator hinzu: Starten Sie Visaul Studio und wählen Sie Tools und Funktionen aus Tools abrufen.
Wählen Sie "Einzelne Komponenten" aus der Registerkarte oben, aktivieren Sie "Präventiver Schutz - Dotfuscator" in der Gruppe "Code-Tools" und klicken Sie auf die Schaltfläche Installieren in der unteren rechten Ecke. Schließen Sie dabei die Visual Studio-Konsole.
Verschleierungsverfahren
Beschreibt die Schritte, um diese Namen verwirrend und verschleiert zu machen.
Erstellen Sie eine Anwendung in Visual Studio, erstellen Sie .exe Datei, und klicken Sie dann auf . Erstellen Sie eine DLL-Datei. Bisher ist dies das gleiche wie das Erstellen einer regulären Anwendung. Die App, die Sie erstellen, sollte für die im Releasebuild erstellten Apps vorgesehen sein. (Weil Sie normalerweise nicht in Debug veröffentlichen.)
Nachdem Sie .exe oder .dll erstellt haben, wählen Sie im Visual Studio-Menü Extras aus, und wählen Sie dann Präventivschutz - Dotfuscator-Community aus.
Der Registrierungsbildschirm wird angezeigt, ist aber nicht erforderlich, wenn er also nicht erforderlich ist, klicken Sie auf die Schaltfläche Abbrechen, wie sie ist.
Bleiben Sie und klicken Sie auf die Schaltfläche OK.
Dotfuscator startet. Die Anwendung funktioniert von selbst, sodass Sie Dateien verschleiern können, die für das derzeit geöffnete Projekt nicht relevant sind. (Bei der kostenlosen Version der Anwendung selbst wird davon ausgegangen, dass Visual Studio gestartet wird.) )
In diesem Artikel verschleiere ich ein .NET 6.0 WPF-Anwendungsprojekt, das mit Standardwerten als Beispiel erstellt wurde.
Wählen Sie "Eingabe" aus der Liste auf der linken Seite und klicken Sie auf die Schaltfläche "+".
Wählen Sie die Programmdatei aus, die Sie verschleiern möchten. In .NET Framework geschriebene Anwendungen haben oft .exe verschleiert, aber in .NET und .NET Core sind Programme oft .dll Entitäten. NET WPF-Anwendungen verfügen ebenfalls über .dll Entitäten, wählen Sie daher .dll aus.
Es wird der Liste hinzugefügt. Wenn es aus mehreren DLLs besteht, fügen Sie mehr als eine hinzu.
Nachdem Sie die Zieldatei hinzugefügt haben, klicken Sie in der Symbolleiste auf die Schaltfläche "Erstellen".
Sie werden gefragt, wo die verschleierte Projektdatei gespeichert werden soll, also geben Sie sie an. Der Speicherort kann beliebig sein, aber es kann auch der Ausgabeort eines verschleierten Programms sein. Es speichert Ihre Eingaben und öffnet diese Verschleierungsprojektdatei, wenn Sie sie erneut verschleiern möchten. Die Erweiterung ist ". xml".
Wenn der Build gestartet wurde und "Build abgeschlossen" in der folgenden Meldung angezeigt wird, zeigt dies den erfolgreichen Abschluss an. Auf dem Bildschirm werden das Buildprotokoll und eine Liste der verschleierten Klassen und Variablen angezeigt.
Wählen Sie "Ergebnis" aus der Liste auf der linken Seite, um Details darüber zu sehen, wie sich die Klassen- und Methodennamen geändert haben.
Klassennamen und Methodennamen in der Struktur auf der rechten Seite, z. B. "->", sind die Namen nach der Verschleierung. Indem Sie den Klassennamen oder Methodennamen in einen bedeutungslosen Namen wie diesen ändern, können Sie den Inhalt des Quellcodes selbst dann schwer lesbar machen, wenn er disassembliert ist.
Verschleierte Programme werden in einem Ordner namens "Dotfuscated" an dem Ort gespeichert, an dem Sie die Projektdatei gespeichert haben.
Map.xml ist eine Verschleierungsergebnisdatei, sodass Sie sie sicher löschen können.
Da .NET 6.0 WPF nicht allein von einer DLL gestartet werden kann, kopieren Sie "XXXX.exe" und "XXXX.runtimeconfig.json", die zum Zeitpunkt der Buildausgabe generiert wurden, in denselben Ordner und starten Sie sie. Wenn Sie normal starten können, gibt es vorerst kein Problem. Wenn Sie es nicht starten können, fehlen möglicherweise Dateien oder Sie erstellen ein Programm, das aufgrund von Verschleierung inkonsistent wird.
Wenn Sie das Programm analysieren, das tatsächlich verschleiert wurde, werden Sie einige Spuren der Verschleierung sehen. Das erste Blatt der folgenden Abbildung ist vor der Verschleierung und das zweite ist nach der Verschleierung.
Beachten Sie, dass Klassennamen, die in .NET-Bibliotheken definiert sind, nicht umbenannt werden können, da sie als Framework vorliegen.
Diesmal habe ich das Standardprojekt verschleiert, das so erstellt wurde, wie es ist, also denke ich, dass es ein Bild gibt, das fast nicht verschleiert ist, aber ich denke, dass der Effekt der Verschleierung klar wird, denn je größer das Projekt ist, desto mehr einzigartige Klassen werden zunehmen.
Obwohl wir das Verfahren diesmal in die kostenlose Version aufgenommen haben, ermöglicht die kostenpflichtige Version eine komplexere Verschleierung und verhindert auch die Demontage selbst. Die Verschleierung hat jedoch verschiedene nachteilige Auswirkungen und kann auftreten, so dass es bei der Verschleierung notwendig ist, sie zu machen, während man überlegt, ob sie von Anfang an richtig funktioniert.
Verschleierung ausschließen
Wenn Sie Klassen- oder Eigenschaftsnamen haben, die Sie nicht verschleiern möchten, können Sie sie ausschließen.
Wählen Sie während des Ladens der Assembly auf der linken Seite des Bildschirms Umbenennen > Ausschließen aus. Da der Inhalt der Assembly angezeigt wird, werde ich diejenigen überprüfen, die ich nicht verschleiern möchte.
Es ist möglich, die Verschleierung auf granularer Ebene auszuschließen, aber ich denke, es ist einfacher, sie auf Namespace-Basis anzupassen.
Bibliotheksmodus
Wenn Sie die Eingabebaugruppe auswählen, sehen Sie, dass "Bibliotheksmodus" aktiviert ist.
"Bibliotheksmodus" soll an DLLs angehängt werden, die von anderen Programmen aufgerufen werden können. Wenn diese Option aktiviert ist, werden öffentliche Klassen und Eigenschaften, die von anderen Programmen aufgerufen werden, von der Verschleierung ausgeschlossen.
Im Allgemeinen ist es jedoch selten, eine Bibliothek verfügbar zu machen, die generativ von anderen Programmen aufgerufen wird, und ich denke, dass sie oft für Anwendungen verschleiert wird, die alleine arbeiten, so dass es in Ordnung ist, diese Überprüfung grundsätzlich zu entfernen.
Verschleierung von Single-File-.exe (unbestätigt)
Untersuchungen zu diesem Element in Visual Studio 2022 sind derzeit nicht bestätigt.
Es wird wahrscheinlich eine Verschleierung mit MSBuild sein, aber ich lege es wegen des Mangels an Informationen im Moment auf Eis.