Hallo,
ich habe festgestellt dass der Dotfuscator Community - Visual Studio (Windows) (freie Version) im Prinzip
kaum etwas verschlüsselt. Sämtliche Klassen sind nach Anwendung bewärter Tool wie dotPeek etc. vollumfänglich sichtbar, lediglich einige
Codezeilen außerhalb der Klassen, welche diese Klassen benutzen, waren mittels kryptischer Strings umbenannt, die aber auch reletiv einfach nachzuvollziehen waren.
Gibt es irgendwelche Empfehlungen für Tools (idealerweise kostenfrei) mit denen man den gesamten Code relativ sicher (ich weiss, absolute Sicherheit gibt es nicht) scrambeln kann ?
Nein, das geht nicht - das ist die Natur der Sache von Runtimes wie .NET oder Java, die Zwischensprachen - im Falle von .NET ILCode - verwenden.
Egal welchen Obfuscator Du nutzt - alles kann zurück geholt werden.
Passt Dir das nicht, dann musst Du auf native Programmierung wie zB C
oder C++
(nicht C++.NET
) wechseln.
Oder Du schaust Dir .NET Native AOT an (was noch nicht stable ist).
Dieses Thema kommt mehrmals im Jahr hier im Forum zum Schein.
Verwende die Suchfunktion für mehr Infos - mit gleichem Ergebnis wie in meiner Antwort hier.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Könnte man z.B. eine dll in C/C++ programmieren und dann von einer .net Anwendung, die in c# programmiert wurde, verwenden lassen.
Falls ja, gäbe es da ein paar Tipps zur Vorgehensweise, insbesondere wie man die dll-Schnittstelle zum aufrufenden Programm gestalten müsste, dass das geht.
Zitat von cprogrammer
Könnte man z.B. eine dll in C/C++ programmieren und dann von einer .net Anwendung, die in c# programmiert wurde, verwenden lassen.
Wäre durchaus sinnvoll, wenn Du eine Minute recherchierst, nich? 😉
Google Suche nach C# call C++ DLL
Daraus erübrigt sich auch die zweite Frage, weil das Thema ist extrem gut dokumentiert.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich hatte mal irgendwo gelesen, dass man die gesamte dll gar nicht erst weitergeben müsste, sondern codeteile auslagern könnte, die dann erst während der Laufzeit durch einen "dll-Rahmen" vom Internet geladen werden, z.B. von einem eigenen server oder einer homepage. Quasi eine Art synamisches Linken übers Internet. Ist das machbar ?
Hab gegoogelt, aber nix mehr dazu gefunden, vielleicht hast du aber ein gutes Stichwort für mich 😉.
Du kannst natürlich jederzeit einen Server ins Internet stellen, der DLLs zum Download anbietet und deine Anwendung lädt sie herunter und lädt sie in die AppDomain.
Das geht, aber bringt dir auch nichts, denn wenn Du die DLL als Datei speicherst (was nicht notwendig aber sinnvoll ist, wenn sie nicht jedes Mal geladen werden soll), kann man sie genauso wieder dekompilieren. Und wenn sie nicht als Datei irgendwo liegt, gibt's immer noch einen Web-Server, der sie als Datei anbietet, man kann sie sich also einfach ziehen und dekompilieren. Ein Passwort-Schutz bringt auch nichts, denn deine Anwendung muss das Passwort ja kennen, dann dekompiliert man die lokal vorhandene Anwendung, sucht das Passwort und lädt sich die DLLs vom Server und so weiter.
Wie Abt schon angedeutet hat:
Es gibt keinen effektiven Schutz, es ist einfach nicht möglich, den Code 100% zu schützen.
Nicht mal mit C++ oder Native AOT geht das, es ist allerdings bedeutend schwieriger, noch nutzbare Informationen herauszuziehen.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Zitat von cprogrammer
Quasi eine Art synamisches Linken übers Internet.
Das ist Quatsch, weil Dir das nichts bringt ausser das Problem zu verschleiern.
Die DLL ist weiterhin physikalisch verfügbar und damit auslesbar. Aufwand ohne Nutzen.
Die einzige Möglichkeit eines Schutzes ist, dass die Anwendung nicht verteilt wird.
Ein Benefit von Web-Applikations über HTTP: der Nutzer hat niemals Zugriff auf die App.
Alles andere: nicht möglich.
Ist das machbar ?
Aber Fragen mit "ist xyz machbar" sind ohnehin Käse. Alles ist machbar, alles nur eine Frage des Aufwands respektive Budgets.
Ganz ehrlich: die aller meisten Leute überschätzen die Bedeutung ihres Quellcodes.
Ich seh Firmen, die Code von Open Source Projekten übernehmen und dann extra einen Obfuscator drüber laufen lassen, weil es ach so wichtig sei.
Kann man verstehen bei fundamentalen Algorithmen, den nativ umzusetzen.
Aber nicht bei 0815 Code.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Nochmal zurück zum Dotfuscator:
Was hast Du alles public und internal?
Ein Obfuscator kann natürlich nur das verändern, worüber er auch die volle Kontrolle hat.
Alles, was von außen erreichbar bleiben muss (z.B. public oder protected in public class) muss auch genau so erreichbar bleiben, wie Du es bei der Arbeit vorgesehen hast, entsprechend wird der Obfuscator nichts daran ändern.
Wenn Du also alles public hast, dann wird auch nichts an diesen Membern geändert.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.