2010-07-16 18 views
5

Voglio comprimere e crittografare la mia intera applicazione, magari con Zip, 7z, Bz2, Tar, o qualsiasi metodo di compressione e utilizzando AES-128/256 come algoritmo di crittografia per motivi di sicurezza. Quindi creare un'applicazione di avvio che gestirà l'esecuzione dell'applicazione e la decrittografia dell'archivio.Esecuzione dell'applicazione all'interno di un file di archivio senza estrazione

Ho già un'idea su come raggiungerlo, ma con solo riferimenti/librerie:

  • L'applicazione consente di gestire la decrittazione del file utilizzando #ZipLib, la password potrebbe essere conservato all'interno di un SecureString

  • Creare un nuovo dominio di applicazione ed eseguire il file eseguibile dall'archivio senza estrarlo (basta caricare il bytecode)

  • L'AppDomain secondario deve implementare l'evento AssemblyResolve e ogni volta che è necessario caricare un assembly ; proverà a decifrare il file dall'interno dell'archivio.

Ma che dire dei file necessari per l'applicazione come immagini, database incorporato (ad esempio SQLite), XML e altri file esterni? C'è qualche altro modo per farlo?

+0

È possibile modificare diverse classi di manipolazione di file esistenti in System.IO in fase di runtime come File e FileStream per cercare all'interno dell'archivio anziché il percorso relativo al percorso del programma di avvio? Questo potrebbe essere possibile con Mono.Cecil ma il problema è che fa parte di mscorlib e potrebbe essere già caricato alla creazione del nuovo AppDomain. – eSPiYa

risposta

3

I file possono essere caricati durante il runtime e non richiedono il caricamento durante la fase di progettazione. È possibile aprire un gestore risorse e inserire immagini dalle aree crittografate. Questo può essere raggiunto. Tuttavia richiederà un po 'di tempo. Mi sembra che quello che stai facendo sia buono nel concetto, ma cade un po 'corto. L'unico modo per eseguire un programma è quello di essere estratto in un modo o nell'altro. Se il tuo obiettivo è proteggere i tuoi dati, il tuo programma di avvio esporrà i tuoi dati. Utilizzando .NET in sé è esposto ciò che stai facendo (.NET Reflector, ecc.). Se il tuo obiettivo è renderlo difficile, allora un launcher sarà sufficiente.

Basta ricordare, tutto può essere rotto.

Problemi correlati