Attributi personalizzati
Babel supporta l’offuscamento dichiarativo tramite gli attributi personalizzati System.Reflection.ObfuscationAttribute e System.Reflection.ObfuscateAssemblyAttribute forniti da .NET Framework e .NET.
L’attributo ObfuscateAssembly
System.Reflection.ObfuscateAssemblyAttribute è un attributo a livello di assembly che indica a Babel Obfuscator di usare le regole di offuscamento riservate agli assembly privati.
Un assembly privato è un assembly che non verrà usato come libreria: nessun altro componente software lo userà . Babel offusca completamente gli assembly privati, rinominandone tutti i simboli pubblici.
[assembly: ObfuscateAssembly(true)]L’argomento booleano del costruttore assemblyIsPrivate=true indica a Babel che l’assembly è usato nell’ambito di una sola applicazione e che l’interfaccia pubblica può essere rinominata senza rischi.
L’attributo Obfuscation
L’attributo System.Reflection.ObfuscationAttribute può essere applicato ai membri di un assembly, come tipi, metodi, eventi, proprietà e campi, per configurare l’azione da eseguire per una specifica funzionalità di offuscamento.
L’attributo Obfuscation ha le seguenti proprietà :
Feature
La proprietà Feature associa un valore stringa a una specifica funzionalità dell’offuscatore o a un elenco di funzionalità . Il valore predefinito della proprietà Feature è “all”.
Babel usa “all” per indicare l’insieme completo delle funzionalità disponibili e “default” per indicare la funzionalità di ridenominazione.
Per saperne di piĂą, consulta la tabella delle funzionalitĂ di offuscamento.
Exclude
Indica se la funzionalitĂ di offuscamento deve essere esclusa per il membro associato.
ApplyToMembers
Specifica se l’azione eseguita dall’offuscatore per il tipo associato deve essere applicata a tutti i suoi membri.
StripAfterObfuscation
Specifica se l’attributo deve essere rimosso dopo l’elaborazione.
Il seguente esempio di codice mostra come usare ObfuscationAttribute su un metodo per abilitare la cifratura del codice:
[Obfuscation(Feature="msil encryption", Exclude=false)]
public string DoSomething()
{Sintassi estesa delle funzionalitĂ
Babel Obfuscator supporta una sintassi estesa per le stringhe delle funzionalitĂ , che permette di impostare le proprietĂ di una funzionalitĂ come elenco di coppie chiave-valore dopo il nome di ciascuna funzionalitĂ .
[Obfuscation(Feature="msil encryption:source=opt;cache=true", Exclude=false)]#La sintassi estesa di Feature permette di impostare ObfuscationAttribute a livello di assembly per configurare le funzionalità dell’intero assembly:
Ridenominazione
[assembly: Obfuscation(Feature="renaming:flatten namespaces=ACME.Test.*", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:flattenNamespaces=ACME.Data.*", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:internalize=true;rename parameters=true", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:overloaded=true;unicode=false", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:name length=5;name prefix=Acme_", Exclude=false)]Obfuscation Agent
Disabilita l’Obfuscation Agent per i task Serializable types e Reflected enums.
[assembly: Obfuscation(Feature="agent:tasknamelist=Serializable types,Reflected enums", Exclude=true)]Cifratura dei valori
Cifra i valori e gli array dei metodi con un numero di istruzioni compreso tra 10 e 100.
[assembly: Obfuscation(Feature="value encryption:min instruction count=10; max instruction count=100", Exclude=false)]L’attributo Obfuscation da solo non basta ad attivare la funzionalità scelta. L’attributo funziona solo se la funzionalità è abilitata globalmente nella configurazione.
Altri esempi
Non offuscare il codice generato dal compilatore.
[assembly: Obfuscation(Feature="all:compilergenerated=true", Exclude=true)]