| ESTUDIO COLECTIVO DE DESPROTECCIONES Última Actualizacion: 25/10/2001 |
Título | Como usar el ProcDump para descomprimir/desencriptar tus cobayas
Tipo de Tutorial | [X]Original, []Adaptación, []Aplicación, []Traducción
Cracker | Mr.Orange
Grupo | Whiskey Kon Tekila
Fecha | 19 de Abril de 2000
0) Introducción.
La intencion de este manual es enseñar como descomprimir nuestro objetivo cuando no hay un descompresor para el (o por lo menos no lo tenemos). Nuestra cobaya va a ser el CuentaPasos v3.75.
1) Herramientas Necesarias.
SoftICE ProcDump (Yo he usado la versión 1.5 Build 0 )
2) Un vistazo al Procdump
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).
3) Descompresión manual
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
4) Añadir un Script
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
5) Nota final
Bueno, esto es todo por hoy. Pero no queria terminar este articulo sin deciros que este metodo de compresion es realente muy sencillo (Si lo intentamos descomprimir con el metodo estandar que viene con el ProcDump, tambien tendremos exito :)) ). Pero mi intención era enseñar como hacer esto mismo manualmente y luego añadir un pequeño Script al ProcDump para ser capaces de descomprimir otros programas que emplean el mismo compresor. PD: Recordad que muchos compresores utilizan trucos antidebug y tambien es posible encontrarse otros que incluyan codigo antiSoftICE... :)) Como quitar la protección VBOX que tiene el Ulead Button.Applet 1.0
[ Entrada | Documentos Genéricos | WkT! Web Site ]
[ Todo el ECD | x Tipo de Protección | x Fecha de Publicación | x Orden Alfabético ]
(c) Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers. Si necesitas contactar con nosotros , lee esto antes e infórmate de cómo puedes ayudarnos