Skip to Content
Nuova versione 12 disponibile 🎉
ObfuscatorCifratura del codiceCodice protetto da password

Codice protetto da password

In alcuni casi può essere preferibile mantenere il codice cifrato all’interno dell’assembly offuscato anziché memorizzarlo in file esterni. In questo caso l’accesso al codice cifrato è protetto da una password, il che riduce in modo significativo la quantità di informazioni necessarie per ricostruire il metodo, a parità di sicurezza. Senza la password la Babel Virtual Machine (BVM) non può ricostruire il metodo originale, e il codice cifrato resta inutilizzabile. Questo approccio offre un equilibrio tra sicurezza e prestazioni, perché il codice cifrato è memorizzato nell’assembly e vi si accede rapidamente quando serve.

Per definire quale codice cifrare con una password ti serve una regola XML che specifichi il metodo o il tipo da cifrare, il nome dell’origine (source) e la password usata. Ecco un esempio di regola di questo tipo:

<Rule name="encrypt algorithms" feature="msil encryption" exclude="false"> <Target>Methods</Target> <Pattern>ACME.Algorithms::*</Pattern> <Properties> <Source>algorithms</Source> <Password>mySecretPassword</Password> <Internal>true</Internal> </Properties> <Description>Encrypt code in the Algorithms class using a password.</Description> </Rule>

Nota che la regola contiene la proprietà Internal impostata su true, che indica a Babel di memorizzare il codice cifrato all’interno dell’assembly offuscato anziché in un file esterno.

Poiché il codice cifrato è memorizzato all’interno dell’assembly offuscato, non occorre definire il metodo GetSourceStream per recuperare il flusso cifrato. Devi invece dichiarare un altro metodo, che la BVM chiama per recuperare la password necessaria a decifrare ed eseguire il metodo.

[Obfuscation(Feature="msil encryption get password")] internal static string GetSourcePassword(string source)

In fase di esecuzione la BVM chiama GetSourcePassword con il nome dell’origine dei dati cifrati associata ai metodi cifrati (in questo caso “algorithms”). Il metodo GetSourcePassword deve restituire la password per decifrare il bytecode dell’origine dati richiesta. A quel punto la BVM può eseguire il metodo richiesto.

Anziché restituire una password fissa, l’hook può restituire un valore letto dalla licenza del cliente, così una funzionalità protetta si sblocca solo per gli utenti con licenza. Vedi Cifratura del codice legata alla licenza.

Last updated on