2010-07-16 17 views
5

Ich möchte meine gesamte Anwendung komprimieren und verschlüsseln, möglicherweise mit Zip, 7z, Bz2, Tar oder einer beliebigen Komprimierungsmethode, und AES-128/256 als Verschlüsselungsalgorithmus für Sicherheitszwecke verwenden. Erstellen Sie dann eine Launcher-Anwendung, die die Ausführung der Anwendung und die Entschlüsselung des Archivs übernimmt.Ausführen einer Anwendung in einer Archivdatei ohne Extraktion

Ich habe schon eine Idee, wie man es erreichen, aber mit Referenzen/Bibliotheken nur:

  • Die Anwendung wird die Entschlüsselung der Datei mit #ZipLib, das Passwort in einem gespeichert werden könnte handhaben Secure

  • eine neue AppDomain erstellen und die ausführbare Datei aus dem Archiv ausführen ohne es zu extrahieren (nur die Bytecode Laden)

  • Die sekundäre AppDomain muss das Ereignis AssemblyResolve implementieren und immer dann, wenn sie eine Assembly laden muss; Es wird versuchen, diese Datei aus dem Archiv zu entschlüsseln.

Aber wie über die Dateien durch die Anwendung wie Bilder, eingebettete Datenbank (ex. SQLite), XMLs und andere externe Dateien benötigt? Gibt es einen anderen Weg, es zu tun?

+0

Ist es möglich, mehrere vorhandene Dateimanipulationsklassen unter System.IO zur Laufzeit wie File und FileStream zu ändern, um innerhalb des Archivs statt Pfad relativ zum Pfad des Launcher zu schauen? Dies ist möglicherweise mit Mono.Cecil möglich, aber das Problem ist, dass es Teil von mscorlib ist und möglicherweise bereits beim Erstellen neuer AppDomain geladen wird. – eSPiYa

Antwort

3

Dateien können alle zur Laufzeit geladen werden und müssen während der Entwurfszeit nicht geladen werden. Sie können einen Ressourcenmanager aufrufen und Bilder aus Ihren verschlüsselten Bereichen abrufen. Dies kann erreicht werden. Es wird jedoch einige Zeit benötigen. Es klingt für mich wie das, was Sie tun, ist gut im Konzept, aber fällt ein wenig kurz. Die einzige Möglichkeit, ein Programm auszuführen, besteht darin, dass es auf die eine oder andere Weise extrahiert wird. Wenn es Ihr Ziel ist, Ihre Informationen zu schützen, stellt Ihr Launcher Ihre Daten zur Verfügung. Durch die Verwendung von .NET an sich wird das offengelegt, was Sie gerade tun (.NET Reflector usw.). Wenn es Ihr Ziel ist, es schwierig zu machen, dann genügt ein Launcher.

Denken Sie daran, alles kann gebrochen werden.

Verwandte Themen