File map XML
Babel Obfuscator usa i file map XML per associare i nomi originali, non offuscati, di classi, metodi, proprietà, eventi e campi ai rispettivi nomi offuscati. Babel Obfuscator può generare questi file durante il processo di offuscamento e li salva nella stessa cartella dell’assembly offuscato.
I file map XML sono importanti perché ti permettono di:
- Decodificare gli stack trace delle eccezioni.
- Offuscare l’interfaccia pubblica di un assembly.
Decodificare lo stack trace
Quando in un’applicazione offuscata viene generata un’eccezione, lo stack trace contiene i nomi dei simboli offuscati, che non sono facili da leggere né da riconoscere. Con i file map XML, però, i nomi offuscati possono essere ricondotti ai nomi originali, così è più facile individuare l’origine dell’eccezione ed eseguire il debug del problema. Per questo i file map XML sono uno strumento prezioso per chi lavora con applicazioni offuscate.
Per saperne di più sulla decodifica degli stack trace, vedi Decodifica degli stack trace.
Offuscare l’interfaccia pubblica
Poiché gli assembly .NET referenziano spesso altri assembly, comprese le librerie di terze parti, è normale che i nomi di oggetti, metodi e proprietà di un assembly siano usati in un altro. Quando questi assembly vengono offuscati separatamente, il processo di offuscamento può cambiare i nomi originali degli oggetti e dei metodi visibili all’esterno di un assembly, e gli altri assembly che li referenziano smettono di funzionare correttamente. L’offuscamento dei membri di un assembly visibili all’esterno è spesso chiamato ridenominazione cross-assembly.
I file map XML permettono di mantenere le corrispondenze tra i nomi originali e i nomi offuscati tra più assembly. Quando vengono offuscati più assembly, i rispettivi file map XML possono essere combinati per preservare le relazioni originali tra i nomi. Così il codice offuscato funziona correttamente anche quando viene chiamato da altri assembly che non sono stati offuscati.
Configurare la generazione dei file map XML
Puoi configurare la generazione dei file map XML dalla riga di comando, da Babel Desktop o, negli ambienti di build, tramite il task Babel di MSBuild e il pacchetto NuGet di Babel Obfuscator.
Riga di comando
Lo strumento da riga di comando di Babel Obfuscator accetta l’opzione --mapout per abilitare la generazione dei file map XML. La sintassi di base per abilitare la generazione dei file map è la seguente:
babel MyApp.exe --mapout [output file]L’opzione può ricevere il percorso completo del file map XML generato. Se il percorso non è specificato, il file map XML prende il nome del file target originale con l’aggiunta dell’estensione “.map.xml” e viene salvato nella stessa cartella dell’assembly offuscato.
Per esempio, se l’assembly offuscato si chiama “MyApp.exe”, il file map XML si chiamerà “MyApp.exe.map.xml”.
Puoi anche specificare altre opzioni per personalizzare la generazione dei file map, per esempio un formato di codifica diverso per i nomi nel file map:
babel MyApp.exe --mapout encoding=base64I formati supportati sono ‘none’ e ‘base64’. Se il formato di codifica non è specificato, Babel sceglie il formato base64 quando l’opzione Unicode Normalization è abilitata.
Task Babel di MSBuild
Per abilitare la generazione dei file map XML nel task Babel di MSBuild, imposta su true l’attributo GenerateMapOutFile del task. Se vuoi, puoi specificare il percorso del file generato con l’attributo MapOutFile:
<Babel GenerateMapOutFile="true" MapOutFile="MyAssembly.map.xml" />Se nel tuo file di progetto usi il pacchetto NuGet di Babel Obfuscator, puoi aggiungere al file di progetto il seguente elemento XML per abilitare la generazione del file map XML dell’assembly target offuscato:
<PropertyGroup>
<GenerateMapOutFile>true</GenerateMapOutFile>
</PropertyGroup>Puoi cambiare il percorso del file map XML generato con la seguente proprietà:
<PropertyGroup>
<GenerateMapOutFile>true</GenerateMapOutFile>
<BabelMapOutFile>MyAssembly.map.xml</BabelMapOutFile>
</PropertyGroup>Babel Desktop
Per abilitare la generazione dei file map XML in Babel Desktop, seleziona l’assembly sul canvas del progetto e, nel gruppo Output & diagnostics del pannello delle proprietà, abilita GenerateMapOutFile. Se vuoi, imposta MapOutFile per scegliere dove viene scritto il file map, poi salva il progetto.
Dopo aver abilitato la generazione dei file map XML, Babel Obfuscator crea un file map per l’assembly di input che offusca, con lo stesso nome dell’assembly offuscato ma con estensione .map.xml. I file map vengono salvati nel percorso specificato da MapOutFile, oppure accanto all’assembly offuscato.