Laden...

ILDASM verhindern

Letzter Beitrag vor 17 Jahren 11 Posts 13.876 Views
Thema geschlossen
Information von herbivore vor 19 Jahren

Dies ist ein Thread, auf den aus der FAQ verwiesen wird. Bitte keine weitere Diskussion, sondern nur wichtige Ergänzungen und diese bitte knapp und präzise. Vielen Dank!

ILDASM verhindern

Wenn ich eine Assembly erstelle, dann kann man mit ILDASM mein gesamtes Programm als IL-Code sehen. So toll Open Source auch ist, ich möchte nicht, dass jeder meinen Quellcode einsehen kann.
Kann man das irgendwie verhindern? Das signieren der Datei schützt ja nur vor Veränderungen.

Es gibt Programme (obfuscators), die den IL Code so verschleiern, dass es schwierig wird, etwas sinnvolles daraus zu interpretieren. Ein obfuscator ist Dotfuscator, welches in der Community-Edition bei VS.NET2003 mitgeliefert wird. Für einen besseren obfuscator muss man allerdings oft tief in die Tasche greifen.

MfG VizOne

Danke, hab' auch noch ein weiteres Programm gefunden:
Spices
Leider sind diese Programme ziemlich teuer.
Mein eigentliches Problem liegt darin, dass ich ein Programm schreibe, dass die Konfiguration in einer Datei speichert. Dabei werden auch Passwörter gespeichert.
Damit die nicht im Klartext abgespeichert werden, kann man ja die Ausgabedatei verschlüsseln. Nur leider steht dann der Schlüssel, mit dem man die Datei verschlüsselt auch im Klartext in der Assembly, der Algorithmus ist in der Datei auch problemlos abzulesen.

Passwörter werden häufig mit Einweg-Funktionen verschlüsselt. Ergebnis ist ein Hashwert, der keine Rückschlüsse auf das verwendete Passwort zulässt (der Hashwert kann nicht dekodiert werden). Um das Passwort zu prüfen, wird das eingegebene Passwort kodiert und der resultierende Hashwert mit dem gespeicherten Hashwert verglichen. Dazu kommt meistens noch das "Salz", ein geheimer Wert, der angehängt wird, um Wörterbuch-Attacken zu verhindern.

Die Klasse in .Net heisst System.Security.Cryptography.PasswordDeriveBytes.

Gruss
Pulpapex

Danke, aber das wusste ich bereits, ich speichere die Passwörter nicht, um sie später abzufragen, sondern um sie später aus der Datei einzulesen, damit sie der User nicht mehr eingeben braucht aber da gibt es wohl keine sichere Methode, es sei denn, man lässt den User beim Start wirklich immer ein Passwort eingeben, mit dem man die Config-Datei verschlüsselt, is schließlich die Sicherheit des Users, da kann er auch ma die 2 Sekunden investieren, um das Passwort einzugeben g.

Original von NewYoda
Danke, hab' auch noch ein weiteres Programm gefunden:
Spices
Leider sind diese Programme ziemlich teuer.

Deshalb hatte ich auch mal vorgeschlagen das man so einen Obfuscator vielleicht mal hier in der Community entwickeln könnte. Kostenlos gibts ja sonst scheinbar nichts vernünftiges.

([bb]|[^b]{2})

Eine einigermaßen gut funktionierende kostenlose Variante habe ich jetzt gefunden:
Aspose.Obfuscator
Hier fehlt nur die Option ILDASM ganz zu verhindern, welche in Dotfuscator und Spikes angeboten wird (soll wohl durch das Hinzufügen von Meta-Tags in der Assembly funktionieren).

Hab mir den Aspose.Obfuscator mal angeschaut. Nunja, das übliche 🙂 Mit einer kleiner Assembly hats funktioniert, aber bei einer größeren Anwendung mit diversen Abhängigkeit läuft der Obfuscator auf Fehler. Auf das Freeware-Zeugs ist eben weniger verlass. Ich bin immer noch für selbstschreiben, aber allein hab ich da keinen Nerv drauf g

([bb]|[^b]{2})

Original von NewYoda
Wenn ich eine Assembly erstelle, dann kann man mit ILDASM mein gesamtes Programm als IL-Code sehen. So toll Open Source auch ist, ich möchte nicht, dass jeder meinen Quellcode einsehen kann.
Kann man das irgendwie verhindern? Das signieren der Datei schützt ja nur vor Veränderungen.

Seit Net 2.0 gibt es die SuppressIldasmAttribute Klasse, die ein disassemblieren eines Assembly verhindert!

[MSDN: SuppressIldasmAttribute-Klasse]
http://msdn2.microsoft.com/de-de/library/system.runtime.compilerservices.suppressildasmattribute(VS.80).aspx

Seit Net 2.0 gibt es die SuppressIldasmAttribute Klasse, die ein disassemblieren eines Assembly verhindert!

Aber verhindert das wirklich, das das Disassemblieren gar nicht mehr geht? Mit den Bordmitteln geht's nicht mehr, ja. Und wenn es gehen sollte, dann ist es definitiv verdammt schwer, aber gar nicht?

Also in der MSDN Dokumentation steht folgendes drin:

Wenden Sie das SuppressIldasmAttribute-Attribut auf eine Assembly oder ein Modul an, um ein Disassemblieren der Assembly oder des Moduls mit
>
zu verhindern.
Dieses Attribut verhindert nicht, dass eine Assembly mithilfe der Reflektion angezeigt wird.
Beachten Sie, dass das SuppressIldasmAttribute-Attribut die Anzeige von Header- und Metainformationen in
>
nicht blockiert.

Ich selber benutze den .NET Reactor und bin mit den Ergebnissen sehr zufrieden. Es ist auch nicht ganz so teuer wie die Konkurenz Produkte.

Thema geschlossen