Offuscare le applicazioni create utilizzando Dotfuscator (versione Visaul Studio 2022)
sommario
Le applicazioni basate sulla serie di framework .NET vengono create in quello che viene chiamato un linguaggio intermedio comune, in modo che possano essere lette in una forma vicina al codice sorgente originale utilizzando strumenti di disassemblaggio e simili. In questa sezione viene descritto come offuscare classi e nomi di metodi in formati facilmente illeggibili utilizzando la versione gratuita di Dotfuscator, lo strumento obfuscator fornito con Visual Studio.
Viene descritto utilizzando Visual Studio 2022, ma può essere utilizzato anche in altre versioni di Dotfuscator.
Ambiente operativo
- Visual Studio
-
- Visual Studio 2022
Informazioni su Dotfuscator
Dotfuscator è uno strumento di offuscamento che rende difficile la lettura del codice sorgente quando viene disassemblato per applicazioni scritte con la famiglia di framework .NET (di seguito denominata .NET). Dotfuscator viene fornito con Visual Studio gratuitamente e a pagamento.
La versione gratuita non è disponibile a meno che molte delle sue funzionalità non siano limitate o Visual Studio sia avviato, ma chiunque può utilizzarla purché visual studio sia installato. La versione a pagamento ha molte potenti funzionalità di offuscamento che non si trovano nella versione gratuita, ma è offerta ad un prezzo difficile da permettersi per il grande pubblico.
Dotfuscator ha caratteristiche, prezzi ed edizioni diversi a seconda della versione, quindi fai riferimento alla seguente homepage per i dettagli.
Informazioni sullo smontaggio
Ho detto in precedenza che le applicazioni scritte in .NET possono facilmente disassemblare e leggere il codice sorgente originale, ma ciò che sta effettivamente accadendo è che se si disassembla un file .exe (o .dll file) come mostrato nella figura seguente, è possibile riprodurre quasi il codice sorgente originale, come spazio dei nomi, nome della classe, nome del metodo, ecc.
Tipi di programmi che dovrebbero essere offuscati
Si applica principalmente ai programmi distribuiti ed eseguiti a utenti non specificati. Ad esempio, applicazioni desktop. Al contrario, le applicazioni Web che hanno difficoltà ad accedere direttamente ai file di programma sono meno importanti per l'offuscamento.
Questa volta, stiamo esaminando un progetto in WPF, un'applicazione desktop.
Installazione di Dotfuscator
Questa applicazione viene fornita con Visual Studio 2022 ma non è inclusa nell'installazione standard (in alcuni precedenti Visual Studios potrebbe essere installata da zero).
Per aggiungere un Dotfuscator: Avvia Visaul Studio e seleziona Ottieni strumenti e funzionalità da Strumenti.
Seleziona "Singoli componenti" dalla scheda sopra, seleziona "Protezione preventiva - Dotfuscator" nel gruppo "Strumenti codice" e fai clic sul pulsante Installa nell'angolo in basso a destra. Quando si esegue questa operazione, chiudere la console di Visual Studio.
Procedura di offuscamento
Vengono descritti i passaggi per rendere questi nomi confusi e offuscati.
Creare un'applicazione in Visual Studio, compilare .exe file e quindi fare clic su . Creare un file dll. Finora, questo è lo stesso che creare un'applicazione normale. L'app che crei deve essere destinata a quelle create nella build Release. Perché di solito non si pubblica in Debug.
Dopo aver creato .exe o .dll, selezionare Strumenti dal menu di Visual Studio e quindi scegliere Protezione preventiva - Comunità Dotfuscator.
Viene visualizzata la schermata di registrazione, ma non è richiesta, quindi se non è necessaria, fare clic sul pulsante Annulla così com'è.
Rimanere e fare clic sul pulsante OK.
Viene avviato Dotfuscator. L'applicazione funziona da sola, quindi è possibile offuscare i file che non sono rilevanti per il progetto attualmente aperto. Nel caso della versione gratuita dell'applicazione stessa, si presume che Visual Studio sia stato avviato. )
In questo articolo verrà offuscato un progetto di applicazione WPF .NET 6.0 compilato con impostazioni predefinite come esempio.
Seleziona "Input" dall'elenco a sinistra e fai clic sul pulsante "+".
Selezionare il file di programma che si desidera offuscare. Le applicazioni scritte in .NET Framework hanno spesso offuscato .exe, ma in .NET e .NET Core i programmi sono spesso .dll entità. NET Le applicazioni WPF avranno anche entità .dll, pertanto scegliere .dll.
Verrà aggiunto all'elenco. Se è costituito da più DLL, aggiungerne più di una.
Dopo aver aggiunto il file di destinazione, fai clic sul pulsante "Crea" dalla barra degli strumenti.
Ti verrà chiesto dove salvare il file di progetto offuscato, quindi specificalo. La posizione può essere arbitraria, ma può anche essere la posizione di output di un programma offuscato. Salva il tuo input e aprirà questo file di progetto di offuscamento se vuoi offuscarlo di nuovo. L'estensione è ". xml".
Se la compilazione è stata avviata e nel messaggio seguente viene visualizzato "Compilazione completata", significa che il completamento è stato completato correttamente. La schermata visualizza il log di compilazione e un elenco di classi e variabili offuscate.
Seleziona "Risultato" dall'elenco a sinistra per vedere i dettagli di come sono cambiati i nomi delle classi e dei metodi.
I nomi delle classi e dei metodi nell'albero a destra, ad esempio "->", sono i nomi dopo l'offuscamento. Modificando il nome della classe o del metodo con un nome privo di significato come questo, è possibile rendere difficile la lettura del contenuto del codice sorgente anche se viene disassemblato.
I programmi offuscati vengono salvati in una cartella denominata "Dotfuscated" nel punto in cui è stato salvato il file di progetto.
Map.xml è un file di risultati di offuscamento, quindi puoi eliminarlo in modo sicuro.
Poiché .NET 6.0 WPF non può essere avviato da una sola DLL, copiare "XXXX.exe" e "XXXX.runtimeconfig.json" generati al momento dell'output di compilazione nella stessa cartella e avviarla. Se riesci a iniziare normalmente, non ci sono problemi per il momento. Se non riesci ad avviarlo, potresti perdere file o potresti creare un programma che diventa incoerente a causa dell'offuscamento.
Se analizzi il programma che è stato effettivamente offuscato, vedrai alcune tracce di offuscamento. Il primo foglio della figura seguente è prima dell'offuscamento e il secondo è dopo l'offuscamento.
Si noti che i nomi di classe definiti nelle librerie .NET non sono soggetti a ridenominazione perché esistono come framework.
Questa volta, ho offuscato il progetto predefinito creato così com'è, quindi penso che ci sia un'immagine che non è quasi offuscata, ma penso che l'effetto dell'offuscamento diventi chiaro perché più grande è il progetto, più aumenteranno le classi uniche.
Inoltre, sebbene questa volta abbiamo incluso la procedura nella versione gratuita, la versione a pagamento consente un offuscamento più complesso e impedisce anche lo smontaggio stesso. Tuttavia, l'offuscamento ha vari effetti avversi e il potenziale di verificarsi, quindi quando viene eseguito l'offuscamento, è necessario farlo mentre si considera se funzionerà correttamente dall'inizio del progetto.
Escludi offuscamento
Se si dispone di nomi di classi o proprietà che non si desidera offuscare, è possibile escluderli.
Durante il caricamento dell'assieme, selezionate Rinomina > Escludi (Exclude) dal lato sinistro dello schermo. Poiché vengono visualizzati i contenuti dell'assieme, controllerò quelli che non voglio offuscare.
È possibile escludere l'offuscamento a livello granulare, ma penso che sia più facile regolarlo su una base di namespace.
Modalità Libreria
Quando si seleziona l'assieme di input, è possibile vedere che "Modalità libreria" è selezionato.
La "modalità libreria" consiste nel collegarsi a DLL che possono essere chiamate da altri programmi. Se controllate, le classi pubbliche e le proprietà chiamate da altri programmi sono escluse dall'offuscamento.
Tuttavia, in generale, è raro esporre una libreria che viene chiamata generativamente da altri programmi, e penso che sia spesso offuscata da applicazioni che funzionano da sole, quindi va bene fondamentalmente rimuovere questo controllo.
Offuscamento di .exe a file singolo (non confermato)
Le indagini su questo elemento in Visual Studio 2022 non sono attualmente confermate.
Probabilmente sarà offuscamento con MSBuild, ma lo sto mettendo in attesa a causa della mancanza di informazioni al momento.