ProcDump es una herramienta que te permite (entre otras cosas) copiar el contenido
de un proceso al disco duro. También te permite editar la cabecera de los
programas de tipo PE (Portable Executable).
Veamos entonces como funciona...
La ventana principal tiene 2 listas y 7 botones. La primera lista contiene los procesos
que estas ejecutando en este momento, mientras que la segunda contiene los modulos que
estan asociados a cada proceso. Los botones son:
- Unpack: Descomprime un ejecutable. Procdump es capaz de descomprimir algunos compresores.
- Rebuild PE: Reconstruye la cabecera de un ejecutable.
- PE Editor: Esta claro, no? Te permite editar la cabecera de un ejecutable.
- Bhrama Server: Ejecuta el Servidor Bhrama. Esto premite que otro programa (llamado cliente) se aproveche de las magnificas cualidades del ProcDump.
- Options: Para modificar alguna opción del programa.
- About: Muestra información del ProcDump.
- Quit: Salir del programa.
Para más información, leete los *.TXT que vienen con el ProcDump
¿Que utilidad tienen las listas?
En la lista de procesos podemos realizar 5 operaciones que son accesibles a traves del
botón derecho del ratón:
- Dump (FULL): Copia todo el contenido del proceso al disco duro.
- Dump (PATIAL): Copia el contenido del proceso al disco duro (solamente un rango).
- Kill Task: Termina un proceso.
- Process Infos: Muestra la cabecera del ejecutable.
- Refresh List: Actualiza la lista.
Mientras que en la lista de modulos las opciones disponibles son:
- Dump (FULL): Copia todo el contenido del modulo al disco duro.
- Dump (PATIAL): Copia el contenido del modulo al disco duro (solamente un rango).
|
OK!! Empecemos por analizer el fichero. Para ello he utilizado la magnifica
herramienta Gettyp, y los resultados son:
- [cpasos32.exe] -----
DOS executable file - 334562 bytes
Portable executable (starting at 128 for 334434 bytes)
Found no known modifier or compiler.
Calculated entrypoint: 8714 / 0000220Ah (RVA: 0011440Ah)
Required CPU type: 80386
Requires Win 95 or NT 4
Flags:
File is executable
Line numbers stripped from file
Local symbols stripped from file
32 bit word machine
Linker version: 4.20
Objects (object align = 00001000h):
Name Virt size RVA Phys size Phys Ofs
.text 000BD200h 00001000h 000BD200h 00000000h
.data 00017CA4h 000BF000h 00000000h 00000000h
.idata 00000400h 000D7000h 00000200h 00000400h
.rsrc 00030C00h 000D8000h 00001800h 00000600h
Oreloc 0000A600h 00109000h 0000A600h 00000000h
. 0000640Ah 00114000h 00001E00h 00001E00h
.reloc 000000DCh 0011B000h 00000200h 00003C00h
Found 318690 bytes overlay
Absolute position: 15872 of 334562 (= 4.7%)
Found archive at position 898 in overlay
--- next detection level --------
RKive 1.92 archive
Don't know how to list this type of archive :-(
Segun parece, nuestro amigo esta comprimido. Pues tiene un Overlay de 318690 bytes,
y si nos fijamos, el programa entero ocupa 334562 bytes.
¿Que es lo que sabemos hasta ahora?
Que nuestro amigo esta comprimido, pero no es posible que se ejecute el codigo en ese
estado, por lo que se debe descomprimir en memoria y luego ejecutarse. Asi pues lo
primero que se debe hacer el programa es descomprimir el codigo y luego ejecutarlo.
Sabiendo esto, cargemos a nuestra cobaya en el SoftICE y pongamos un breackpoint al
principio del codigo:
0051440A ; S u b r o u t i n e
0051440A public start
0051440A start proc near
0051440A
0051440A jmp 005144B5
/*......*/
005144B5 mov eax, [esp+arg_0]
005144B9 and eax, 0051441B
005144BF call 00514835 <-- Rutina de descompresion
005144C4 inc 005144B4
005144CA jmp eax <-- Salto al programa ya descomprimido
005144CA start endp
Bien, ahora ya sbemos que es lo que hace el programa, pero ¿Como vamos a descomprimirlo?
Pues muy sencillo, vamos a ejecutar el programa paso a paso hasta la linea 005144CA. Justo ahi
vamos a modificar una lineas de codigo, esi que introduce el comando a
(para ensamblar), y escribe la siguiente linea: jmp eip
Esto provocara que el programa quede en un bucle infinito en la linea 005144CA.
Ahora es cuando debemos de ir al ProcDump y pulsar con el boton derecho sobre nuestra cobaya
y elegir la opción Dump (FULL), y lo guardamos con el nombre que queramos.
Bien, ahora ya tenemos el CuentaPasos descomprimido. Veamoslo, ejecutemoslo y BOOOMMM!!!!
El programa no funciona, ¿porque? La respuesta es bien sencilla. Nosotros tenemos el
programa descomprimido, pero el punto de entrada todavia es el de la rutina de descompresión.
Debemos de combiarlo para que apunte al principio del codigo ya descomprimido.
Bien, pero ¿como sabemos cual debe ser el nuevo punto de entrada? La respuesta la tenemos
en la linea 005144CA, ahi hay un JMP EAX. Por lo que en EAX tenemos lo que buscamos.
Nos apuntamos el valor de EAX (en mi caso 00401228) y volemos al ProcDump.
En esta Ocasión, vamos a utilizar la opcion PE Editor, con la que podemos editar
la cabecera del ejecutable (alli entre otras cosas esta el punto de entrada), y
seleccionamos el archivo que hemos creado. Nos aparecera una ventana como esta:

Debemos de fijarnos en los cuadros de texto de Image Base (IB) y Entry Point (EP).
El programa empieza a ejecutarse en IB+EP, por lo que sabiendo esto nos resultara fácil
modificar la cabecera para que apunte a 00401228. Tan solo debemos poner en Entry
Point 00401228 - Image Base = 00001228. Asi que pongamos 00001228 en Entry Point y
pulsemos OK. Prueba a ejecutar ahora el programa!! Bien, Funciona. Ahora ya tenemos
el CuentaPasos descomprimido. xDD
|
Vamos a añadir un Script al ProcDump para que sea capaz de descomprimir el
CuentaPasos, asi que editemos el fichero script.ini del ProcDump para añadir una
nueva entrada:
P1A=PCGUARD v2.10
P1B=Aspack108.3
P1C=Shrinker 3.4
P1D=CuentaPasos v3.75 <-- Entrada añadida
[CuentaPasos v3.75]
L1=LOOK FF,E0
L2=BP
L3=STEP
Realmente es bastante sencillo lo que hace este Script: La primera linea busca
la secuencia de bytes FFE0 que corresponden a los opcodes de JMP EAX, luego
ponemos un BreackPoint y ejecutamos el progama paso a paso para gaurdarlo al disco duro.
Sencillo, no? ¿Que conseguimos con esto? Pues es probable que en la proxima versión
el autor utilice el mismo compresor, y nosotros tan solo tendremos que ejecutar el
script para descomprimirlo. xDD
|