Está en la página 1de 27

Tema 8

Hacking Ético

Fundamentos del análisis


de malware
Índice
Esquema 3

Ideas clave 4
8.1. Introducción y objetivos 4
8.2. Tipos de malware 5
8.3. Conocimientos de base 7
© Universidad Internacional de La Rioja (UNIR)

8.4. Fundamentos de ingeniería inversa (reversing) 9


8.5. Introducción a la herramienta IDA 17
8.6. Lecciones magistrales 22
8.7. Referencias bibliográficas 23

A fondo 24

Test 25
© Universidad Internacional de La Rioja (UNIR)

Tema 8. Esquema
Esquema

Hacking Ético
3
Ideas clave

8.1. Introducción y objetivos

El análisis de malware proporciona la capacidad de analizar y comprender el


funcionamiento del código malicioso (troyanos, virus, rootkits, etc.) para evaluar los
daños causados y valorar las intenciones y capacidades del atacante. Conocer la
estructura, funcionamiento e interacción del malware aportará una valiosa
información, no solo para el diseño y desarrollo de contramedidas eficaces, sino que
también para ayudar a conocer el origen de un ataque y evaluar la capacidad de
detección de los sistemas de la organización y para tomar las acciones de respuesta
necesarias y adecuadas.

En este tema se presenta una serie de conocimientos previos necesarios para la


realización de análisis de malware, como una definición o taxonomía de los diferentes
tipos de malware y su caracterización, conocimientos de ingeniería inversa aplicados
y de funcionamiento interno del sistema operativo Windows, manteniendo la
perspectiva de que los autores de código malicioso aprovechan las vulnerabilidades
reales y potenciales para la construcción del malware:

 Comprender el encaje de la capacidad del análisis de malware dentro del marco


de la ciberseguridad.
 Estudiar los diferentes tipos en los que se clasifica el malware y los beneficios
obtenidos mediante su análisis.
 Explicar y aprender los fundamentos teóricos necesarios para la realización del
© Universidad Internacional de La Rioja (UNIR)

análisis de malware.
 Introducir al alumno en las técnicas de análisis estático de código de un malware,
en base a la aplicación de técnicas de ingeniería inversa (reversing).
 Conocer el funcionamiento y capacidades de las principales herramientas de
ingeniería inversa.

Hacking Ético
4
Tema 8. Ideas clave
8.2. Tipos de malware

Aunque normalmente asociemos la palabra malware a cualquier programa que


pueda poner en riesgo la seguridad del sistema, lo cierto es que existen otros que, sin
llegar a ser maliciosos, tampoco son deseables, porque pueden ser molestos. Debido
a ello, también encontraremos referencias identificando este tipo de software como
potencialmente peligroso o potencialmente no deseado.

Para su estudio, uno de los principales elementos que debemos conocer es cuál es
su intención. En función de ello, sabemos que tendrá que hacer uso de determinadas
características del sistema y tendremos un punto de partida para su caracterización.

Existen diversas taxonomías que analizan el malware desde esta perspectiva, las
siguientes son las categorías con mayor consenso (Microsoft, 2022; Misp, s. f.):

 Adware. Encargado de distribuir publicidad o elementos software comerciales no


deseados por el usuario.

 Backdoor. Funcionalidades del software legítimo no anunciadas (introducidas por


el fabricante o por un tercero), generalmente destinadas a permitir la ejecución
arbitraria de código por parte de un atacante.

 Joker. Malware que genera mensajes de alerta, pero no es dañino para los activos
de información.

 Ransomware. Cifra los archivos del equipo y pide un rescate al usuario víctima
© Universidad Internacional de La Rioja (UNIR)

para obtener la clave de descifrado.

 Spammer. Utiliza las capacidades de cómputo de la víctima para la distribución de


correos.

Hacking Ético
5
Tema 8. Ideas clave
 Spyware. Exfiltra información de la máquina víctima. Dentro de esta categoría
existen herramientas concretas, como los keyloggers, bankers, etc.

 Minero. El malware minero (los miners) utiliza los recursos de la máquina


infectada para extraer directamente beneficios económicos a través del minado
de criptomonedas.

 Troyano / RAT. Programa con capacidad para tomar el control de un equipo y ser
manejado de forma remota. Suele ocultar sus funcionalidades en software
legítimo (de ahí el sobrenombre de troyano).

 Virus. Modifica la estructura de los ejecutables del sistema para que incluyan su
funcionalidad maliciosa, de forma que sea más compleja su eliminación total.

 Gusano. Malware con capacidad de movimiento lateral automático.

 Downloader / Dropper / Stager. Son distintas formas de referirse al malware


encargado de descargar y ejecutar otras etapas del ataque. Por ejemplo, un
malware que se ejecuta detecta el tipo de sistema operativo que tenemos (o la
versión) y descarga la siguiente pieza de la infección adecuada.

 Rootkit / Bootkit. Malware que, ejecutándose en capas privilegiadas, suele ocultar


su existencia mediante la manipulación de las interacciones con el sistema
operativo. Cuando, además, gana persistencia en la secuencia de arranque del
equipo, también se le llama bootkit.

 Botnet. Red de equipos infectados, normalmente con capacidad para


© Universidad Internacional de La Rioja (UNIR)

autorreplicarse (infectar nuevos equipos de forma autónoma), destinada a ser


operada por un usuario con un fin concreto.

Hacking Ético
6
Tema 8. Ideas clave
 Killware. Término acuñado recientemente, asociado a los programas maliciosos
que pueden tener consecuencia sobre la vida humana, como el código dirigido a
sistemas críticos o contra sistemas sanitarios. Por su alcance, también se relaciona
con las APT.

Cuando se detectan patrones comunes entre diferentes muestras de malware, se


clasifican en familias.

8.3. Conocimientos de base

El análisis de malware debe partir de un profundo conocimiento de los sistemas


operativos en los que se ejecuta, así como del funcionamiento a bajo nivel de los
computadores.

Para que un malware pueda ser efectivo (pueda explotar correctamente


vulnerabilidades de entrada y pueda operar correctamente con los activos de
información deseados) debe estar programado para una plataforma concreta. Así,
al margen de la metodología de análisis, habrá poco en común entre una muestra
para plataformas móviles y una muestra para plataformas de escritorio.

Debido a que, dentro de la fragmentación, hay una clara preponderancia de los


ataques hacia plataformas Windows, nos centraremos en las especificidades de este
sistema operativo en arquitecturas x86/x64.

Ficheros ejecutables
© Universidad Internacional de La Rioja (UNIR)

Los archivos ejecutables en Windows, es decir, de forma nativa, como los .exe y .dll,
se conocen como ficheros PE, por cumplir con el formato portable executable. Al
ejecutarse, interactuarán tanto con los métodos que expondrán otros PE, como con
los métodos del sistema operativo.

Hacking Ético
7
Tema 8. Ideas clave
Cuando un archivo PE expone métodos, registra en una tabla interna el nombre de
dichos métodos y la dirección del archivo en la que se encuentran sus instrucciones.
Cuando necesita utilizar métodos de otros PE, utilizará dos estrategias diferentes:

 Enlazado estático: copia el contenido ejecutable de otro fichero PE dentro de sí


mismo para no tener que depender de archivos externos.

 Enlazado dinámico: en una tabla similar a la de los métodos exportados indica qué
métodos necesita utilizar y en qué ficheros se encuentran estos métodos.

Generalmente, un .exe importará funciones y un .dll las exportará, pero, a efectos


prácticos, ambos tienen la misma funcionalidad. Aunque los ficheros .dll no tengan
método principal que permita ejecutarlos con «un click», pueden contener toda la
lógica necesaria para que, con una simple llamada, desencadenen todo un sistema
malicioso.

Elementos del sistema operativo

Los principales elementos del sistema operativo son:

 API. Conjunto de funciones expuestas por el sistema operativo para interactuar


con el hardware, el sistema de archivos, etc. Observando el uso de las distintas API
de Windows podemos obtener rápidamente una idea de qué función tiene el
software que analizamos.

 Procesos. Un proceso es la instancia de un programa (un programa en ejecución)


enmarcado en un entorno que contiene un contexto de seguridad (codificado
© Universidad Internacional de La Rioja (UNIR)

como tokens de acceso), información de los recursos utilizados por el programa,


un espacio de direcciones, etc.

Hacking Ético
8
Tema 8. Ideas clave
 Registro. Windows cuenta con una estructura de datos de tipo clave-valor
