martes, febrero 04, 2014

Loader Simple: Acceder al binario descifrado en memoria

El mundo de la ingeniería inversa un Loader es un programa cargador de software con una función muy específica: La de poder realizar cambios dentro otro binario cuando este se encuentra en memoria, ya que deja el programa en su estado original al finalizar el proceso. Este tipo de loaders se utilizan para poder manipular aquellos binarios que vienen cifrados o empaquetados con un software de protección especial para evitar que sean parcheados o crackeados.

Un Loader Debugger es similar al Loader simple pero con él se tiene un control absoluto sobre el programa, tal como se haría un debugger, permitiendo controlar las excepciones del programa y demás funciones, pero en el caso de usarlo con programas que traigan técnicas anti-debugger es común que los más potentes sean detectados por el software de protección y no se puedan utilizar.

Al final, como la principal función de un un Loader simple sería la de detectar cuándo se va a producir el descifrado del binario original en memoria para ser ejecutado y poder interceptarlo en memoria para poder acceder a él, a veces lo más sencillo es hacerse uno manualmente.  La creación de un Loader varía dependiendo quién lo desarrolle y de lo que se quiera lograr.

Hace tiempo desarrolle Loader Simple - nada nuevo - que me ha funcionado para muchos casos en pruebas de concepto, para hacer algún bypass de protecciones comerciales en binarios. Algunos de ellos estando cifrados con protectores conocidos por sus trucos anti-debugger, como lo son Themida o WinLicense. Lo he desarrollado en MASM con el IDE RadASM:

Figura 1: Primera parte de código de Loader Simple

En esta primer parte lo único que se está haciendo es obtener la ruta del directorio donde se está ejecutando el programa para así ejecutar nuestro proceso víctima. Más adelante crea un snapshot de los procesos corriendo y busca uno a uno hasta encontrar el de la víctima en el que queremos inyectar.

En esta otra parte solo se busca en cierta dirección algunos bytes para saber si el código ha sido descifrado o sigue cifrado aún. De ser así comienza un loop hasta que el código este descifrado y de esta forma puede seguir su ejecución y cambiar los permisos a lectura y escritura por si acaso. Seguido comienza a escribir los primeros bytes de la inyección antes de que la víctima ejecute el código.

Figura 2: Segunda sección de código de Loader Simple

Esto es un ejemplo de un Loader básico y sirve como esqueleto para agregar más modificaciones o funciones. A pesar de ser simple es muy funcional sabiendo utilizarlo. Les dejo un enlace del proyecto por si alguien quiere darle una mirada a fondo y hacer algunas pruebas: Loader Simple

Para poder usar el IDE RadASM, hace un par de días empecé una pequeña introducción sobre desarrollo de malware desde cero, donde parte del laboratorio era instalar MASM y RadASM, que si quieres empezar con esto tal vez os pueda servir.

Autor: Alejandro Torres (TorresCrack)
Twitter: @TorresCrack248
Facebook: yo.torrescrack

7 comentarios:

  1. Interesantísimo, gracias Alejandro

    ResponderEliminar
  2. dale :D, saludos!

    ResponderEliminar
  3. Le echaré el vistazo a algún binario, a ver si encuentro fácil las direcciones de memoria donde se inician los algoritmos de cifrado =D

    Grande Alex... saludos!

    ResponderEliminar
  4. oka Germán, me cuentas como te fue!

    un abrazo!

    ResponderEliminar
  5. Muchas gracias @alex se te agradece ;-) (Y)

    ResponderEliminar
  6. @fzeta :D saludos!

    ResponderEliminar
  7. alex como estas ya no esta tu loader simple podrias subirlo otra vez

    ResponderEliminar