Aplicativos ofuscados criados usando dotfuscator (versão Visaul Studio 2022)

Página atualizada :
Data de criação de página :

resumo

Os aplicativos baseados na série .NET de frameworks são criados no que é chamado de linguagem intermediária comum, para que possam ser lidos em um formulário próximo ao código-fonte original usando ferramentas de desmontagem e afins. Esta seção descreve como ofuscar classes e nomes de métodos em formatos facilmente ilegívels usando a versão gratuita do Dotfuscator, a ferramenta ofuscadora que vem com o Visual Studio.

É descrito usando o Visual Studio 2022, mas também pode ser usado em outras versões do Dotfuscator.

Ambiente Operacional

Estúdio Visual
  • Visual Studio 2022

Sobre Dotfuscator

Dotfuscator é uma ferramenta de ofuscação que dificulta a leitura do código fonte quando desmontado para aplicativos escritos com a família de frameworks .NET (doravante referido como .NET). Dotfuscator vem com Visual Studio gratuitamente e por uma taxa.

A versão gratuita não está disponível a menos que muitos de seus recursos sejam limitados ou visual Studio seja iniciado, mas qualquer pessoa pode usá-la desde que tenha o Visual Studio instalado. A versão paga tem muitos recursos poderosos de ofuscação que não são encontrados na versão gratuita, mas é oferecido a um preço que é difícil para o público em geral pagar.

O Dotfuscator tem diferentes características, preços e edições, dependendo da versão, então consulte a seguinte página inicial para obter detalhes.

Sobre Desmontagem

Mencionei anteriormente que os aplicativos escritos em .NET podem facilmente desmontar e ler o código fonte original, mas o que está realmente acontecendo é que se você desmontar um arquivo .exe (ou .dll arquivo) como mostrado na figura a seguir, você pode quase reproduzir o código-fonte original, como espaço de nome, nome da classe, nome do método, etc.

Tipos de programas que devem ser ofuscados

Aplica-se principalmente a programas que são distribuídos e executados para usuários não especificados. Por exemplo, aplicativos de desktop. Por outro lado, aplicativos web que têm dificuldade em acessar arquivos do programa diretamente são menos importantes para ofuscar.

Desta vez, estamos olhando para um projeto no WPF, um aplicativo de desktop.

Instalação do Dotfuscator

Este aplicativo vem com o Visual Studio 2022, mas não está incluído na instalação padrão (em alguns estúdios visuais passados ele pode ser instalado do zero).

Para adicionar um Dotfuscator: Inicie o Visaul Studio e selecione Obter ferramentas e recursos de ferramentas.

Selecione "Componentes Individuais" na guia acima, marque "Proteção Preventiva - Dotfuscator" no grupo "Ferramentas de Código" e clique no botão Instalar no canto inferior direito. Ao fazer isso, feche o console Visual Studio.

Procedimento de ofuscação

Descreve os passos para tornar esses nomes confusos e ofuscados.

Crie um aplicativo no Visual Studio, construa .exe arquivo e clique no . Crie um arquivo dll. Até agora, isso é o mesmo que criar uma aplicação regular. O aplicativo que você cria deve ser destinado àqueles criados na compilação Liberar. (Porque você não costuma publicar em Debug.)

Depois de criar .exe ou .dll, selecione Ferramentas no menu Visual Studio e, em seguida, escolha Proteção Preventiva - Comunidade Dotfuscator.

A tela de registro é exibida, mas não é necessária, por isso, se for desnecessário, clique no botão cancelar como está.

Permaneça e clique no botão OK.

Dotfuscator começa. O aplicativo funciona por conta própria, para que você possa ofuscar arquivos que não são relevantes para o projeto atualmente aberto. (No caso da versão gratuita do próprio aplicativo, presume-se que o Visual Studio seja iniciado.) )

Neste artigo, vou ofuscar um projeto de aplicativo .NET 6.0 WPF construído com padrões como uma amostra.

Selecione "Entrada" na lista à esquerda e clique no botão "+".

