Desempacando archivos empacados/protegidos con el nuevo ASProtect
Un tutorial traido a ti el 17 de Julio - por Predator [PC/pGC]

Traducido por ^[G]oLe[E]^

 

Hola allí!!! Antes les expliqué como podían parchear un programa inline, que estaba empacado con ASProtect. Poco tiempo después que mi tutorial salió a luz, el autor de ASProtect actualizó su programa por lo que mi tutorial se hizo obsoleto. Por un largo periodo de tiempo, el nuevo ASProtect no fue vencido. La única solución fue el MemPatch Server (c) de Ivanopulo, pero es una herramienta privada. Entonces, como hacemos los crackers para tratar con esta nueva versión de aspr? y tengo la respuesta, y te la mostrare en este tutorial.

PROGRAMA OBJETIVO:    AD Picture Viewer v1.32
http://abroaddesign.hypermart.net/picview/picview.zip

 


Bueno, ahora nuestra misión es desempacar un programa objetivo que ha sido empacado con ASProtect - y el archivo desempacado debe ejecutarse perfectamente. Para lograr este resultado, tenemos que ir a través de los siguientes pasos:

Por favor, lee para una descripción detallada de como hacer esto.


 

Localizando el OEP - Punto de Entrada Original del Programa

[MI IDEA] Basicamente, trabaja así. Pensé que los bytes en el OEP serian desempacados/tratados primero y antes de los otros bytes, por el esquema de desempaquetado del ASPR. Estaba en lo correcto :) -- ejecuté un programa, escribí/recordé una dirección (cualquier RVA, eso es todo) y fije un BPM en él. Cuando ASPR lee/escribre a este RVA por primera vez, bpmX en la linea de código que hizo eso y re-ejecutamos la aplicación otra vez. Noté que los primeros bytes vistos que escribió, fue a la RVA del OEP! ----- Fui desafortunado, estaba en algo como un 'trance' mientras hacia esto y tengo miedo porque ya olvidé el proceso -exacto- . Sin embargo, con la forma descrita abajo, el OEP no debería ser difícil de encontrar, quiza mas fácil. Y Adivino que iré en trance de nuevo y encontraré lo que hice antes.. LOL.

[DECIR QUE] Quiza si has tratado, encontrarás que rastrear desde el punto de entrada del archivo empacado no es buena idea ya que tomaría horas y horas. Entonces, como demonios localizamos el OEP? no es tan complicado una vez que sabes como hacerlo. 

[HAGAMOSLO] Lo primero con lo que hay que tratar es cuando corremos el programa, hay un malintecionado chequeo de SoftICE. Olvidemoslo rapidamente y descarguemos el IcePatch (gran herramienta) de http://protools.cjb.net/ por ejemplo. Si no sabes como usar esta herramienta, no me preguntes, lee el readme o algo. Okas, no mas chequeos de SoftICE. que sigue?

Vamos a escribir el RVA de algun código desempacado, en cualquier parte. Ejecutamos PicView, vamos al menú '?' y clickeamos en 'About'. Ahora entra a SoftICE, y fija un bpx en la API 'ShowWindow' (bpx ShowWindow). Ahora cierra el about, y softice aparecera -presiona F12 hasta que estes en el código de PicView. La dirección que escribí para mi, era "449EEE" y tu puedes hacerlo también. Okas, no salgas del SoftICE todavia, escribe: BPM <La_RVA_que_escribiste>. Por ejemplo, si estas usando la misma RVA que yo, sería: BPM 449EEE. Ahora cierra PicView y ejecutalo de nuevo. SoftICE hará un break (por supuesto) - ahora sigue estas instrucciones de forma exacta: Presiona F5 7 veces. Una vez que hiciste esto, presiona F12 2 veces. Ahora aterrisaras en la siguiente pieza de código y por favor, recuerda que casi 100% seguro que el RVA será diferente en tu computadora, ya que al parecer, ASPR usa RVA´s aleatorios :) - Code snippet:

0167:0059D51C EB13 JMP 0059D531
0167:0059D51E E9F505FFFF JMP 0058DB18
0167:0059D523 66B80E00 MOV AX,000E
0167:0059D527 E8D4F1FFFF CALL 0059C700
0167:0059D52C E88308FFFF CALL 0058DDB4
0167:0059D531 8B4508 MOV EAX,[EBP+08]
0167:0059D534 8D4818 LEA ECX,[EAX+18]
0167:0059D537 8B4508 MOV EAX,[EBP+08]
0167:0059D53A 8B10 MOV EDX,[EAX]
0167:0059D53C 8B4508 MOV EAX,[EBP+08]
0167:0059D53F 8B401C MOV EAX,[EAX+1C]
0167:0059D542 E85DF7FFFF CALL 0059CCA4
0167:0059D547 5F POP EDI
0167:0059D548 5E POP ESI
0167:0059D549 5B POP EBX
0167:0059D54A 59 POP ECX
0167:0059D54B 59 POP ECX
0167:0059D54C 5D POP EBP
0167:0059D54D C20400 RET 0004

Ahora, rastrea la llamada (F8) en la dirección 59D542 (de nuevo: la dirección en tu computadora será diferente) - y rastrea un poco (F10). Muy pronto verás la siguiente línea de código: 8B45F8 MOV EAX,[EBP-08]

Ahora, pasa a través de esa línea de código y mira EAX - contiene el OEP, eso es baby! para este objetivo, el OEP = 4E3DF8

 


 

Volcado de Memoria

Okas, así que sobreviviste a la parte 1. Ahora movamos nuestros traseros a la parte 2.

Volcamos 2 archivos separados, y vamos a usar IceDump (obtenlo en protools, para la URL ve arriba en este tutorial). El archivo 1 será la imagen entera y el archivo 2 será la Tabla de Importación intacta. Despues los uniremos e iremos al paso 3.

Enciende ProcDump y corre el PE-Editor sobre PicView.exe. Tendrás que recordar el RVA de la Imagien base y el tamaño de la imagen por ahora. Okas, ahora tienes que correr PicView de nuevo y hacer que SoftIce rompa en el OEP. Una forma posible de hacer esto, es algo así:

1. Hexedita PicView.exe y en el Punto de Entrada, pon un byte nuevo (CCh) y recuerda el antiguo (en este caso, 60h).
2. Escribe bpint 3 en SoftICE - y ahora ejecuta PicView y SoftICE lo romperá. Escribe "EB EIP 60" para restaurar el byte original.
3. Escribe: BPM <Dirección_del_OEP> X. para este objetivo, sería: BPM 4E3DF8 X. Ahora presiona F5 y SoftICE romperá en el OEP!

Okas, volquemos la imagen ahora. Si usas una versión antigua de IceDump, escribe en SoftICE: pagein d <RVA_de_la_imagenbase> <Tamaño_de_la_imagenbase> <nombre_del_archivo>.
Para este objetivo especifico, la línea de comando sería: pagein d 400000 144000 c:\temp\image.exe
Pero por supuesto, si ejecutas el nuevo IceDump, tendrás que remplazar "pagein d" por "/dump"

Ahora la parte 2 del paso 2: Descargamos la Tabla de Importación intacta. Primero ve el editor PE del ProcDump de nuevo (no lo cerraste, o sí?) y haz click en "sections". La sección ".idata" es la que nos interesa, y lo que queremos saber es el RVA de .idata y el tamaño virtual de él. Para este objetivo, el RVA = E9000 y el vsize (tamaño virtual) = 3000.

Okas, descarguemos la tabla entonces! limpia los breakpoints del SICE y escribre: bpx LoadLibraryA (ya que este es una de las API´s que ASProtect tiene que usar para inicializar la Tabla Real de Importación). Ahora ejecuta PicView de nuevo y SoftICE romperá. Presiona F12, ahora estas en algún código de ASProtect. Descarga la Tabla de importación escribiendo: pagein d <RVA_del_idata+RVA_de_la_imagenbase> <Tamaño_del_idata> <nombre_del_archivo> (si usas un IceDump nuevo, reemplaza "pagein d" con "/dump"). --- Para este ejemplo, la línea de comando vendría a ser: pagein d 4E9000 3000 c:\temp\idata.dat

Ahora el paso 3 de la parte 2: tenemos que fusionar el exe descargado la Tabla de Importación intacta. En mi opinión, la mejor forma de hacerlo es usando Hex Workshop (www.hexworkshop.com) y abrir nuetro "imagen.exe". Ahora ve al offset de .idata el que en nuestro ejemplo es: E9000. Selecciona el mismo numero de bytes como el tamaño de nuestra nueva Tabla de Importación (en nuestro ejemplo: 3000) usando Shift y PageDown/Las Flechas del Cursor o algo... y vamos a: "File -> Replace by file" y seleccionamos el archivo "idata.dat" . Ahora, los bytes en image.exe serán actualizados por idata.dat. Fusión Completada!

 


 

Ultimo paso: editar el encabezado PE para que el programa se ejecute y no se cierre

Sientes como nos estamos acercando al final de este Tutorial? Bien, espero que sea así porque mis dedos comienzan a doler ;)

Necesitamos hacer algunos cambiós al nuevo imagen.exe usando el PE-Editor del ProcDump. Cargamos imagen.exe en él. Lo primero a cambiar es el PEP. Recuerdas que escribiste el OEP? Ahora resta la imagenbase de él (usualmente 400000, ve ProcDump) y has obtenido el Punto de Entrada que debes ingresar en ProcDump. Para este programa sería: 4E3DF8 - 400000 = E3DF8 = Punto de Entrada.

Segundo, haz click en "directory" y cambia el RVA (no el tamaño, solo el RVA) de la Tabla de Importación (de nuevo, en este ejemplo: E9000). Presinoa OK y ahora entra a "Sections". Para ser capaz de desensamblar el archivo desempacado, comienza por editar la sección "CODE" (bien, la primera sección del archivo y en este caso, es CODE (código)) y cambia las Caracteristicas de Sección de C0000040 a E0000060. Ahora, el PSize debe ser hecho Igual al VSize y el Offset debe ser hecho igual al RVA -- Esto es debido al hecho de que el archivo ahora está desempacado y comenzamos a descargar la imagen del RVA 400000. Así, en este ejemplo, para la sección CODE, el PSIZE == VSIZE == E3000. Ademas, el OFFSET == RVA == 1000. Ahora presiona OK. Aquí vienen las malas noticias (Oh bueno.. no tan malas) : Tienes que hacer esto para cada sección que tenga el archivo, esto también significa hacerlo para .DATA y .ASPR etc. Siempre copia el VSIZE sobre el PSIZE y despues de eso, copia el RVA sobre el OFFSET. Una vez hayas terminado todo, presiona OK. Presiona OK otra vez y puedes salir tranquilamente del ProcDump.

Hey, estamos hechos!! trata de correr el archivo desempacado (imagen.exe) - correra perfectamente, no hay problema - y puedes desensamblarlo.

 


Otra vez ASProtect está completamente muerto. Maldita sea, cuantas veces tenemos que aclararle a los autores de software que las protecciones comerciales ya hechas son una porqueria y realmente apestan.

Bien, estoy un poco cansado ahora.. por lo tanto, dejare de escribir - pero primero quiero saludar y darle creditos a R!sc (http://csir.cjb.net) porque usé su método de volcar/arreglar el PE - es grandioso!

 

Firma,

    Predator [PC/pGC]

 

Visita mi website: http://www.predatorpc.com/

www.000webhost.com