elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  PUPE - Parcheador de archivos en ejecución y volcador de memoria
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: PUPE - Parcheador de archivos en ejecución y volcador de memoria  (Leído 3,806 veces)
ARGVC

Desconectado Desconectado

Mensajes: 18



Ver Perfil WWW
PUPE - Parcheador de archivos en ejecución y volcador de memoria
« en: 20 Junio 2007, 09:01 am »

PUPE, actualmente, es un conjunto de herramientas para estudiar y analizar procesos en ejecución.
Funciona en las plataformas W9X w2k y XP.

El programa ha sido desarrollado por personas sin ningún animo de lucro, de forma totálmente alturista, con muchas ganas de aprender y compartir conocimientos. Es curioso... la de cosas que aprendes cuando te marcas un objetivo y eres constante en el empeño, la verdad es que estamos muy orgullosos del trabajo realizado. Esta es nuestra aportación a la comunidad de Ingeniería Inversa del mundo hispano, generalmente demasiado subordinada a las herramientas escritas en otras lenguas. Los Hispanos también sabemos desarrollar buen código.

Las posibilidades de ampliación de PUPE son inmensas. El programa comenzó como un simple parcheador de procesos en ejecución, y actualmente consta de los siguientes módulos:

Modulo principal.
Parcheador.
Caja de herramientas.
Volcador Total.
Volcador Parcial.
Mapa de memoria.
Editor PE.
Depurador.
Visor de funciones importadas.


Modulo Principal



Este módulo presenta un listado de todos los procesos que se están ejecutando en ese momento bajo el sistema. Desde el Modulo principal tenemos acceso a las demás funciones del programa.

Si seleccionamos un proceso con el botón derecho del ratón, el menú Popup desplegado, permite ir o ejecutar las demás funciones.



Además, dispone de un botón para cargar procesos nuevos y otro para actualizar la lista.

Parcheador



El parcheador permite efectuar cambios de bytes en el contexto del proceso seleccionado en el Dialogo principal. Para efectuar esos cambios, tan solo hay que introducir los datos estrictamente necesarios, a saber.

Nº de Bytes a cambiar.
Dirección de memoria.
Bytes nuevos.




Se puede llamar desde el menú Popup, desde la Caja de herramientas y desde el modulo Depurador.

Caja de herramientas





La Caja de herramientas es el siguiente escalón en la manipulación de procesos. En la ventana superior se nos mostrará todos los módulos que son cargados para la ejecución de ése proceso.Una vez seleccionado el proceso en el dialogo principal, hay que seleccionar un modulo dentro de ése proceso para trabajar sobre él. Generalmente será el ejecutable principal el objetivo de nuestras investigaciones.

En el listado del diálogo de la parte superior, utilizando el botón derecho del ratón, seleccionamos un modulo, el cual se proyecta en el contexto del PUPE. Puede ocurrir que falle la proyección debido al tamaño de algunos módulos, excesivamente grandes para efectuar la proyección de una vez, entonces, hay que activar la casilla "Forzar proyección". La cual trocea el módulo y lo proyecta en pedazos más pequeños.

Una vez  proyectado el módulo, tenemos las siguientes opciones:

Buscador de cadenas

El buscador incorpora dos motores de búsqueda, ASCII y Hexadecimal. Este motor busca en la proyección del modulo las coincidencias, y las presenta en una LISTBOX. Cada coincidencia está representada por la dirección donde se ha encontrado la cadena.

Seleccionando una dirección y clickeando en el botón parchear, se accede al modulo Parcheador, importando la dirección seleccionada. El botón limpiar, limpia los controles e inicializa el buscador.

Se puede utilizar el buscador para localizar zonas de memoria donde se guardan determinadas variables, para comprenderlo nada mejor que un ejemplo:

Imaginemos que estamos jugando a un juego, en el cual solo nos quedan unos pocos cartuchos en el cargador. Pues bien, sin interrumpir la ejecución del juego, puedes arrancar PUPE y localizar (si tienes suerte) la dirección donde se guardan el numero de cartuchos que te quedan, y poner los cartuchos que te den la gana. El esquema de actuación seria el siguiente.

En pleno juego, te apuntas los cartuchos que te quedan, vas al PUPE, proyectas el modulo ejecutable del juego y realizas una búsqueda de los cartuchos que te quedan, en principio, te aparecerán un montón de direcciones, (pero tranki, estas cosas son así), te las anotas y vuelves al juego, gastas un cartucho y otra vez al PUPE, actualizas la proyección y realizas otra búsqueda, te apuntas las direcciones y compruebas las coincidencias con la lista anterior. Después de realizar esa operación unas cuantas veces, la lista de direcciones probables se habrá reducido considerablemente. Solo queda parchear en esas direcciones y comprobar el resultado. Una vez localizada la dirección que nos interesa, siempre será la misma y ya podremos parchear directamente sin tener que realizar las búsquedas.


