Skip to Content
Nuova versione 12 disponibile 🎉
ObfuscatorCifratura vincolata all'integrità

Cifratura vincolata all’integrità Ultimate

La cifratura vincolata all’integrità lega la cifratura delle stringhe e la cifratura del codice (MSIL) integrate in Babel al file dell’assembly esatto prodotto da Babel. Una stringa o un metodo cifrati in questo modo vengono decifrati correttamente solo quando l’applicazione viene eseguita da quel file non modificato; su qualsiasi altra copia, un binario modificato, un byte alterato con un editor esadecimale, un file unito con una build diversa, la decifratura fallisce, e le stringhe e i metodi protetti non vengono più ripristinati correttamente.

Senza questa funzionalità, la cifratura delle stringhe e del codice MSIL proteggono il contenuto di ciò che nascondono, ma il decifratore stesso funziona allo stesso modo indipendentemente dal file in cui finisce: un metodo o una stringa estratti dal tuo assembly e inseriti in un altro assembly vengono comunque decifrati correttamente lì. La cifratura vincolata all’integrità chiude questa lacuna legando la decifratura al file distribuito: spostare i dati protetti altrove basta a comprometterli, senza che tu debba scrivere o mantenere alcun codice di rilevamento.

La cifratura vincolata all’integrità è una protezione diversa dal rilevamento delle manomissioni. Il rilevamento delle manomissioni reagisce: verifica l’immagine caricata e ti permette di eseguire codice personalizzato (registrare l’evento, mostrare un messaggio, uscire) quando non corrisponde. La cifratura vincolata all’integrità non reagisce affatto: rende semplicemente inutilizzabili i dati cifrati fuori dal file in cui sono stati compilati. Le due protezioni si combinano bene: il rilevamento delle manomissioni per una risposta visibile, la cifratura vincolata all’integrità perché non resti nulla da recuperare anche senza una reazione.

Pannello delle proprietà del target in Babel Desktop con Cifratura stringhe, Cifratura MSIL e Cifratura vincolata all'integrità, tutte abilitate

La cifratura vincolata all’integrità si trova accanto a Cifratura stringhe e Cifratura MSIL nelle proprietà del target di Babel Desktop

Requisiti

  • La cifratura delle stringhe o la cifratura del codice devono già essere abilitate sul target. La cifratura vincolata all’integrità non ha nulla di proprio da proteggere: lega soltanto la decifratura di quella (o quelle) che hai attivato. Abilitarla senza nessuna delle due attiva non ha alcun effetto.
  • Solo assembly .NET Framework 4+ o .NET/Core desktop, cioè un’immagine PE caricabile e basata su file. Non è supportata con la pubblicazione a file singolo, il trimming o NativeAOT: queste modalità di pubblicazione non mantengono l’assembly come file semplice a cui Babel possa legarsi.
  • L’assembly non deve necessariamente avere un nome sicuro; se però ne ha già uno, Babel verifica anche la firma del nome sicuro come parte dello stesso controllo.
  • Oltre all’edizione Ultimate di Babel Obfuscator, è incluso anche nelle edizioni Server e Data Center di Babel Licensing, che comprendono Obfuscator Ultimate.

Abilitare la cifratura vincolata all’integrità

Riga di comando

babel myapp.exe --integrityencryption --stringencryption true

Task Babel di MSBuild

<PropertyGroup> <IntegrityEncryption>true</IntegrityEncryption> <StringEncryption>true</StringEncryption> </PropertyGroup> <Babel IntegrityEncryption="$(IntegrityEncryption)" StringEncryption="$(StringEncryption)" />

Babel Desktop

Attiva Cifratura vincolata all’integrità accanto a Cifratura delle stringhe o Cifratura MSIL nell’elenco delle opzioni del target. Babel Desktop segnala l’opzione se nessuna delle due cifrature è ancora attiva, perché non ci sarebbe nulla a cui legarsi.

L'opzione Cifratura vincolata all'integrità in Babel Desktop, con il testo di guida e il valore Abilitato

Il testo di guida dell’opzione ne ripete i requisiti e l’edizione

Esempio

Un target che cifra già un namespace sensibile con la cifratura MSIL, con la cifratura vincolata all’integrità aggiunta per legarlo:

<PropertyGroup> <MsilEncryption>true</MsilEncryption> <IntegrityEncryption>true</IntegrityEncryption> </PropertyGroup> <Babel MsilEncryption="$(MsilEncryption)" IntegrityEncryption="$(IntegrityEncryption)"> <XmlRules> <Rules> <Rule name="encrypt-licensing" feature="msil encryption" exclude="false"> <Target>Methods</Target> <Pattern>ACME.Licensing.*::*</Pattern> </Rule> </Rules> </XmlRules> </Babel>

La regola seleziona quali metodi protegge la cifratura MSIL: la cifratura vincolata all’integrità non modifica questa selezione, si limita a legare il risultato al file di output di questa build. I metodi vengono selezionati nello stesso modo con o senza di essa: un filtro a espressione regolare o carattere jolly nello stesso MsilEncryption, oppure una regola XML come quella sopra con feature="msil encryption". Senza un filtro né una regola corrispondente, MsilEncryption abilita la funzionalità ma non seleziona nulla, quindi anche la cifratura vincolata all’integrità non ha nulla da legare.

Da tenere presente

  • È additiva: attivarla non modifica quali stringhe o metodi vengono cifrati, solo il modo in cui la loro decifratura è legata al file distribuito.
  • Una build che fallisce già il limite di file singolo/trimming/AOT del rilevamento delle manomissioni salta anche la cifratura vincolata all’integrità per lo stesso motivo: entrambe richiedono l’assembly come file semplice e caricabile.
  • Ricompilare, firmare di nuovo o unire nuovamente l’assembly dopo l’offuscamento invalida il legame, così come invaliderebbe un hash del rilevamento delle manomissioni: applica la cifratura vincolata all’integrità come parte del passaggio di build di Babel che produce il file che distribuisci, non prima di un passaggio successivo che lo modifica.

Vedi anche

Last updated on