Desempacar PeiD 0.95

Tamaño de letra:

¿Qué es PeiD?

PeiD es una excelente herramienta utilizada en Ingeniería Inversa para detectar packers, crypters y compiladores para archivos PE (Portable Ejecutable). Es una lástima, pero en su web el día 04 de abril de 2011 anunciaron la parada del proyecto y que no saldrán nuevos lanzamientos de PeiD. Desde las versiones anteriores, mucha gente siempre ha querido personalizar su propio PeiD con alguna imagen particular pero en la última versión 0.95 existe un pequeño inconveniente y no es posible hacerlo tan fácilmente. Vamos a solucionar este problema ya que algún usuario de la web ha tenido dificultades.

Estudiando PeiD

Antes de continuar. Este tutorial ha sido escrito con muchos detalles dirigido a gente sin conocimientos, las cosas más simples para un usuario avanzado pueden ser la más complejas para otro que comienza. Algunos usuarios tenían problemas para desempacar este programa. De momento haré 3 tutoriales explicando esto y cómo solucionar el principal problema que ocurre. Al final del tercer artículo incluiré un video explicativo de cómo realizar sencillamente todo el proceso, pero primero hay que leer esto. Veremos cómo solucionarlo.

Si abres PeiD con PeiD, y de las tres opciones que tiene usas "Deep Scan" (escaneo profundo) verás que está empacado con UPX. Literalmente leemos lo siguiente que nos puede orientar:

UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo

Antes de continuar, leo detenidamente la documentación del programa y no nos impide desempacarlo, así que ¡vamos a ello!.

Desempacar PeiD 0.95

Si intentas desempacar PeiD 0.95 con el mismo plugin que el programa incorpora (PeiD Generic Unpacker) verás que se ejecuta un posible bucle infinito, no nos vale. Si intentas desempacar PeiD 0.95 con UPX, de esta forma:

C:\upx307w>upx -d PeiD.exe

Verás que UPX dice que el archivo ha sido probablemente modificado:

C:\upx307w>upx -d PeiD.exe
                       Ultimate Packer for eXecutables
                     Copyright (C) 1996 - 2010 UPX 3.07w
         Markus Oberhumer, Laszlo Molnar & John Reiser Sep 08th 2010

        File size         Ratio      Format         Name
   --------------------   ------   -----------   -----------
upx: PeiD.exe: CantUnpackException: file is modified/hacked/protected; take care!!!

Unpacked 0 files.
C:\upx307w>

Tampoco nos vale. Así que voy a hacerlo de la forma más sencilla posible a mano, pero antes de continuar es necesario atender a los dos intentos que acabamos de probar. Si UPX nos dice que ha sido modificado, nos está indicando que el programa original fue empacado con UPX y que después -ya comprimido- fue alterado. Esto se ve rápidamente cuando observas con un visor de PE el nombre de las secciones. Aunque parece una tontería, para los más noveles es importante que entiendan esto. Esas modificaciones que se han realizado pueden ser trucos anti-dumpeado y tal vez puede ser información importante y necesaria para la ejecución del programa. Vamos a continuar pero ten esto presente.

Desempacado a mano

El desempacado a mano es muy sencillo. Para ello voy a usar las siguientes herramientas en Windows 7:

  • OllyDBG 2.01 original
  • Plugin OllyDump v2.01 por AORETEAM
  • ImportRE 1.7e

Vamos a cargar PeiD 0.95 en OllyDBG, el EP (Punto de Entrada) que debes ver debe ser este:

004982E0  pushad
004982E1  mov esi,00464000
004982E6  lea edi,[esi+FFF9D000]
004982EC  push edi
004982ED  jmp short 004982FA
...
Nota: fondo verde oscuro = donde está parado el debugger.

Si tu EP está en 0046F49E es porque OllyDBG 2.01 tiene una opción para descompresión automática pero que no quiero utilizar para que lo entiendas y lo sepas hacer a mano. Así que voy a deshabilitar esa opción, voy al menú Option -> Options -> SFX y destildamos "Unpack SFX modules automatically". Pulsa Ok y reinicia la carga de PeiD 0.95 en OllyDBG. Ahora deberás ver el EP de antes.

UPX como la mayoría de compresores, en su algoritmo usa un patrón repetido y de este modo consigue reducir el tamaño del ejecutable. Donde te encuentras ahora es el comienzo de la descompresión. El código de UPX empezará ahora a descomprimir PeiD 0.95 (comprimido) y cuando esté descomprimido del todo pasará la ejecución al programa PeiD 0.95 ya descomprimido. Encontrar este último punto (en este caso) es muy sencillo. Simplemente parado en el EP (004982E0) usa la ruleta del ratón y ve hacia abajo. Hasta que encuentres lo siguiente:

...
00498479    push ebx
0049847A    push edi
0049847B    call ebp
0049847D    pop eax
0049847E    popad
0049847F    lea eax,[esp-80]
00498483    /push 0
00498485    |cmp esp,eax
00498487    \jne short 00498483
00498489    sub esp,-80
0049848C    jmp 0046F49E
00498491    db 00
00498492    db 00
00498493    db 00
...

Ahí tenemos el punto final, en: 0049848C. Es decir, cuando cuando se ejecute todo el código desde el comienzo en 004982E0 hasta el final en 0049848C ya se habrá hecho toda la descompresión. (Aparte de otras cosas).

Simplemente ponemos un BP (Breakpoint - Punto de ruptura - lugar donde parará el depurador) en la dirección 0049848C. Para esto nos situamos ahí y pulsamos F2 (o botón derecho del ratón -> Breakpoint -> Toggle o doble clic en Hex dump). Se habrá puesto la dirección de color rojo:

0049848C  E9 0D70FDFF    jmp 0046F49E

Recuerda que el debugger está parado en 004982E0. Pulsa F9 (o el icono de triángulo azul que parece el típico "Play" de cualquier reproductor) para ejecutar el código. Y se tiene que detener donde hemos puesto el BP:

0049848C  E9 0D70FDFF    jmp 0046F49E
...
Nota: fondo verde oscuro = donde está parado el debugger.

Pulsamos F7 (o el icono con el tooltip Step Into) para ir a 0046F49E y ya estás en el OEP (Original Punto de Entrada):

0046F49E      call 00478365
0046F4A3      jmp 0046F320
0046F4A8      push ebp
0046F4A9      mov ebp,esp
0046F4AB      push ebx
0046F4AC      push esi
0046F4AD      push edi
...

Ahora vamos a dumpear (vamos a copiar lo que ves ahora en memoria ya descomprimido y lo vamos a llevar a un archivo físico. En español dumpear se suele traducir por volcar) y lo vamos a hacer ayudándonos del plugin OllyDump. Voy al menú plugins -> OllyDump -> Dump debugged process, verás la siguiente ventana:

OllyDump y PeiD

Déjalo tal cual ves en la imagen y únicamente pulsa el botón 1: Dump. Yo guardo el dumpeado como dump.exe. No cierres OllyDBG y déjalo en el OEP. Si observas ahora el archivo dump.exe que hemos generado, verás que ha aumentado considerablemente de tamaño, pero para funcionar necesitamos reconstruir la IAT. De la IAT es necesario hablar detenidamente y en otros tutoriales, pero ahora para entenderlo es una tabla que contiene las direcciones a distintas API. En el siguiente artículo reconstruiremos la IAT.

Última actualización: Lunes, 12 Diciembre 2011

No tiene privilegios para responder a los comentarios.


 

También te puede interesar. Relacionados:

Visitas: 8562273