Pues eso… viendo el video de Filip Ekberg sobre los record en C# 9.0 (siempre hay que intentar aprender más) me gustó ver que mientras explicaba el código se veía el código desemsamblado (como lo genera el compilador de .NET) y es usando una herramienta online accesible mediante el enlace a https://sharplab.io/.
Si pones la dirección https://sharplab.io/ en el navegador, te mostrará una ventana con dos paneles.
Con las siguientes capturas te voy explicando un poco cómo configurar el «entorno» de trabajo.
En la figura 1 vemos el entorno ya configurado para usar los compiladores de Roslyn, para eso indicamos master (11 nov 2020) (es la que hay a día de hoy 13 de noviembre) que como ves con más detalle en la figura 2 nos permite seleccionar el «framework» a usar para compilar el código que pongamos en el panel izquierdo.
En la figura 3 puedes ver que se pueden usar los tres lenguajes que se incluyen en .NET, es decir: C#, Visual Basic y F#.
En el panel derecho se muestra el código decompilado, por defecto es en C# (sí, aunque en la izquierda lo escribas con otro lenguaje diferente a C#).
Pero como puedes ver en la figura 4 se puede mostrar de otras formas, eso sí, si quieres ver el código tal como lo trata el compilador, éste será en C#.
Las otras opciones son, entre otras,. el código ensamblado IL o incluso en ejecución (Run).
Ya es cuestión de ir probando cada una de esas opciones de la figura 4 para ir viendo cómo nos muestra el código.
En la figura 5 puedes ver código de Visual Basic (en el panel izquierdo) y el resultado de compilarlo y mostrarlo en C#.
En la figura 6 te muestro un trozo de código de C# 9.0 usando las instrucciones de nivel superior (top-level statements) y los tipos de registro (record).
Pero fíjate que he señalado una clase que (al menos así parece ser) es requerida para poder usar el código de tipo nivel superior, es decir, sin necesidad de crear el método Main, etc.), ya que si quitas ese código te dará error, tal como puedes ver en la figura 7.
Y si te gusta usar el tema oscuro, en la parte inferior derecha (junto a Theme) puedes seleccionar entre Auto, Light y Dark. A mí me ha mostrado el modio claro (Light) cuando lo inicié y ahí abajo me indicaba Auto tal como puedes ver en la figura 1.
Y esto es todo… es cuestión de ir practicando y probar más cosas de esta útil herramienta online.
Nos vemos.
Guillermo
Hola Guille, ¿?hay alguna forma de compilar un programa en C# que no pueda facilmente decompilarse?¿No puede hacerse cómo en c++? ¿No hay forma de proteger el código? Saludos
Hola Guille, ¿Hay alguna forma de compilar un programa en C# que no pueda facilmente decompilarse?¿No puede hacerse cómo en c++? ¿No hay forma de proteger el código? Saludos
Que yo sepa no la hay… antes existÃan utilidades para hacer difÃcil ver el código generado, pero no recuerdo el nombre, aunque una búsqueda en la red puede darte algunas opciones.
Ya me contarás si encuentras alguna forma de protegerlo.
Gracias.
Hace un par de años hice una pequeña aplicación, pero que era necesaria mucha confidencialidad, mi susto fue que un joven de apenas unos veinte, decompiló fácilmente el programa y quebró la seguridad de lo que ahà se manejaba. Parece que por ese tremendo detalle, de falta de seguridad en el código, habrÃa que buscar otras plataformas. Muchas gracias por contestar mi pregunta.
Hombre, lo que hay que intentar es no poner contraseñas en el código, como mucho un HASH que verifique esa clave y el usuario, ya que los HASH son más seguros que las contraseñas y nombre de usuario.
Aquà tienes un ejemplo de cómo crear un HASH a partir de una cadena (normalmente la combinación del nombre de usuario y la contraseña):
http://www.elguille.info/NET/WinFX/gsGenerarClaveSHA1/Default.aspx
Pensaba que tenÃa un ejemplo más genérico (que es el que yo uso habitualmente), veré de publicarlo en estos dÃas.
Actualizado el 19-nov-20202 a las 12:34 GNT+1:
Este es el artÃculo que acabo de publicar:
http://www.elguillemola.com/2020/11/generar-clave-sha1-con-el-nombre-y-password-del-usuario/
esto he encontrado:
https://www.preemptive.com/products/dotfuscator/overview