Volcador Parcial



Desde el Volcador parcial se pueden volcar fragmentos de código, datos, resources, etc. para su posterior análisis. Simplemente hay que introducir la dirección y el tamaño (en hex) del fragmento que queremos volcar.

Volcador Total

El Volcador Total crea un archivo en el disco, equivalente a la imagen del módulo proyectado en memoria, pero, con unas pequeñas modificaciones. Dispone de dos opciones.

1ª Reconstruir. Esta opción está pensada para archivos normales, consigue una reducción del tamaño del archivo con respecto a la opción Alinear. El funcionamiento es simple. Reconstruye las secciones del archivo proyectado, según los datos existentes en las tablas del encabezado PE, de forma que coincidan en tamaño y ubicación.

2ª Alinear. Esta opción, trabaja al contrario, es decir, modifica los datos de las tablas del encabezado PE, de forma que coincidan en tamaño y ubicación con el estado real de las secciones. Con esto nos metemos de lleno en el tema de los empacados, en los cuales al descomprimirse en memoria, rellenan el espacio virtual asignado a algunas secciones, resultando un conjunto mucho más grande que el original. Las pruebas realizadas con algunos empacadores (Petite, Neolite, UPX), dan como resultado archivos completamente funcionales y ejecutables.

Algunos empacadores, cortan o modifican la tabla de funciones importadas, haciendo imposible por este método la funcionalidad total, pero aun así, el archivo resultante es totalmente desensambable con los desensambladores habituales. Junto con el editor PE se pueden saltar las protecciones anti-dump más utilizadas.

Editor PE

El editor PE es un complemento al Volcador Total. Algunas protecciones anti-dump alteran el contenido de las tablas de secciones del encabezado PE, bien añadiendo secciones ficticias, eliminando las cadenas de los nombres de sección e incluso añadiendo cadenas de texto o firmas donde deberían haber datos de secciones. Y todo para confundir a los volcadores (dumpers), que utilizan estos parámetros para realizar el volcado.

Con el editor PE del PUPE se puede:

- Editar. Los nombres y los datos de cada sección, incluso si no existen nombres de sección.
- Eliminar Secciones.
- Volcar secciones enteras a disco.


De esta forma podremos controlar antes de un volcado los datos que se utilizaran para la realización del volcado a disco. Una vez puestos, podemos alterar las características de una sección (o de todas) para poder usar desensambladores de archivos muertos como el wdasm, en los archivos generados con el Volcador Total.



Los cambios realizados desde el editor PE actúan en dos contextos bien diferenciados.

1º En el contexto del proceso.
2º En el contexto del PUPE, concretamente, en la proyección del modulo.


De esta forma, aunque el modulo este protegido contra escritura y no nos permita realizar cambios en su estructura, si podemos actuar en la proyección, asegurándonos que el volcado posterior incorpora los cambios realizados con el editor PE.

Otra característica del editor PE, son las rutinas semi-inteligentes que comprueban la coherencia de los datos de una sección antes de darla por valida, eliminando automáticamente la presentación de secciones ficticias.

Mapa de Memoria



La idea de realizar un mapa de memoria de los 4 Gb. Asignados a un proceso, sobrevino después de estudiar la forma como actuaban algunos sistemas de protección, los cuales reservaban memoria fuera del rango utilizado por los programas para manipular datos (secciones de datos).

Algunos empacadores como Asprotect y tElock, reservan memoria para realizar algunas tareas de desempacado, y montan en esas áreas las tablas de funciones importadas o las emplean para otros menesteres, como montar números de serie…. XDDDDD. Lo más curioso es que a veces se les olvida limpiar esas zonas después de utilizarlas…dejando a la vista cosas que no deberían verse. Un ejemplo claro sería rodar una aplicación, intentar registrarnos para que se genere el número mágico, después de hacerlo vamos a la caja de herramientas del pupe y en datos pulsamos el botón que nos muestra el mapa de memoria, exportamos a datos las direcciones usadas y normalmente, en alguna de ellas, aparece el numerito. Esta es la idea del buscador de cadenas inteligente que proximamente estará operativo (a Marmota le gusta llamarle 'buscador listo').

Se puede llamar al mapeador desde la Caja de herramientas pero su verdadera funcionalidad se presenta cuando es llamado desde el modulo Depurador, el cual analizaremos más adelante.