conocida como registro. En este registro se encuentran variables relacionadas con
los procesos en ejecución, propiedades de la sesión del usuario o programas al
inicio. Es importante conocerlo, porque el malware puede utilizarlo para ganar
persistencia, interferir en procesos, etc.

 Servicios. Procesos cuyo ciclo de vida es similar al del sistema: se inician al inicio,
y se apagan al final de la sesión. Suelen tener un contexto de ejecución y seguridad
propio.

 Elementos de red. Sistema de interfaces de red y tecnologías relacionadas con la


red (directorio activo, Kerberos, SMB, etc.).

 Sistema de archivos. Gestión de archivos y volúmenes de almacenamiento


(tecnologías virtuales, distribuidas, etc.).

8.4. Fundamentos de ingeniería inversa


(reversing)

Análisis del fichero

Los ficheros PE tienen una estructura definida (la especificación desarrollada por
Microsoft) y servirá tanto para archivos .exe, como para .dll y otros. Estos ficheros
tienen la siguiente estructura:
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
9
Tema 8. Ideas clave
 Número mágico y cabeceras de formato MS-DOS.
 Número mágico de PE.
 Cabeceras COFF (descriptor de objeto que indica para qué arquitectura ha sido
diseñado y otros metadatos).
 Secciones de programa.

Las principales secciones de programa, relacionadas con las funciones e


instrucciones ejecutables, son:

 .edata. Funciones exportadas (utilizables por otros ejecutables).


 .idata. Funciones importadas.
 .text. Código ejecutable.

Análisis de código ejecutable

Los programas informáticos, una vez programados (escritos como simple texto en un
entorno de programación), son tratados de diferentes formas en función de cómo
deben ejecutarse después:

 Lenguajes interpretados. Desarrollados en lenguajes que, línea a línea, se irán


interpretando en tiempo de ejecución. Más allá de que el código fuente pueda
haber sufrido algún tipo de ofuscación, en este estado, el análisis suele ser sencillo.

 Lenguajes compilados. Se transforma el código a alto nivel (el código fuente) en


código objeto (el código que se ejecuta, normalmente código máquina). En este
proceso también se pueden producir algunas optimizaciones.
© Universidad Internacional de La Rioja (UNIR)

El análisis de un código compilado se realiza en varias fases:

Hacking Ético
10
Tema 8. Ideas clave
Desensamblado

El programa se encuentra codificado en código máquina (código binario), para una


arquitectura concreta (un tipo de procesador). Este código es prácticamente
imposible de interpretar. Para abordarlo se utilizan mnemónicos que asocian el
código binario con operaciones de lectura, escritura, y operación entre los datos; que
tienen sentido a alto nivel. El código obtenido se conoce como código ensamblador.

Decompilado

El código ensamblador guarda relación con el código a alto nivel. Por ejemplo, un
programa en código ensamblador, en el que se producen saltos hasta que se cumple
una condición, es idéntico a un bucle while o un bucle for, si la condición depende de
algún tipo de contador.

Aunque esta relación entre el ensamblador y el código fuente no siempre es


determinista, si este proceso de decompilado se puede realizar de forma exitosa,
facilitará enormemente el análisis y ayudará a entender mucho mejor cuál es el
objetivo del programa.

Esquema CPU

La unidad de almacenamiento base en una CPU es el registro:

 Registros genéricos de una arquitectura de 32 bits:


• EAX.
• EBX.
© Universidad Internacional de La Rioja (UNIR)

• ECX.
• EDX.

Hacking Ético
11
Tema 8. Ideas clave
 En las arquitecturas de 64 bits, los registros son idénticos, pero en lugar de
comenzar por E, comienzan por R (EAX es RAX, EBX es RBX, etc.). Cuando no se
quiere utilizar el registro entero, se puede dividir en función de los bits necesitados
para representar la información, como muestra la Tabla 1.

Tabla 1. Esquema de registros en función del número de bits. Fuente: elaboración propia.

Cuando hay que almacenar datos o se necesita operar con elementos de mayor
tamaño que los registros, se utiliza la memoria. A la hora de trabajar con la memoria,
debemos tener en cuenta que habrá principalmente tres secciones:

 Programa (sección .text): código del programa cargado en memoria para su


ejecución.
 Heap: zona de memoria reservada para almacenar variables globales.
 Stack: zona de memoria, estructurada como una pila FIFO, en la que crea el marco
