Únete al equipo de Lobera

Consulta nuestra Política de Privacidad sobre el tratamiento de esta información.

Contacta con el equipo de Lobera

Consulta nuestra Política de Privacidad sobre el tratamiento de esta información.

Reversing / Ayuda de lectura

Conceptos de reversing.

LoberaCurso de reversing32 conceptos · Español
Consultar el curso

Definiciones y relación con las prácticas del curso.

32 conceptos

ABI y convención de llamada

La ABI define cómo se entienden los componentes binarios de una plataforma. La convención de llamada especifica dónde se pasan argumentos, dónde se devuelve un resultado y qué registros debe conservar una función. System V AMD64 y Windows x64 tienen reglas diferentes.

Ver en la lección 01

Ensamblador

Representación legible de instrucciones de una arquitectura. Una instrucción indica una operación y sus operandos; su significado depende de la arquitectura y del modo de ejecución. El ensamblador de un ejemplo no es una traducción literal, línea a línea, de su código C.

Ver en la lección 01

Desensamblado y decompilado

El desensamblado interpreta bytes como instrucciones. La decompilación reconstruye una representación de mayor nivel. El resultado de un decompilador facilita la lectura, pero sus tipos, nombres y estructuras de control pueden necesitar comprobación en las instrucciones.

Ver en la lección 01

Registro

Ubicación de almacenamiento que utiliza directamente el procesador. En x86-64, nombres como RAX, EAX y AL designan partes relacionadas de un registro. El tamaño de la parte utilizada afecta a la operación y a la interpretación del valor.

Ver en la lección 01

Flags

Bits de estado que ciertas instrucciones actualizan y que otras pueden consultar. Una comparación puede modificar flags sin conservar el resultado numérico de la resta. Los saltos condicionales utilizan combinaciones de esos bits para seleccionar una ruta.

Ver en la lección 03

Bloque básico

Secuencia de instrucciones con una entrada al inicio y una transferencia de control al final. Los bloques y sus conexiones forman el grafo de flujo de control de una función. Son útiles para reconocer condiciones, bucles y rutas de salida.

Ver en la lección 03

Referencia cruzada / xref

Relación entre una ubicación del programa y otra que utiliza o menciona. Las referencias permiten encontrar qué función utiliza una cadena, dónde se llama a una rutina o qué instrucciones acceden a un dato. Revisa qué tipo de referencia ha identificado la herramienta.

Ver en la lección 10

Breakpoint

Punto de parada del depurador. Permite inspeccionar registros y memoria en un estado concreto de la ejecución. La dirección donde se detiene el proceso y el motivo de parada deben comprobarse antes de interpretar una lectura como evidencia de ese punto.

Ver en la lección 07

Pila / stack

Región utilizada para organizar parte del estado de las llamadas, como datos locales y registros guardados. Su distribución depende del compilador y de la convención de llamada. La distancia entre dos variables locales no determina por sí sola el tamaño de su tipo.

Ver en la lección 07

Heap

Memoria gestionada mediante reservas dinámicas. En C son habituales interfaces como malloc y free. Al analizarla, sigue el puntero devuelto por la reserva, los accesos al objeto y su liberación. El tamaño pedido y los metadatos internos del asignador son conceptos distintos.

Ver en la lección 11

Puntero

Valor que representa una dirección según el modelo de la plataforma. Una operación puede copiar ese valor o acceder al contenido situado en la dirección. Distinguir ambas acciones es necesario para seguir argumentos, arrays y estructuras enlazadas.

Ver en la lección 11

Offset

Desplazamiento respecto a una referencia, como el inicio de una estructura, una sección o un módulo. Un offset necesita indicar su base y su unidad. Puede permanecer estable entre cargas del mismo archivo aunque cambie la dirección absoluta.

Ver en la lección 07

sizeof

Operador de C que obtiene el tamaño de un tipo u objeto, medido en bytes de C. Para una estructura incluye el relleno que exige su disposición. No mide la longitud de una cadena ni la distancia elegida entre variables locales independientes.

Ver en la lección 07

Alineación y padding

La alineación establece restricciones sobre la posición de un objeto. El compilador puede introducir bytes de relleno entre campos o al final de una estructura para respetarlas. Comprueba por separado la alineación del tipo y la organización de las variables dentro de una función.

Ver en la lección 07

Terminador nulo

Byte con valor cero que marca el final de una cadena de C. La capacidad del array que contiene la cadena incluye espacio para ese byte. Funciones como strlen recorren el texto hasta encontrarlo; no reciben la capacidad del destino.

Ver en la lección 05

Extensión de signo