Aunque el mapa presenta un listado de todos los bloques de memoria con sus características, los bloques interesantes son los que llevan los atributos de lectura o lectura/escritura, y por supuesto los que están en el estado de "usado"

El mapeador también incorpora un Volcador de bloques, por si a alguien le apetece guardar en disco lo que hay en esos recónditos lugares.

Depurador



Este es sin duda el modulo más complejo del PUPE. Aunque no es un Depurador propiamente dicho (todavía), si utiliza algunas funciones exclusivas de depuradores.

1ª Desensamblado del código que sé esta ejecutando en memoria.
2ª Visualización de las zonas de memoria activas.


En realidad el Depurador realiza una especie de "foto" (a través de la proyección desde la Caja de herramientas), y trabaja sobre la imagen del modulo seleccionado.

En primer lugar, nos presenta una lista de las secciones que componen el archivo seleccionado. Un pequeño inciso….
Con algunos empacadores, pasa una cosa curiosa... Normalmente, las rutinas desempacadoras se encuentran en secciones que han sido añadidas al programa original, mientras que el código del programa se encuentra en otra sección distinta. Algunos desensambladores (Wdasm) desensamblan la primera sección que encuentran con los atributos de "ejecutable", dejando las otras secciones en el olvido…. Seguimos…

Con el PUPE, puedes escoger la sección que deseas desensamblar, independientemente de las características o atributos de esa sección.

Igual ocurre con la ventana de Datos, puedes visualizar cualquier sección, de forma independiente.

El Depurador también dispone de un pequeño buscador de cadenas, un poco mas reducido (por motivos de espacio) que el de la Caja de herramientas.

Desde el Depurador es donde cobra toda su potencia el Mapa de memoria. Puedes llamarlo desde la ventana de Datos o desde la del Desensamblador. Simplemente hay que seleccionar el bloque de memoria que quieres visualizar y/o desensamblar. En unos momentos el resultado aparecerá en la ventana correspondiente.

Las ventanas de datos y código permiten copiar y pegar el texto que en ellas aparece. Para copiar tan sólo hay que sombrear con el ratón la zona que queremos copiar del mismo modo que lo haríamos en cualquier editor de texto, a continuación pulsamos Ctrl+C para pasar el texto seleccionado al porta papeles, después, en cualquier aplicación que permita pegado, pulsamos Mayúsculas e insertar para pasar el texto seleccionado. De momento y hasta que tengamos alguna función para imprimir el contenido de una ventana, será la única forma de poder imprimir estos datos.

Visor de funciones Importadas



Para la realización de este visor, utilizamoslos datos disponibles en la tabla de funciones importadas. Si la tabla es destruida o modificada (como efectivamente así ocurre en algunos casos), el visor pierde su funcionalidad. Pero (siempre hay un pero), tiene una ventaja importante. Igual que el conjunto del PUPE, trabaja con los datos que hay en memoria, y las tablas de funciones importadas no siempre (ni mucho menos) son destruidas. Por lo tanto, tenemos un medio de saber que funciones utiliza un determinado modulo. Además en el caso de que las funciones sean importadas por ordinal, en vez de por nombre de función, el visor presenta la dirección de entrada a esa función.

DESCARGA

autores: Crack El Destripador, El Alfil, Marmota
web: http://www.terra.es/personal/guillet/indexa.htm

PD: alguien usó esto o le parece útil ¿?
« Última modificación: 13 Agosto 2007, 15:47 pm por argvc » En línea

tena


Desconectado Desconectado

Mensajes: 668



Ver Perfil
Re: PUPE - Parcheador de archivos en ejecución y volcador de memoria
« Respuesta #1 en: 23 Junio 2007, 03:40 am »

Es una muy pero muy muy buena herramienta..
Podes hacer parches en el proceso que elijas.

Por ejemplo en los armadillos con copymen, donde tenes que parchear al proceso hijo en el oep, y dejarlo running, asi de esta forma podes cerrar al olly tranquilamente, y luego atacheas al hijo y lo desprendes del padre.

es muy buena realmente....

Saludos
Tena
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejecución de Archivos desde Memoria [Base Relocation] « 1 2 3 »
Análisis y Diseño de Malware
[Zero] 21 19,903 Último mensaje 9 Junio 2012, 00:00 am
por Karman
Luxur 0.0.7 con FAT12 y ejecucion de archivos
Programación C/C++
taul 8 4,343 Último mensaje 30 Abril 2012, 04:32 am
por maxotux
ayuda con mmap, proyeccion de archivos en memoria.
Programación C/C++
antoniosan20 1 1,748 Último mensaje 18 Agosto 2016, 17:20 pm
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines