Per iniziare
Il plugin “Babel Encrypt” è un componente incluso nell’edizione Ultimate di Babel Obfuscator. Chi ha l’edizione Enterprise deve invece acquistarlo separatamente. Il plugin è distribuito come file di assembly chiamato “BabelEncrypt.dll” e si integra con lo strumento da riga di comando di Babel. Per usarlo, specifica il percorso del file del plugin sulla riga di comando, come segue:
babel myapp.exe --plugin BabelEncrypt.dll --stringencryption customDove myapp.exe è l’assembly target che vuoi offuscare. L’argomento [custom] della cifratura delle stringhe serve a far usare a babel l’algoritmo fornito dal plugin al posto degli algoritmi di cifratura delle stringhe integrati.
Argomenti del plugin
Babel Encrypt Plugin accetta i seguenti argomenti facoltativi:
password <string>Imposta la password usata per cifrare i dati delle stringhe. La cifratura viene eseguita con l’algoritmo Triple DES. Se non è specificata, viene generata una password casuale.
iterations <number>Il numero di passaggi di cifratura da eseguire (valore predefinito: 1).
minStringLength <number>Se la lunghezza di una stringa è inferiore al valore specificato, la stringa non viene cifrata. Quando questa opzione è impostata su 0, vengono cifrate tutte le stringhe, indipendentemente dalla lunghezza: è il comportamento predefinito. Impostando un valore maggiore di 0 puoi escludere dalla cifratura le stringhe corte, il che può migliorare le prestazioni o portare altri vantaggi, a seconda del tuo caso d’uso. È importante notare che il valore impostato per la lunghezza minima delle stringhe incide direttamente sul livello di offuscamento applicato al tuo assembly.
minHashStringLength <number>Imposta la lunghezza minima delle stringhe da cifrare con l’algoritmo HASH (valore predefinito: 15).
useLocalVars <true|false>Indica se creare variabili locali per chiamare il metodo di decifratura (valore predefinito: false). Per impostazione predefinita questa opzione è impostata su “false”, cioè il metodo di decifratura non viene chiamato tramite variabili locali del metodo. Se invece è impostata su “true”, il metodo di decifratura viene chiamato tramite variabili locali del metodo. Questo può contribuire a rendere il codice ancora più intricato e ad aggiungere protezione all’assembly offuscato. L’uso di variabili locali del metodo durante la decifratura può rendere il codice più difficile da capire e da sottoporre a reverse engineering, perché il percorso di esecuzione diventa più complesso e meno prevedibile. Può però incidere anche sulle prestazioni dell’assembly offuscato, perché le variabili locali del metodo possono aumentare l’uso di memoria e il tempo di elaborazione necessari per eseguire il codice.
extraControlFlow <true|false>Questa opzione serve ad aumentare il livello di sicurezza e a impedire che le stringhe cifrate vengano facilmente decompilate o sottoposte a reverse engineering. Quando è abilitata, al metodo che contiene le stringhe cifrate viene applicato un ulteriore offuscamento del flusso di controllo, che rende il codice più intricato e più difficile da capire. L’impostazione predefinita è in genere “false”, ma può essere cambiata in base al livello di offuscamento e di protezione desiderato.
checkDeobfuscators <true|false>L’opzione che verifica la presenza di un deoffuscatore è una funzionalità di sicurezza di Babel Obfuscator che aiuta a impedire il reverse engineering del codice offuscato.
Indica se verificare la presenza di un deoffuscatore. Se viene rilevato un deoffuscatore, le stringhe non vengono decifrate e il programma fallisce senza segnalarlo (valore predefinito: false).
useCodeEncryption <true|false>Indica se usare la funzionalità di cifratura del codice di Babel Obfuscator per cifrare il codice dei metodi di decifratura delle stringhe. Questa opzione funziona solo quando la cifratura del codice è abilitata. (valore predefinito: false).
dictionary <path|expression>Il file di testo specificato contiene un elenco di stringhe o di espressioni regolari che stabiliscono quali stringhe lo strumento di offuscamento non deve cifrare. Il file va strutturato in modo che ogni riga rappresenti una stringa esatta o un modello di espressione regolare. Lo strumento di offuscamento usa queste informazioni per escludere dal processo di cifratura le stringhe elencate. Le espressioni regolari permettono di escludere le stringhe in modo più flessibile e completo, mentre le stringhe esatte garantiscono che determinate stringhe non vengano cifrate, indipendentemente dal modello più generale.
Esempi
Ecco alcuni esempi di utilizzo del plugin dalla riga di comando di Babel Obfuscator.
Protezione media
Abilita il rilevamento dei deoffuscatori, oltre a usare la configurazione predefinita del plugin.
babel myapp.exe --plugin BabelEncrypt.dll --stringencryption custom --argument checkDeobfuscators=trueProtezione completa
Questo esempio mostra come abilitare tutte le funzionalità del plugin, con un flusso di controllo aggiuntivo per il chiamante della decifratura e l’uso di variabili locali per chiamare il metodo di decifratura.
babel myapp.exe --plugin BabelEncrypt.dll --msilencryption --stringencryption custom --argument iterations=2 --argument extraControlFlow=true --argument useLocalVars=true --argument useCodeEncryption=trueUsare un dizionario esterno
Puoi usare un file di testo per impostare un dizionario delle parole da escludere. Ogni riga può essere la stringa esatta da escludere oppure un’espressione regolare.
babel myapp.exe --plugin BabelEncrypt.dll --stringencryption custom --argument dictionary=exclusionlist.txtContenuto del file di testo exclusionlist.txt:
.*@acme.com
No secret here to encryptConfigurare Babel Encrypt in DevOps
Se usi il pacchetto NuGet Babel.Obfuscator nel tuo ambiente DevOps o in un altro sistema di build che supporta i pacchetti NuGet, puoi integrare senza difficoltà il plugin Babel Encrypt nel tuo processo di build.
Per farlo, aggiungi le seguenti istruzioni MSBuild al tuo file di progetto:
<ItemGroup>
<BabelPlugin Include="$(BabelTaskDir)BabelEncrypt.dll" />
</ItemGroup>
<PropertyGroup>
<PluginsArguments>iterations=3</PluginsArguments>
</PropertyGroup>Con queste istruzioni, quando avvii una build nel tuo ambiente DevOps o nel tuo sistema di build viene richiamato il plugin Babel Encrypt, che aggiunge un’ulteriore cifratura all’offuscamento del codice fornito da Babel Obfuscator.
Configurare Babel Encrypt in Babel Desktop
Puoi configurare il plugin per un target dall’interfaccia di Babel Desktop anziché dalla riga di comando:
- Seleziona l’assembly sul canvas e apri le sue Impostazioni.
- In File e dipendenze, aggiungi il percorso di
BabelEncrypt.dlla Plugins. - Esegui Plugin del motore: Rileva nomi degli argomenti dalla tavolozza comandi. Babel legge gli argomenti dichiarati dal plugin e compila le chiavi di PluginsArguments, dove inserisci i loro valori.
- Imposta String Encryption su
custom, così il motore usa l’algoritmo del plugin al posto di quelli integrati. - Per usare
useCodeEncryption, abilita anche MSIL Encryption.
Il plugin viene eseguito nel processo locale del motore con i permessi del tuo account, quindi aggiungi solo DLL di plugin di cui ti fidi. Ogni impostazione si applica all’assembly selezionato; ripeti i passi per ogni target che richiede il plugin.