Ir al contenido principal

Desarrollo de Malware Básico en Windows (parte 1)

CTF con IDA

Buenas continuando los retos de reversing, ahora nos pasamos a IDA, ya que el siguiente reto se trata de un ejecutable para Windows, y con IDA me siento mas cómodo gracias al curso que hice hace un tiempo del maestro @RicardoNarvaja, el cual recomiendo 100% y que volveré hacer(cuando saque tiempo), para profundizar un poco más.

Bueno yendo al turrón, este reto no lo hemos descargado del mismo enlace del Github de los retos anteriores, así que abrimos nuestra máquina virtual Windows y cargamos el binario con IDA.Seguidamente abrimos la ventana de string (Shift+F12) buscando alguna interesante...

                         

Vemos la string que nos dice que "Your e-mail address is not valid", es la más interesante, por lo tanto nos vamos a esa cadena y vemos la parte de código donde está siendo llamada. Para ello, hacemos doble "click" sobre la cadena y vemos donde está siendo llamada.



Si hacemos doble "click" sobre el texto "DATA XREF: DialogFunc:loc_12D1346↑o" podemos ver la parte del código donde es llamada. Nosotros tras localizar dicha parte de código, solemos colorearla de color rojo, ya que NO QUEREMOS LLEGAR "debugueando".


Seguidamente, subimos hacia arriba y vemos cuando se salta a ese texto que queremos evitar, con la idea de no llegar allí. Llegamos a una parte de código, donde se lee el contenido de una ventana con la función GetDlgItemTextA().


La función GetDlgItemTextA(), de la cual, podemos extraer su funcionamiento e información de los parámetros que están siendo usado haciendo uso de la MSDN de Microsoft. Es una función que se utiliza para devolver el título o el texto asociado de un cuadro de dialogo.

Vemos en la documentación que para poder usar esa función,necesitamos indicarle con el parámetro nIDDlgItem el "handle" del cuadro de dialogo que contiene el texto. Con la herramienta WinDowse podemos de una manera visual, ver el valor del "handle" de cada ventana y así ver a cual ser refiere. (de ahí que en mis comentarios de IDA ya aparezcan)



En la parte de la comprobaciones del correo electrónico introducido el programa comprueba lo siguiente:


  1. Que el correo contenga una "@" , esto lo hace con la función strstr() que según la MSDN nos devuelve un puntero de una cadena de búsqueda, en otra cadena.En otras palabras, mira que exista porque justo debajo hay una comparación y si el puntero esta vacío salta al mensaje de "Your e-mail is not valid"
  2. Comprueba  que el correo introducido tenga un "." a través del método anterior.
  3. Compara que detrás del "."  exista algún carácter, es decir que no sea lo último carácter introducido.
  4. Mira que después del "@" no este el ".

                     

Esos son las comprobaciones que se ven en la imagen superior.

Luego vemos que hay una función que hace saltar al mensaje de error y tras poner un Breakpoint (F2) y ver el contenido de los registros, hemos visto que el programa lee el valor del serial introducido y cuenta el número de caracteres y lo compara con el valor en hexadecimal de 0x10 (16). Vamos, parecido a la función strlen() del ejemplo anterior pero a "manivela".



Vale, ya sabemos que el serial introducido tiene que tener 16 caracteres, si seguimos mas abajo en el grafo de IDA vemos que nos hacen unas cuantas restricciones más ... parecidas al CTF analizado con Radare2 en la entrada anterior.

1ª Comprobación
El primer dígito introducido tiene que ser igual al caracter "C", seguidamente lee el último valor del caracter del serial y la suma en hexadecimal de "C" (0x43) + UltimoCaracter = 0x9B --> UltimoCaracter = 0x9B-0x43 =0x58 -->  "X"



Ya tenemos 2 caracteres del serial.



Serial: C_______________X



2ª Comprobación

Coge el valor del 2 dígito introducido y le resta 0x3, y el resultado tiene que ser 0x57. (por lo tanto nosotros para calcular el serial correcto le sumamos 0x3 a 0x57) --> 0x5A = "Z"

Lo mismo que en la comprobación anterior, la suma del penúltimo número junto con el segundo, tiene que ser igual a 0x9B. Por lo tanto,  0x9B-0x5A --> 0x41--> "A"


                


Ya tenemos 4 caracteres del serial.

Serial: CZ____________AX


3ª Comprobación


Coge el tercer dígito en hexadecimal y le suma 0x1 y tiene que ser igual a 0x3A (por lo tanto, para calcular nuestra entrada tenemos que hacer 0x3A -0x1 = 0x39) --> "9

Al igual que antes, la suma del tercer carácter por el final y por el principio tiene que dar igual a 0x9B.Por lo tanto,  0x9B-0x39 = 0x62 -->"b"


                               


Ya tenemos 6 caracteres del serial.

Serial: CZ9__________bAX

4ª y 5ª Comprobación

La cuarta letra es directamente "d" y la cuarta por el final se obtiene mirando la diferencia entre 0x9b y 0x64 = 0x37 --> "7".

El quinto carácter es "m", y el quinto carácter por el final se calcula 0xC8 -0x81 = 0x47 --> "G".



                              


Serial : CZ9dm______G7baX

6ª, 7ª y 8ª Comprobación:

La sexta letra vemos que se le resta 0x2D y tiene que ser igual a 0x44. Por lo tanto, 0x44 +0x2D = 0x71 --> "q", y el sexto carácter por el final mas la "q" en hexadecimal tiene que ser igual a 0xAA. Por lo tanto, 0xAA-0x71 = 0x39 -->"9".
El séptimo y el octavo carácter es un "4" y una "c" respectivamente, y el séptimo y el octavo por el final es la diferencia de 0x9B- 0x34 ("4") =0x67 -->("g") y 0x9b-0x63= 0x38 --> ("8") respectivamente.

                                       

Por lo tanto el serial final es:

Serial : CZ9dmq4c8g9G7bAX

Y el correo cualquiera que cumpla las condiciones mencionadas anteriormente.

                        


Un saludo

Krilin4

Comentarios

Entradas populares de este blog

Radare2- Set de comandos básicos

Buenas a todos y Feliz navidad lo primero. Entre mantecado y mantecado, y motivado por el curso de Ricardo Narvaja (CrackLatinos), me he decidido a publicar una entrada que es mas para mí que para el resto. Pero supongo que puede ser útil para otras personas, de ahí que lo ponga lo mas bonito posible en la web. Vamos a ver un "cheatsheet" con comandos útiles de Radare2 y su funcionalidad, todo esto puede extraerse del --help de las herramientas, pero para los que como yo le gusta ir al grano y ahorrar el mayor tiempo posible, tienen esta entrada. RABIN2: rabin2 -I file_.exe --> Nos proporciona información básica del binario, como arquitectura, y las protecciones del binario como (nx,dep,aslr...) rabin2 -i file_.exe --> Nos muestra los imports del binario. rabin2 -e file_.exe --> Dirección del Entry point. (Dirección virtual y raw offset en el executable) rabin2 -zz file_.exe --> Muestra las strings rabin2 -g file_.exe --> Este comando nos muestr

Iniciación a la técnica de ROP

Buenas a todos, En esta entrada vamos a resolver el binario propuesto por el maestro con la protección DEP: Que previene de ejecutar el código que introducimos en el stack si se encuentra activada esta protección del binario. Para ver si un binario tiene la protección DEP (Data execution prevention) activa, p odemos mirarlo con la herramienta ProcessExplorer tal y como vamos a ver en el siguiente ejemplo activando la columna DEP del mismo para poder comprobar si el proceso tiene o no el DEP habilitado:                                 Vemos que al ser un sistema operativo de x64, todos nuestros procesos tiene el DEP habilitado por defecto, y hemos de comprobar también si tiene alguna otra protección nuestro binario como el ASLR(Address Space Layout Randomization), encargado de aleatorizar las direcciones de la memoria virtual cuando nuestro binario es cargado en memoria virtual. Vamos a ver todos los módulos que componen el binario (Programa + librerias(dlls)) para ver si algún

Explotacion usando el controlador de Excepciones SEH con r2 y x32dbg

Buenas noches a todos, (00:57) Este viernes me he puesto al día con el tute de @RicardoNarvaja de CrackLatinos, el cual planteaba un ejercicio que para resolverlo hay que hacer uso del manejador de excepciones y ver como podemos explotar un programa haciendo uso del mismo. El binario que vamos a analizar es ABOS2 (el antiguo), con MD5 = 1efa6d3f257f9a98ac65529edc0820b4, ya que Ricardo lo ha actualizado para que al alcanzar los símbolos coincidan con el binario y sea mas fácil su análisis. Para comprobarlo podemos hacer uso de la herramienta (rahash2) del set de tools que vienen con radare2. rahash2 -a md5  ABO2_VS_2017.exe Bueno como siempre hacemos debemos de tener una idea general acerca del binario, para ello ejecutamos el comando: rabin2 -I ABO2_VS_2017.exe                                Vemos que es un binario de x86, como la mayoría de los que hemos ido analizando en este blog. Abrimos el programa con Radare2 y analizamos un poco el mismo para ver que t