Selecione o arquivo do programa que deseja ofuscar. Os aplicativos escritos no Framework .NET muitas vezes ofuscaram .exe, mas no .NET e no .NET Core, os programas são frequentemente .dll entidades. Os aplicativos NET WPF também terão entidades .dll, por isso escolha .dll.

Será adicionado à lista. Se for composto por vários DLLs, adicione mais de um.

Depois de adicionar o arquivo de destino, clique no botão "Construir" na barra de ferramentas.

Você será perguntado onde salvar o arquivo de projeto ofuscado, então especifique-o. A localização pode ser arbitrária, mas também pode ser o local de saída de um programa ofuscado. Ele salva sua entrada e abrirá este arquivo de projeto de ofuscação se você quiser ofuscá-lo novamente. A extensão é ". xml".

Se a compilação tiver sido iniciada e "Construir concluída" for exibida na mensagem abaixo, ela indicará uma conclusão bem sucedida. A tela exibe o registro de compilação e uma lista de classes e variáveis ofuscadas.

Selecione "Resultado" da lista à esquerda para ver detalhes de como os nomes da classe e do método foram alterados.

Nomes de classe e nomes de métodos na árvore à direita, como "->", são os nomes após a ofuscação. Ao alterar o nome da classe ou do método para um nome sem sentido como este, você pode tornar o conteúdo do código fonte difícil de ler mesmo que seja desmontado.

Programas ofuscados são salvos em uma pasta chamada "Dotfuscated" no local onde você salvou o arquivo do projeto.

Map.xml é um arquivo de resultado de ofuscação, para que você possa excluí-lo com segurança.

Como o WPF .NET 6.0 não pode ser iniciado apenas por um DLL, copie "XXXX.exe" e "XXXX.runtimeconfig.json" gerados no momento da saída de compilação para a mesma pasta e inicie-o. Se você pode começar normalmente, não há problema por enquanto. Se você não pode iniciá-lo, você pode estar perdendo arquivos ou você pode estar criando um programa que se torna inconsistente devido à ofuscação.

Se você analisar o programa que realmente foi ofuscado, você verá alguns traços de ofuscação. A primeira folha da figura abaixo é antes da ofuscação, e a segunda é após ofuscação.

Observe que os nomes de classe definidos nas bibliotecas .NET não estão sujeitos à renomeação porque existem como uma estrutura.

Desta vez, ofusco o projeto padrão criado como ele é, então acho que há uma imagem que quase não é ofuscada, mas acho que o efeito da ofuscação fica claro porque quanto maior o projeto, mais classes únicas vão aumentar.

Além disso, embora tenhamos incluído o procedimento na versão gratuita desta vez, a versão paga permite uma ofuscação mais complexa e também evita a própria desmontagem. No entanto, a ofuscação tem vários efeitos adversos e potencial para ocorrer, por isso, quando o ofuscante é realizado, é necessário fazê-lo considerando se funcionará corretamente desde o início do projeto.

Exclua a ofuscação

Se você tem nomes de classe ou propriedades que você não quer ofuscar, você pode excluí-los.

Enquanto o conjunto estiver carregado, selecione Renomear > Excluir do lado esquerdo da tela. Como o conteúdo da montagem é exibido, vou verificar os que não quero ofuscar.

É possível excluir a ofuscação a um nível granular, mas acho que é mais fácil ajustá-la em uma base de namespace.

Modo biblioteca

Ao selecionar o conjunto de entrada, você pode ver que "Modo biblioteca" é verificado.

"Modo biblioteca" é anexar a DLLs que podem ser chamados por outros programas. Se verificadas, as aulas públicas e propriedades convocadas por outros programas são excluídas da ofuscação.

No entanto, em geral, é raro expor uma biblioteca que é chamada de generativamente de outros programas, e eu acho que muitas vezes é ofuscada para aplicativos que funcionam sozinhos, então não há problema em basicamente remover essa verificação.

Ofuscação de .exe de arquivo único (não confirmado)

As investigações sobre este item no Visual Studio 2022 ainda não foram confirmadas.

Provavelmente será ofuscação com a MSBuild, mas estou colocando-o em espera por causa da falta de informação no momento.