de trabajo de las funciones y se almacenan variables locales.
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
12
Tema 8. Ideas clave
Tabla 2. Estructura de la memoria de un programa. Fuente: elaboración propia,

Para poder conocer en todo momento en qué instrucción se encuentra la ejecución,


así como la dirección del primer y el último elemento de la pila, existirán registros
adicionales:

 EIP: puntero a la dirección de memoria de la siguiente instrucción a ejecutar.


 ESP: puntero a la parte superior de la pila.
 EBP: puntero a la base del marco de trabajo actual en la pila.

Lenguaje ensamblador
© Universidad Internacional de La Rioja (UNIR)

El lenguaje ensamblador es el conjunto de operaciones básicas, codificadas como


mnemónicos (opcodes), que permiten realizar las tareas más básicas de un
computador. La conjugación de estas operaciones permitirá construir los lenguajes
a alto nivel que conocemos hoy en día.

Hacking Ético
13
Tema 8. Ideas clave
Estas operaciones funcionan, grosso modo, como:

OPERACIÓN <REGISTRO_DESTINO>, <REGISTRO_ORIGEN>

Las instrucciones aritméticas más básicas permiten la operación entre registros. Así,
por ejemplo, si quisiésemos sumarle 3 al valor contenido en el registro RAX, y restarle
el resultado al registro RBX, escribiríamos:

ADD rax, 3
SUB rbx, rax

Cuando queramos operar con memoria, podemos utilizar instrucciones que


trabajen con estas direcciones:

 Almacenar la dirección 0x00C0FFEE en eax: mov eax, 0x00C0FFEE

 Podemos obtener el contenido de una dirección de memoria utilizando corchetes.


Por ejemplo, tras la instrucción anterior, podríamos almacenar en ebx el contenido
en la posición de memoria 0x00C0FFEE ejecutando: MOV ebx, [eax]

 Si queremos guardar la dirección efectiva de un elemento, utilizaremos la


operación lea. Así, si quisiésemos almacenar en eax la dirección 0x00C0FFE0,
podríamos hacer: lea eax, [eax – 0x0E]

 Para almacenar o extraer un elemento de la pila, decrementando o


incrementando el valor del registro ESP, respectivamente: Push / pop <elemento>
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
14
Tema 8. Ideas clave
A medida que ejecutamos el programa, entrará en juego un nuevo elemento de la
CPU: los flags. Llamamos flags a una estructura de datos que almacena estados
especiales de la ejecución en una secuencia de bits. Cada posición de esta secuencia
tiene un significado propio que, en ocasiones, alterará el flujo de ejecución. Así,
trabajaremos principalmente con:

 Zero flag. Indica que una operación ha generado un valor cero.

 Carry flag. Indica que una operación ha sufrido desbordamiento, por ejemplo, el
resultado de la suma de dos números supera los 32 bits.

 Sign flag. La operación entre dos números ha generado un resultado negativo.

El uso de las flags es especialmente interesante para poder introducir modificaciones


del flujo de programa y bucles. Para modificar los flags utilizaremos, además de las
operaciones aritméticas, instrucciones de comparación de valores:

 Cmp <OP1>, <OP2> Equivalente a la operación de resta entre dos operandos, pero
sin guardar el resultado en ninguno de ellos. Exclusivamente modifica las flags
como si la operación se hubiese realizado

 Test <OP1>, <OP2> Equivalente a la operación binaria AND entre dos operandos,
pero sin guardar el resultado en ninguno de ellos. Exclusivamente modifica las
flags como si la operación se hubiese realizado.

Para ello, usaremos instrucciones de salto condicionado a otras direcciones del


programa, como las mostradas en la Tabla 3. Cuando se cumple la condición de la
© Universidad Internacional de La Rioja (UNIR)

instrucción concreta, la dirección de destino se introduce en el registro EIP.

Hacking Ético
15
Tema 8. Ideas clave
Tabla 3. Instrucciones de salto. Fuente: elaboración propia.

Por último, a diferencia de los saltos, que deberían utilizarse solo para establecer
condiciones de flujo, la llamada entre funciones (bloques definidos de instrucciones)
se produce utilizando la sentencia call. Cuando se ejecuta esta sentencia, además,
el programa se encarga de crear un marco de ejecución nuevo que existirá hasta que
la función termine, es decir, hasta que llegue a una orden tipo ret, que restaurará el
marco anterior.

