Ir al contenido principal

Hydra android malware (Part 2)

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

Hydra Android Malware (Part 1)

 Buenos Días, Hoy escribiré una entrada de análisis de malware en Android después de un tiempo sin escribir por aquí. La idea era coger de nuevo soltura con las herramientas open-source que hay para el análisis de aplicaciones android. Estuve leyendo información sobre alguna familias y me tope con Hydra (siguen apareciendo casos activos en Android (Twitter)) y me puse con ella. Arranqué con la lectura de este blog : Es el "padre nuestro" de la primera parte de nuestro tutorial, lo único que voy a hacer yo aquí en la primera parte es "puntualizar" algunos problemas que me he encontrado durante el análisis al seguir su tutorial. Información de la muestra y Herramientas:  -) Muestra : 46aeb04f2f03ebe7c716fc6e58a5dea763cd9b00eb7a466d10a0744f50a7368f -) JADX : Para poder leer el codigo Java/kotlin decompilado de la aplicación. -) Apktool : Para hacer el dissasembler de la APK, y poder parcherla y reconstruirla.  -) Ghidra : Decompilado de librerias Nativas. -) GEF : Debu

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

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

 Buenas de nuevo, en esta entrada continuaremos (y cerraremos) el capítulo de desarrollo básico de malware en Windows. En la entrada anterior, ya teníamos guardadas las APIs que íbamos a necesitar para nuestra infección, así que ahora nos ponemos con el proceso de infección en sí. Pasos para la infección: 1)Necesitamos obtener el handler de los ficheros que hayamos indicado en la variable "mascara" (.exe) , en este caso ejecutables                                                                          2)Haremos uso de las APIs FindFirstFileA y FindNextFileA , para buscar los archivos que queremos infectar, con las APIs GetWindowsDirectory (C:\WINDOWS) y GetSystemDirectory tendremos acceso a 2 rutas distintas(“C:\WINDOWS\SYSTEM”), con la API SetCurrentDirectory haríamos el cambio de escritorio al escritorio donde estarán los ficheros que queramos infectar. Durante la explicación del código añadiremos el prototipo definido por la MSDN para que sea más fácil la v