🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónPor qué .NET y Java cambian el análisis
4 tareas · 38 min · Principiante
Hasta aquí, un ejecutable sin símbolos era un mapa de funciones con nombres inventados por la herramienta. Con los programas de .NET y de Java pasa otra cosa: el decompilador devuelve algo muy parecido al código que se escribió, con sus clases, sus métodos y sus textos. Eso acorta el trabajo de días a horas, pero no lo vuelve automático. En esta sala se aprende a reconocer en la ficha estática que una muestra es administrada, por qué se lee casi como texto y a qué mesa va cada una. La pasarela de Hilados Tausaquira retuvo tres adjuntos dirigidos a la planta de tintorería; nada se ejecuta: se lee su ficha y el reparto propuesto.
Objetivo de la sala
Hasta aquí, un ejecutable sin símbolos era un mapa de funciones con nombres inventados por la herramienta. Con los programas de .NET y de Java pasa otra cosa: el decompilador devuelve algo muy parecido al código que se escribió, con sus clases, sus métodos y sus textos. Eso acorta el trabajo de días a horas, pero no lo vuelve automático. En esta sala se aprende a reconocer en la ficha estática que una muestra es administrada, por qué se lee casi como texto y a qué mesa va cada una. La pasarela de Hilados Tausaquira retuvo tres adjuntos dirigidos a la planta de tintorería; nada se ejecuta: se lee su ficha y el reparto propuesto.Un programa nativo se compila directamente a instrucciones del procesador, y por el camino se pierden los nombres que puso quien lo escribió. Un programa de .NET o de Java se compila a un código intermedio: el CIL en .NET y el código de bytes en Java. Ese código no lo ejecuta el procesador tal cual; lo traduce el entorno de ejecución (el CLR en .NET, la máquina virtual en Java) en el momento de usarlo.
Para poder hacer esa traducción, el entorno necesita una descripción completa del programa: qué tipos hay, cómo se llaman sus métodos y campos, qué parámetros reciben y de qué otros componentes dependen. Esa descripción son los metadatos, y viajan dentro del archivo. El decompilador los aprovecha para reconstruir clases y métodos con sus nombres reales, y por eso la salida se parece tanto al original.
Que se lea casi como texto no significa que sea el original: comentarios y nombres de variables locales suelen perderse, y el autor pudo renombrarlo todo antes de compilar.
Responde para continuar
¿Por qué el decompilado de una muestra de .NET o de Java se parece tanto al código que se escribió?
Ver pista de ayuda
Piensa en qué necesita el entorno de ejecución para traducir el programa al usarlo.
Un ejecutable de .NET para Windows empieza igual que cualquier otro, con «MZ», y tiene la misma estructura PE. Lo que lo delata está en la ficha: una cabecera del entorno de ejecución y una tabla de importaciones casi vacía, con una sola función de mscoree.dll. Esa función es la que arranca el entorno; todo lo demás lo resuelve el entorno después, no el cargador del sistema.
Un nativo, en cambio, importa decenas de funciones de las bibliotecas del sistema, porque las llama directamente. Por eso la extensión del archivo no sirve para decidir cómo se lee: dos .exe pueden pedir trabajos muy distintos.
Responde para continuar
Abre el laboratorio y escribe el identificador de la muestra que, siendo un .exe de Windows, se puede leer como decompilado.
Ver pista de ayuda
Compara la columna de importaciones de los dos ejecutables.
El tercer adjunto no comparte esa ventaja: no tiene cabecera del entorno de ejecución y llama directamente a las bibliotecas del sistema. Para él no hay decompilado legible, sino listado y pseudocódigo aproximado, que es el material del módulo anterior y suele pedir días de especialista.
Decidir la cola el primer día ahorra el error más caro de este oficio: esperar de un nativo un decompilado que no va a llegar, o mandar a un especialista externo algo que se leía en la casa en una tarde.
Responde para continuar
Escribe el nombre del archivo que el reparto manda a la cola de desensamblado.
Ver pista de ayuda
Consulta la tabla del reparto y su columna de cola.
La comodidad de leer clases con nombre tiene una trampa: los nombres los eligió el autor. Una clase que se llama ActualizadorSeguro no es segura por llamarse así, y un método GuardarRegistro puede hacer cualquier otra cosa. El decompilado muestra qué hace el código; el nombre solo dice qué quería que pareciera.
Además, sigue siendo lectura de una muestra que no se ejecuta en el equipo de trabajo, y lo que se afirma sigue necesitando su evidencia, igual que con un nativo.
Responde para continuar
¿Qué sigue siendo cierto aunque el decompilado de una muestra se lea como el código original?
Ver pista de ayuda
Piensa en quién decidió cómo se llama cada clase.
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.