Ingeniería inversa de otros elementos

En ocasiones, tendremos que enfrentarnos al análisis de protocolos de red, de uso de


sistema de archivos, de estructuras de ficheros, etc. La ingeniería inversa requiere de
un amplio conocimiento multidisciplinar para evitar estancamientos a la hora de
abordar nuevos aspectos o tecnologías del elemento que estemos analizando.
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
16
Tema 8. Ideas clave
8.5. Introducción a la herramienta IDA

La principal herramienta utilizada para el análisis de ejecutables es IDA, de la


compañía Hex-Rays. A nivel profesional y comercial se debe trabajar con IDA Pro,
pero podemos utilizar una versión gratuita que, aunque no tenga todas las
funcionalidades de pago, es más que suficiente para realizar un análisis básico.

Para comenzar, bastará con que desde el menú principal (Figura 1) carguemos el
binario e IDA tratará de obtener el mejor perfil para analizarlo, recordemos que no
todos los binarios ejecutables funcionan en todas las arquitecturas.

Una vez cargado, IDA comenzará a trabajar con una base de datos en la que almacena
qué partes del programa se corresponden con funciones, con bucles, con definición
de variables, etc.
© Universidad Internacional de La Rioja (UNIR)

Figura 1. Menú principal de IDA. Fuente: elaboración propia.

Completado el análisis del binario, mostrará una lista de las secciones del programa
que ha interpretado como funciones (de bloques que son llamados desde otros
puntos del programa), que podemos ver en la columna izquierda de la Figura 2.

Hacking Ético
17
Tema 8. Ideas clave
También debemos tener en cuenta que esto no siempre es correcto o, al menos, no
siempre tiene una correspondencia real con el código fuente. Lo que ha hecho IDA
en este punto es hacer inferencias: a partir de aquí debemos interpretar
correctamente estos resultados y, en última instancia, corregirlos (IDA permite
redefinir funciones).

Figura 2. Binario cargado en IDA. Fuente: elaboración propia.

Sobre las secciones del binario, IDA analiza cada una de las secciones. En la ventana
principal, interpreta principalmente el contenido de la sección .text (la sección de
código del programa).
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
18
Tema 8. Ideas clave
Figura 3. Representación de flujo. Fuente: elaboración propia.

Podremos ver el código desensamblado desde dos perspectivas distintas:


organizado como bloques de control de flujo (Figura 3) o como una lista de
instrucciones (Figura 4). Para cambiar entre las dos vistas pulsaremos la barra
espaciadora.
© Universidad Internacional de La Rioja (UNIR)

Figura 4. Representación de instrucciones. Fuente: elaboración propia.

Hacking Ético
19
Tema 8. Ideas clave
En ambas vistas se puede interpretar el control de flujo de la aplicación. Mientras
que en la primera es trivial (la representación del control de flujo es la base de la
visualización), en la segunda debemos fijarnos en el lateral izquierdo de las
instrucciones, donde aparecerán dibujadas flechas que representarán los saltos
condicionales e incondicionales (cuando la línea es continua o discontinua,
respectivamente) del programa.

También podemos ver el análisis realizado por IDA sobre otras secciones del
ejecutable, como las relacionadas con strings, funciones importadas (Figura 5) y
funciones exportadas.

Figura 5. Funciones importadas. Fuente: elaboración propia.

Una de las mejores estrategias que podemos desarrollar para inferir el


comportamiento de un programa es el uso de la herramienta «Referencias
cruzadas». Cuando consigamos identificar una función, por ejemplo, como muestra
la Figura 6, encontramos que el programa utiliza una función de consulta de DNS,
podemos buscar las referencias cruzadas (idesde qué parte del programa se llama a
esta función) e ir determinando poco a poco bloques funcionales. Para ello,
seleccionaremos la función y pulsaremos Ctrl+X.
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
20
Tema 8. Ideas clave
Figura 6. Referencias cruzadas. Fuente: elaboración propia.

Repitiendo el proceso varias veces iremos descubriendo super bloques lógicos, pero
para poder darles sentido debemos identificar cada funcionalidad que
comprendamos. Una forma de hacerlo es renombrar las funciones detectadas por
IDA.

Cuando IDA realiza su primer análisis, cada vez que detecta un bloque de
instrucciones que puede formar una función, le asigna un nombre similar al mostrado
en la Figura 7. Cuando consigamos comprender la funcionalidad de un bloque de
instrucciones, podemos sustituir este nombre e ir reconstruyendo la funcionalidad
del programa.
© Universidad Internacional de La Rioja (UNIR)

Figura 7. Llamada a función loc_1400079FA. Fuente: elaboración propia.

Hacking Ético
21
Tema 8. Ideas clave
Para renombrar una función, simplemente la activaremos clicando sobre ella con el
cursor del ratón y pulsando N en el teclado. Tras elegir el nuevo nombre (trataremos
de hacerlo como si estuviésemos programándolo), se actualizará la referencia en
todos los menús de IDA (Figura 8).

Figura 8. Función renombrada. Fuente: elaboración propia.

8.6. Lecciones magistrales

En este vídeo, titulado Uso básico de IDA, se realizará una introducción a las
principales características de análisis de la herramienta de ingeniería inversa IDA
PRO.
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
22
Tema 8. Ideas clave
8.7. Referencias bibliográficas

Microsoft. (2022, marzo 18). Malware names. https://docs.microsoft.com/en-


us/windows/security/threat-protection/intelligence/malware-naming

Misp. (s. f.). Malware classification. https://www.misp-


project.org/taxonomies.html#_malware_classification
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
23
Tema 8. Ideas clave
A fondo
Introduction to reverse engineering

Fare 9. (s. f.) Introduction to Reverse Engineering. Kode less.


https://k0deless.github.io/posts/RE-Introduction/

Tutorial de introducción a la ingeniería inversa, centrado en el uso de la herramienta


Ghidra y el depurador gdb.

Taller: begin.re

Harpaz, O. (s. f.) The workshop. Reverse Engineer for Beginners.


https://www.begin.re/the-workshop

Workshop de introducción a la ingeniería inversa en Windows, guiado a través de


ejemplos prácticos, utilizando la herramienta IDA.
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
24
Tema 8. A fondo
Test
1. Entre las capacidades de un ransomware, no se encuentra:
A. Cifrar los archivos.
B. Atacar terceras máquinas.
C. Pedir compensación económica.
D. Publicar datos de la organización.

2. El malware Ryuk es de tipo:


A. RAT.
B. Ransomware.
C. Botnet.
D. Scareware.

3. A la hora de analizar un sistema Windows, ¿qué aspecto estudiaremos que no está


presente en otros sistemas?
A. El sistema de archivos.
B. El registro.
C. Los procesos.
D. La red.

4. ¿Qué formato tienen los ejecutables de Windows?


A. EXE.
B. PE.
C. DLL.
D. ELF.
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
25
Tema 8. Test
5. Cuando interpretamos el código máquina mediante mnemónicos (opcodes),
utilizamos:
A. Un decompilador.
B. Un desensamblador.
C. Un reversador.
D. Un debugger.

6. Cuando un binario utiliza funciones de otro, llamándolo a través del sistema


operativo, decimos que está:
A. Imbricado.
B. Dinámicamente enlazado.
C. Estáticamente enlazado.
D. Bifurcado.

7. La diferencia entre CALL y JMP es:


A. JMP es condicional.
B. CALL crea un marco de ejecución y JMP no.
C. JMP crea un marco de ejecución y CALL no.
D. Solo se puede usar CALL si existe un RET.

8. Desde la versión gratuita de IDA, no podremos:


A. Desensamblar.
B. Decompilar.
C. Depurar.
D. Renombrar funciones.
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
26
Tema 8. Test
9. El puntero con el que el procesador referencia la instrucción que se está
ejecutando se llama:
A. ESP.
B. EBP.
C. EIP.
D. EAX.

10. ¿Cuáles de estas afirmaciones es falsa?


A. A la hora de analizar malware hay que centrarse en «reversear» los
ejecutables dejando de lado otros elementos o perderemos el foco.
B. Sin analizar el código del ejecutable, no llegaremos a comprender del todo
su funcionalidad.
C. Analizando las funciones importadas por el malware podemos hacernos una
idea de cuál va a ser su forma de operar.
D. Hay que analizar las funciones exportadas por el malware, por si está
actuando para dar soporte a otro componente.
© Universidad Internacional de La Rioja (UNIR)

Hacking Ético
27
Tema 8. Test

También podría gustarte