Ofuscar aplicaciones creadas con dotfuscator (versión 2022 de Visaul Studio)
resumen
Las aplicaciones basadas en la serie de marcos .NET se crean en lo que se denomina un lenguaje intermedio común, por lo que se pueden leer en un formulario cercano al código fuente original mediante el uso de herramientas de desmontaje y similares. En esta sección se describe cómo ofuscar clases y nombres de métodos en formatos fácilmente ilegibles mediante la versión gratuita de Dotfuscator, la herramienta ofuscadora que viene con Visual Studio.
Se describe con Visual Studio 2022, pero también se puede usar en otras versiones de Dotfuscator.
Entorno operativo
- Visual Studio
-
- Visual Studio 2022
Acerca de Dotfuscator
Dotfuscator es una herramienta de ofuscación que hace que el código fuente sea difícil de leer cuando se desmonta para aplicaciones escritas con la familia de marcos .NET (en adelante, .NET). Dotfuscator viene con Visual Studio de forma gratuita y de pago.
La versión gratuita no está disponible a menos que muchas de sus características sean limitadas o se inicie Visual Studio, pero cualquiera puede usarla siempre que tenga instalado Visual Studio. La versión de pago tiene muchas características de ofuscación poderosas que no se encuentran en la versión gratuita, pero se ofrece a un precio que es difícil de pagar para el público en general.
Dotfuscator tiene diferentes características, precios y ediciones dependiendo de la versión, así que consulte la siguiente página de inicio para obtener más detalles.
Acerca del desmontaje
Mencioné anteriormente que las aplicaciones escritas en .NET pueden desmontar y leer fácilmente el código fuente original, pero lo que realmente está sucediendo es que si desmonta un archivo .exe (o archivo .dll) como se muestra en la siguiente figura, casi puede reproducir el código fuente original, como el espacio de nombres, el nombre de clase, el nombre del método, etc.
Tipos de programas que deben ofuscarse
Se aplica principalmente a los programas que se distribuyen y ejecutan a usuarios no especificados. Por ejemplo, aplicaciones de escritorio. Por el contrario, las aplicaciones web que tienen dificultades para acceder directamente a los archivos de programa son menos importantes para la ofuscación.
Esta vez, estamos viendo un proyecto en WPF, una aplicación de escritorio.
Instalación de Dotfuscator
Esta aplicación viene con Visual Studio 2022, pero no se incluye en la instalación estándar (en algunos Anteriores Visual Studios puede instalarse desde cero).
Para agregar un Dotfuscator: Inicie Visaul Studio y seleccione Obtener herramientas y características de Herramientas.
Seleccione "Componentes individuales" en la pestaña anterior, marque "Protección preventiva - Dotfuscator" en el grupo "Herramientas de código" y haga clic en el botón Instalar en la esquina inferior derecha. Al hacerlo, cierre la consola de Visual Studio.
Procedimiento de ofuscación
Describe los pasos para hacer que estos nombres sean confusos y ofuscados.
Cree una aplicación en Visual Studio, genere .exe archivo y, a continuación, haga clic en el archivo . Cree un archivo dll. Hasta ahora, esto es lo mismo que crear una aplicación normal. La aplicación que cree debe estar destinada a las creadas en la compilación de la versión. (Porque normalmente no se publica en Debug).
Después de crear .exe o .dll, seleccione Herramientas en el menú de Visual Studio y, a continuación, elija Protección preventiva - Comunidad dotfuscator.
Se muestra la pantalla de registro, pero no es obligatorio, por lo que si es innecesario, haga clic en el botón cancelar tal como está.
Permanezca y haga clic en el botón Aceptar.
Dotfuscator comienza. La aplicación funciona por sí sola, por lo que puede ofuscar archivos que no son relevantes para el proyecto actualmente abierto. (En el caso de la versión gratuita de la propia aplicación, se supone que se ha iniciado Visual Studio). )
En este artículo, ofuscaré un proyecto de aplicación WPF de .NET 6.0 creado con valores predeterminados como ejemplo.
Seleccione "Entrada" de la lista de la izquierda y haga clic en el botón "+".
Seleccione el archivo de programa que desea ofuscar. Las aplicaciones escritas en .NET Framework a menudo han ofuscado .exe, pero en .NET y .NET Core, los programas a menudo se .dll entidades. Las aplicaciones NET WPF también tendrán entidades .dll, así que elija .dll.
Se agregará a la lista. Si consta de varias DLL, agregue más de una.
Después de agregar el archivo de destino, haga clic en el botón "Construir" de la barra de herramientas.
Se le preguntará dónde guardar el archivo de proyecto ofuscado, así que especifíquelo. La ubicación puede ser arbitraria, pero también puede ser la ubicación de salida de un programa ofuscado. Guarda su entrada y abrirá este archivo de proyecto de ofuscación si desea ofuscarlo nuevamente. La extensión es ". xml".
Si la compilación ha comenzado y se muestra "Compilación completada" en el mensaje a continuación, indica que se completó correctamente. La pantalla muestra el registro de compilación y una lista de clases y variables ofuscadas.
Seleccione "Resultado" en la lista de la izquierda para ver los detalles de cómo han cambiado los nombres de las clases y los métodos.
Los nombres de clase y los nombres de método en el árbol de la derecha, como "->", son los nombres después de la ofuscación. Al cambiar el nombre de la clase o el nombre del método a un nombre sin sentido como este, puede hacer que el contenido del código fuente sea difícil de leer incluso si está desmontado.
Los programas ofuscados se guardan en una carpeta llamada "Dotfuscated" en el lugar donde guardó el archivo de proyecto.
Map.xml es un archivo de resultados de ofuscación, por lo que puede eliminarlo de forma segura.
Dado que .NET 6.0 WPF no puede iniciarse solo con una DLL, copie "XXXX.exe" y "XXXX.runtimeconfig.json" generados en el momento de la salida de la compilación en la misma carpeta e inícielo. Si puede comenzar normalmente, no hay problema por el momento. Si no puede iniciarlo, es posible que le falten archivos o que esté creando un programa que se vuelva inconsistente debido a la ofuscación.
Si analiza el programa que realmente ha sido ofuscado, verá algunos rastros de ofuscación. La primera hoja de la figura a continuación es antes de la ofuscación, y la segunda es después de la ofuscación.
Tenga en cuenta que los nombres de clase definidos en las bibliotecas .NET no están sujetos a cambio de nombre porque existen como un marco.
Esta vez, ofusqué el proyecto predeterminado creado tal como está, por lo que creo que hay una imagen que casi no está ofuscada, pero creo que el efecto de la ofuscación se vuelve claro porque cuanto más grande sea el proyecto, más clases únicas aumentarán.
Además, aunque esta vez hemos incluido el procedimiento en la versión gratuita, la versión de pago permite una ofuscación más compleja y también evita el desmontaje en sí. Sin embargo, la ofuscación tiene varios efectos adversos y potencial para ocurrir, por lo que cuando se realiza la ofuscación, es necesario hacerla mientras se considera si funcionará correctamente desde el comienzo del diseño.
Excluir la ofuscación
Si tiene nombres de clase o propiedad que no desea ofuscar, puede excluirlos.
Mientras se carga el conjunto, seleccione Cambiar nombre > Excluir en el lado izquierdo de la pantalla. Dado que se muestra el contenido del ensamblaje, verificaré los que no quiero ofuscar.
Es posible excluir la ofuscación a nivel granular, pero creo que es más fácil ajustarla sobre una base de espacio de nombres.
Modo biblioteca
Cuando selecciona el conjunto de entrada, puede ver que "Modo de biblioteca" está marcado.
El "modo de biblioteca" es para adjuntar a archivos DLL a los que pueden llamar otros programas. Si se marca, las clases públicas y las propiedades llamadas por otros programas se excluyen de la ofuscación.
Sin embargo, en general, es raro exponer una biblioteca que se llama generativamente desde otros programas, y creo que a menudo se ofusca a aplicaciones que funcionan solas, por lo que está bien eliminar básicamente esta comprobación.
Ofuscación de .exe de un solo archivo (sin confirmar)
Las investigaciones sobre este elemento en Visual Studio 2022 no están confirmadas actualmente.
Probablemente será una ofuscación con MSBuild, pero lo estoy poniendo en espera debido a la falta de información en este momento.