Operación que conserva la interpretación con signo al ampliar el ancho de un entero. Se diferencia de rellenar con ceros, que conserva una interpretación sin signo. La elección de la instrucción ayuda a reconstruir tipos y conversiones.

Ver en la lección 06

Endianness

Orden de los bytes de un valor de varios bytes en memoria. x86 utiliza habitualmente little-endian: el byte menos significativo se almacena primero. Los protocolos de red pueden usar otro orden, por lo que conviene identificar las conversiones.

Ver en la lección 17

ELF

Formato utilizado por ejecutables, bibliotecas y otros objetos en sistemas como Linux. Sus cabeceras describen arquitectura, carga y otras propiedades. Las secciones organizan el archivo; los segmentos aportan información relevante para su representación en memoria.

Ver en la lección 15

PE

Formato de ejecutables y bibliotecas de Windows. Incluye cabeceras, secciones y directorios como importaciones, exportaciones y relocaciones. La posición de un dato en disco puede diferir de su ubicación relativa dentro de la imagen cargada.

Ver en la lección 16

RVA y dirección virtual

En un PE, una RVA es una dirección relativa a la base de la imagen cargada. La dirección virtual incorpora esa base. Una posición dentro del archivo es otra coordenada, que se relaciona con las anteriores mediante la información de sus secciones.

Ver en la lección 33

Importaciones y exportaciones

Las importaciones describen dependencias que un binario solicita a otros componentes. Las exportaciones identifican interfaces que ofrece a otros. También existen resoluciones dinámicas que no quedan declaradas de forma completa en esas tablas.

Ver en la lección 16

PLT y GOT

Estructuras asociadas al enlace dinámico en ELF. Ayudan a que el programa utilice funciones y referencias cuya dirección depende de la carga. Al observarlas, distingue el stub de llamada, la referencia resuelta y la implementación de biblioteca.

Ver en la lección 26

Syscall

Llamada que cruza la interfaz entre un proceso y el núcleo del sistema operativo. Una función de biblioteca puede preparar argumentos y gestionar errores alrededor de esa operación. Una llamada a libc y una syscall no tienen necesariamente la misma interfaz.

Ver en la lección 15

ESIL

Lenguaje intermedio utilizado por radare2 para representar y emular efectos de instrucciones. Permite observar cambios en registros y memoria según el estado que se configure. Una emulación depende de ese estado y no sustituye todas las propiedades de un proceso real.

Ver en la lección 15

Canario de pila

Valor que el compilador guarda y comprueba en ciertas funciones para advertir alteraciones del estado de la pila. Localizar la comprobación ayuda a reconocer la instrumentación. Su presencia complementa la gestión correcta de límites y tamaños.

Ver en la lección 25

DEP / NX

Protección que permite impedir la ejecución desde páginas marcadas como no ejecutables. Afecta a permisos de ejecución; no elimina todos los errores de acceso a memoria ni garantiza por sí sola la integridad del flujo de control.

Ver en la lección 23

ASLR y PIE

ASLR introduce variación en la ubicación de regiones del proceso. PIE permite cargar un ejecutable en bases distintas. Para comparar sesiones, registra la identidad del archivo, su base cargada y los offsets de las ubicaciones analizadas.

Ver en la lección 26

Análisis estático y dinámico

El análisis estático estudia un archivo y sus representaciones sin ejecutar su lógica. El dinámico observa una ejecución concreta, por ejemplo mediante un depurador. Las rutas posibles del código y la ruta observada en una sesión aportan información complementaria.

Ver en la lección 27

Loader

Componente que prepara o carga otra etapa. En malware puede obtener, descifrar o disponer un contenido para que continúe la ejecución. La palabra describe su función en la cadena; el comportamiento concreto debe reconstruirse en cada muestra.

Ver en la lección 31

Packing y unpacking

El packing transforma o encapsula un programa y añade lógica para disponer su contenido durante la ejecución. El análisis de unpacking busca reconstruir las etapas y las representaciones del código. Cada volcado debe conservar su contexto y procedencia.

Ver en la lección 29

MCP

Protocolo que permite a un agente acceder a herramientas de otros procesos. En el companion, radare2-mcp conecta las herramientas de Hermes con una sesión de radare2. El protocolo aporta la conexión; la interpretación de los resultados corresponde al modelo y al analista.

Ver en la lección 01

Skill y harness

La skill reúne instrucciones y referencias para una tarea. El harness organiza el entorno y el acceso a herramientas, sesiones y resultados. En este curso, coursectl prepara el laboratorio y el perfil con el que trabaja Hermes.

Ver en la lección 01

Código original: AGPLv3. Textos y diagramas originales: CC BY-SA 4.0. Reutilización y alcance ↗.

Lobera

Conceptos de reversing

Consulta una definición y continúa donde estabas.