Bienvenidos de nuevo a otra lección.
Si recuerdas antes, extrajimos el script usando EXE a AUT y vimos que había algún código incrustado
dentro del propio script.
Así que ahora en esta lección, te voy a mostrar cómo dejar que el programa se ejecute en la memoria y luego dejar que este script
se expanda y se descomprima en la memoria.
Y luego vamos a volcar utilizando otro programa.
Así que con el fin de dejar que esta cosa se ejecute y se expanda y se desempaquete en la memoria, tenemos que utilizar un depurador.
Así que el depurador que vamos a utilizar es x32dbg aquí abajo.
Así que hay x64 y x32.
Así que como este programa es de 32 bits ejecutamos x32dbg.
Así que una vez que x32dbg se ha iniciado, necesitamos hacer algunos ajustes primero.
Haga clic en Opciones, Preferencias y aquí desmarque Punto de interrupción del sistema y TLS Callbacks.
Queremos que vaya directamente al punto de interrupción de entrada.
Así que haga clic en Guardar y luego aquí podemos abrir el malware en sí.
Así que ahora estamos haciendo un análisis dinámico.
Así que vaya al escritorio que contiene la carpeta de su malware.
Seleccione Todos los archivos y abra la muestra,
muestra. y haga clic en Abrir.
Así que ahora vamos a ejecutarlo.
Así que hacemos clic aquí en Ejecutar.
Pero antes de ejecutar, observe que esto ya está en el punto de entrada.
Este es el punto de entrada.
Ahora, desde nuestro análisis usando Ghidra, sabemos que hay un IsDebuggerPresent siendo llamado.
Así que tenemos que poner un breakpoint para este IsDebuggerPresent.
De acuerdo.
Así que desde aquí vimos que la dirección virtual de este
IsDebuggerPresent es este 403B7A, y la dirección base es 00400000.
Pero si miras nuestro x32dbg, la dirección
base puede no ser la misma.
Así que vamos a hacer clic en Mapa de Memoria y nos damos cuenta de que nuestra dirección base es diferente.
Es 00121000 en lugar de 00400000.
Esto ocurrió debido a algo llamado ASLR.
ASLR es una medida de seguridad para aleatorizar la dirección
base cuando el programa se está ejecutando.
Así que para convertir esto en la dirección correcta donde IsDebuggerPresent se carga en memoria, tenemos que
hacer algunos cálculos.
Así que desde aquí sabemos que el desplazamiento es 3B7A, así que todo lo que tenemos que hacer
es tomar 3B7A y luego desde aquí añadir el 3B7A a la dirección base de 00121000.
Eso nos dará 001213B7A.
001213B7A.
Así que todo lo que tenemos que hacer es ir a esa dirección.
Así que haga clic derecho y luego
Ir a, Ir a la expresión.
Y aquí pones 001213B7A, y luego haces clic en Aceptar.
Y eso nos llevará directamente al IsDebuggerPresent, como puedes ver.
Así que queremos poner un punto de interrupción aquí.
Así que hacemos clic derecho sobre esto y luego Breakpoint, Toggle y el punto de interrupción se establece.
Así que ahora cuando se ejecuta, se detendrá en el punto de interrupción.
Y ahora vemos que el valor de EAX es este.
Así que vamos a correr, paso sobre esto.
Así que hacemos clic en esto para pasar por encima.
Cuando pasamos por encima, el resultado de esta llamada a la API se almacena en el valor del registro EAX.
Así que ahora vemos es uno, lo que significa que se detecta depurador.
Así que queremos modificar esto a cero.
Así que haga clic derecho sobre esto, Modificar Valor, ponerlo a cero y haga clic en Aceptar.
Así que cero significa que IsDebuggerPresent es falso.
Eso significa que no detectó un depurador.
La siguiente instrucción va a comprobar si este EAX es cero o no.
Así que como hemos cambiado a cero, no va a saltar.
Va a ir recto.
JNE significa salto no igual.
Así que si EAX no es igual a cero, entonces va a saltar.
Pero como ya hemos modificado el registro para que sea cero, entonces no va a saltar.
Así que podemos probarlo pisando.
Y luego, cuando haces clic en esto, ves que no va a saltar.
Esta flecha de aquí está en gris.
De acuerdo.
Así que acabamos de derrotar a la comprobación IsDebuggerPresent.
Así que ahora lo siguiente es que queremos ir a la ubicación
donde se va a descomprimir el código que vimos en AutoIt script.
Para ello, debemos poner un punto de interrupción en VirtualAlloc.
Así que podemos poner un punto de interrupción por ir a la línea de comandos, escriba bp VirtualAlloc, VirtualAlloc y, a continuación,
pulse Intro.
Y vemos el punto de ruptura establecido.
Si vas a la pestaña Breakpoints, puedes ver todos los puntos de interrupción que están configurados.
Así que hemos establecido VirtualAlloc ahora.
Así que vamos a VirtualAlloc.
De acuerdo.
Sólo deja que llegue a VirtualAlloc.
Dale tiempo.
VirtualAlloc ahora es golpeado.
Sí.
Pulsa el punto de interrupción.
Por tanto, VirtualAlloc siempre es utilizado por el malware justo antes de desempaquetarse.
Su función es asignar memoria para que pueda desempaquetar lo que se supone que debe desempaquetar.
Así que ahora vamos a pasar, dejar que se ejecute el VirtualAlloc.
Ahora lo ejecutará saltando allí.
Y ahora se va a ejecutar.
De acuerdo.
Así que aquí es donde VirtualAlloc se va a ejecutar.
Así que vamos a pasar por encima hasta que llegue a la llamada.
Está empujando todos los parámetros a la pila en preparación para la llamada.
Bien, ahora paso y la dirección del remitente está aquí.
Así que esta es la dirección donde se ha asignado memoria.
Si necesita más información sobre VirtualAlloc y el valor de retorno, puede buscar VirtualAlloc en MSDN.
Google para MSDN VirtualAlloc.
Bien.
Pero ahora sólo queremos llegar a la dirección donde ha asignado memoria.
Así que haz clic con el botón derecho en EAX y Sigue en Volcado.
Y esta es la memoria asignada para el malware.
El malware ha asignado esta memoria en esta ubicación llamando a VirtualAlloc.
Así que ahora corremos de nuevo.
Y verás que llamará a VirtualAlloc una segunda vez.
Pero antes de ejecutarlo de nuevo, queremos ver cuáles son las configuraciones de permisos para este 006C0000.
Así que podemos ir a Memory Map y buscar esa ubicación.
Usted puede hacer clic derecho sobre esto y luego aquí Siga en el mapa de memoria y vemos esta ubicación.
El permiso se ha establecido como ERW, ejecutable, legible y escribible.
Bien, ahora podemos ejecutarlo una segunda vez para que
dispare el VirtualAlloc una vez más, y entonces damos un paso más.
Paso de nuevo.
Y ahora va a empujar nuevos parámetros a la pila en la preparación para llamar VirtualAlloc una segunda vez.
Así que pasamos por encima.
De acuerdo.
Ahora está a punto de llamar a este y ver la dirección de retorno.
De acuerdo.
Así que ha asignado algo más de espacio en este lugar.
Bien.
Así que la ubicación anterior estaba aquí.
La primera ubicación en 006C0000.
Así que tomamos nota.
Podemos abrir el Bloc de Notas y tomar nota de la primera dirección de memoria en la que el malware ha asignado
espacio en memoria para hacer algo.
Así que la primera dirección de memoria es 006C0000.
Ahora vamos a ver lo que va a asignar la siguiente dirección.
00C00000.
Así que la segunda ubicación es 00C00000.
Así que hay dos ubicaciones en la memoria.
De acuerdo.
Así que ahora podemos hacer clic derecho sobre esto y luego Seguir en Dump y ver.
Esta es otra ubicación en la memoria donde el malware ha asignado espacio para desempaquetar algo.
Y si vas al Mapa de Memoria, puedes ver los permisos.
Así que haga clic derecho sobre esto y Seguir en Mapa de Memoria.
Y podemos ver en esta ubicación en la memoria también se ha fijado a ser ERW, lo que significa ejecutable, legible y escribible.
Bien, con eso ya sabemos donde se va a desempaquetar, desempaquetar
el código dentro de la memoria.
Así que la próxima lección te voy a mostrar cómo extraer ese código de la propia memoria.
Así que antes de hacer eso, vamos a poner un punto de interrupción aquí, haga clic derecho, y luego vamos a establecer
un punto de interrupción de hardware, Hardware,
Ejecutar por aquí.
Así que cuando el malware se haya desempaquetado y esté a punto de ejecutarse, queremos que se rompa por
ahí.
Así que por eso estamos poniendo un punto de interrupción de hardware.
Y ejecutamos.
Así que ahora si vuelves a Breakpoints, verás que hemos establecido un punto de ruptura de hardware
en esta ubicación para que podamos romper siempre que el malware esté a punto de ejecutar el código aquí dentro.
Así que lo haré en la próxima
lección.
Te mostraré otra herramienta donde podemos volcar la memoria justo antes de que ejecute esto.
Así que nos vemos en la próxima lección.
Gracias por vernos.