Ich habe kürzlich DotNet-bezogene Materialien studiert und sscli ist wirklich eine gute Sache: P.
Während des Studiums habe ich das Wissen zusammengefasst und dieses kleine Werkzeug erstellt.
Das Schutzprinzip ähnelt dem chinesischen Remotesoft und Maxtocode. Das verschlüsselte Programm muss bei seiner Veröffentlichung auch von einer Laufzeitbibliothek begleitet werden.
Im Gegensatz zu diesen beiden handelt es sich bei der enthaltenen Laufzeitbibliothek jedoch nicht um eine reine native DLL, sondern um eine C++/CLI-Hybridassembly.
Das Tool hat Gestalt angenommen und das gesamte Kernel-Framework wurde fertiggestellt. Wird zum Verschlüsseln einer Probe verwendet und läuft normal.
Einige Aspekte gehen sogar über maxtocode hinaus.
1. Verlässt sich nicht auf die Programme ildasm und ilasm von Microsoft.
Sowohl die IL-Demontage als auch die IL-Assemblierung werden programmgesteuert implementiert.
Assemblys, die nativen Code enthalten, können verschlüsselt werden.
2. Anti-Dekompilierungstool, die mit Maxtocode verschlüsselte Assembly kann nicht direkt mit Reflector angezeigt werden. Verwenden Sie jedoch nach dem Ausführen des Programms Pedumper und nach dem Dumping können Sie Reflectotr verwenden, um die Struktur anzuzeigen. Natürlich können Sie den Code immer noch nicht sehen.
Die von dnguard verschlüsselte Assembly ist besser als ich erwartet hatte. Die verschlüsselte Assembly kann nicht mit dem Reflektor angezeigt werden, und die ausgegebene Assembly kann nicht mit dem Reflektor-Plug-in angezeigt werden.
Ich habe das Gefühl, dass Reflector immer noch etwas schwach ist. Ähnliche Software, Disa# und Xenocode fox, kann mit Maxtocode und Dnguard verschlüsselte Assemblys direkt öffnen und anzeigen.
Zu diesem Zweck habe ich versucht, der dnguard-verschlüsselten Assembly eine strukturelle Verschleierung hinzuzufügen. Dies hat zur Folge, dass es beim Anzeigen der Struktur in Disa# und Fox zu Verwirrung kommt, d. h. es werden möglicherweise Funktionen der Klasse A angezeigt in der Klasse B. Der Effekt ist nicht sehr gut, es gibt nur wenige Funktionen in jeder Klasse, die Probleme verursachen.
3. Die neuen Funktionen von Anti .Net 2.0 sind nicht sehr stark wie die von Maxtocode 3.13 (interne Version). Ich weiß nicht, ob die Stärke verbessert wurde Bei der Antwort in Jasons Blog scheint es dasselbe zu sein wie bei 3.13). Max. 3.12 kann durch Patchen nur einiger Bytes verwendet werden, und Reflektion kann nicht viel anders verwendet werden, und die Anzahl der zum Patchen erforderlichen Bytes ist sogar geringer als die von 3.12.
Hier gibt es mittlerweile eine bessere Lösung, die die Intensität deutlich steigern kann, ohne die Effizienz zu beeinträchtigen. Es kann jedoch Dumps nicht vollständig verhindern.
Es gibt auch eine relativ perfekte Anti-Dump-Lösung, die in Verbindung mit einer anderen Schutztechnologie implementiert werden muss.
Wir haben nicht vor, diesen Aspekt ausführlich zu diskutieren. Nachdem die DNGuard-Verschlüsselungs-Shell fertiggestellt ist, werden wir eine weitere Schutztechnologie starten und schließlich die beiden Schutzmaßnahmen kombinieren.
4. Verwenden Sie ildasm und ilasm, um die Assembly nach dem Anti-Dump wiederherzustellen. Zusätzlich zu den neuen Anti-Dump-Funktionen von Anti .net 2.0 fügt DNGuard auch Anti hinzu, einen Dumper, den ich in den frühen Tagen erstellt habe. Darüber hinaus wird die Funktion der C++/CLI-Hybridassembly auch verwendet, um Ildasm nach dem Dump zu verhindern. Dies ist jedoch nicht sehr stabil und eine kleine Baugruppe kann leicht repariert werden, um die IL-Baugruppe zu implementieren.
Es gibt noch viel zu tun. Der Verschlüsselungsalgorithmus ist noch nicht ausgearbeitet und der Schutz der Laufzeitbibliothek selbst ist noch nicht abgeschlossen. Ich habe festgestellt, dass es fertige Schutztools für rein native DLLs wie thmida gibt, was sehr gut ist. Die Laufzeitbibliothek von maxtocode verwendet diese Shell, aber ich konnte nie eine gute Methode für C++/CLI-DLLs finden . Es scheint, dass wir eine Schutzebene nur manuell hinzufügen können, und wir haben bereits mit dem Testen begonnen. Jetzt werden wir eine einfache Verschlüsselungs-Shell hinzufügen. Nachdem dies abgeschlossen ist, werden wir eine Demo von DNGuard darauf installieren.
Nachdem DNGuard die Assembly verschlüsselt hat, verwenden Sie Reflektor, um Folgendes anzuzeigen:

Verwenden Sie Reflektor, um den DNGuard-verschlüsselten Assembly-Dump anzuzeigen:

Die von Maxtocode verschlüsselte Assembly wird mit Reflector angezeigt:

Nachdem Sie die verschlüsselte Maxtocode-Assembly ausgegeben haben, können Sie sie mit Reflector anzeigen:
