Español | English
rss facebook linkedin Twitter

Protección del software (Parte VIII)

Tras ver diversos trucos para detectar la presencia de un depurador o la de cualquier programa no deseado, en esta ocasión vamos a ver otro tipo de técnicas básicas, enfocadas a tratar de evitar que un volcado del proceso resulte en un ejecutable funcional. Estas técnicas, de las que hablaremos a continuación, son conocidas como anti-dump.

La idea principal es conseguir que el programa no contenga toda la información necesaria en memoria, aunque se tiene la limitación de que la funcionalidad del mismo no puede variar.

Veamos varias formas de evitar un volcado correcto:
  • Ejecución de código fuera del proceso: Si reservamos memoria y ejecutamos código desde una región externa al proceso, un volcado normal no tendrá este código y no podrá funcionar correctamente.
  • Destrucción de la cabecera PE: Una vez que no haga falta, se pueden modificar datos de la cabecera, de tal manera que un volcado no nos proporcionará un fichero PE válido y no pordrá ser arrancado.
  • Destrucción de la IAT: Si, por ejemplo, se añade una redirección intermedia en la tabla de importaciones, el fichero volcado no podrá cargar las APIs llamadas y no se podrá ejecutar.
  • Robado de bytes: Durante el desempacado y puesta en memoria del proceso, se puede modificar el estado del programa para simular haber ejecutado ciertas instrucciones, de modo que un volcado del proceso resultará en un programa en el que faltan instrucciones y no funcionará.
Estas técnicas han sido y son utilizadas por diversos packers y, una vez más, tras comprender su funcionamiento, han sido rotas, puesto que son protecciones "reversibles". Veamos, de una manera un tanto abstracta, los pasos que se pueden dar ante estas protecciones.

  • Para el primer caso, se puede volcar dicha sección a disco, añadirla dentro del ejecutable, y corregir las referencias al mismo.
  • Para el segundo, se puede utilizar la cabecera del fichero empaquetado como base. Existen herramientas que vuelcan el proceso a disco y reconstruyen la cabecera en base al disco original.
  • En el tercer caso se debe reparar la tabla de importaciones, para lo cual se deberá de localizar el momento en que ésta es destrozada. La automatización mediante alguna herramienta como ImportReconstructor puede ser muy útil.
  • Por último, el robado de bytes de podrá analizar de diversas maneras:
    - Descubriendo qué instrucciones se han podido ejecutar en base al estado de la pila, registros, etc,

    - Se puede tratar de localizar las instrucciones (o emulaciones) ejecutadas durante el desempacado.
    - Se puede tratar de identificar el lenguaje de programación utlizado y estudiar cómo son las primeras instrucciones de los programas compilados en dicho lenguaje.

Mikel Gastesi
S21sec e-crime

(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login