PROGRAMA

      

PROTECCION

     

HERRAMIENTAS

Crackme 1 de Doblecero

DESCARGA

 

ASProtect

 

Olly Debugger

PE_editor

Import reconstructor

Stripper 2.07

 

 

 

 

 

     NIVEL: Avispado

 

 


 

Un nuevo packer y una nueva forma de desempacarlo.

Seguimos viendo el tema de reconstrucción de IAT que se va complicando pues ASProtect altera la tabla de importación y debemos hacer unos ajustes extra con Import reconstructor para dejar el exe funcionando correctamente.

Nos servirá este capitulo para ir dejando cada vez mas claro el tema de la reconstrucción de la IAT.


 

Los pasos para hallar el OEP cambian un poco respecto a capítulos anteriores.
Empezaremos como en el capitulo anterior utilizando PE_editor para obtener los datos de la Image Base y Size of Image,
400000 y 19000 respectivamente

                                                                                                                                                                         

Cerramos PE_editor y abrimos Peid para tener una idea de cual puede ser el OEP del crackme, nos dice que esta empacado con ASProtect y nos da un OEP que nos servirá para tener una referencia mas a la hora de analizar el crackme: 401224

Cargamos el crackme en Olly aparecemos al principio de la sección code y para nuestra sorpresa no vemos ningún pushad cercano al que hincarle el diente, aparte estamos justo en la sección code y no nos serviría de nada buscar un salto que nos traiga a esta sección pues ya estamos en ella.

Atacaremos nuestro objetivo de otra manera.

Pulsamos F9 y Olly se pausa a causa de una excepción, podemos verlo debajo de la command bar

    -> 

Utilizaremos el llamado método de las excepciones para localizar el OEP.

Este método consiste en ir pasando con shift + F9 todas las excepciones que nos van apareciendo hasta que el programa se ejecuta, (pasa del estado  a running) e irlas contando a la vez que las vamos pasando pues debemos tomar nota de cuantas excepciones nos encontremos hasta la ejecución del programa, no hace falta apuntar las direcciones solo saber el numero, la cantidad de veces que debemos pulsar shift + F9 hasta que el programa se ejecute.

Primero lo haremos contando las veces que tenemos que pulsar shift + F9 en este caso son 16, cuando pulso shift + F9  16 veces el cartelito   de Olly cambia a running y podemos ver que el crackme esta ejecutándose, comprobadlo.

Al pulsar shift + F9 por decimosexta vez os aparecerá este cartel que deberéis aceptar pues solo indica que la versión de ASProtect con la que empaquete el crackme es trial

Bien pues lo que debemos hacer sabiendo que al pulsar shift + F9 16 veces se ejecuta el crackme es ir contando y al llegar a la penúltima excepción (en este caso la que hace el numero 15) pasarla con shift + F7

Cargamos de nuevo el crackme en Olly o lo reiniciamos con control + F2, pulsamos F9 y para en la primera excepción, pulsamos 15 veces shift + F9 y esta es la dirección donde paramos:0033033 (esta dirección – la penúltima- conviene tomar la costumbre de apuntarla)

Pudiera ser que en vuestro PC cambien las direcciones pero como siempre digo: lo importante es seguir los pasos

luego una vez shift + F7 y caemos aquí:

 

Pulsamos  View   para ver el mapa de memoria

 

Buscamos en el Memory map el crackme y sobre la sección code ponemos un BP Memory on access

Pulsamos F9 y nos vuelve a aparecer este cartel que nos dice que el ASProtect con el que esta empacado es una versión trial, si este cartel os aparece antes de pulsar F9, o sea mientras estáis en el proceso de pasar las excepciones con shift + F9 deberéis reiniciar el análisis del crackme o mandarme un giro postal para que pueda comprar la licencia de los packers que uso en el curso y no aparezcan mas carteles como este ;)

En serio: si este cartel os aparece antes de pulsar F9, o sea mientras estáis en el proceso de pasar las excepciones con shift + F9 deberéis reiniciar el análisis del crackme

Por supuesto este cartel no os saldrá si lo que intentáis es estudiar un programa comercial empacado con ASProtect.

Aceptamos y Olly para aquí: 401224 este es el OEP,  vemos que coincide con el que nos dio Peid y además si miramos unas líneas mas arriba tiene toda la pinta de ser el OEP de un programa escrito en Visual Basic

Volcaremos desde aquí con el plugin IsDebuggerPresent - Dumper

                                                                                                                                                                     Ponemos los datos que hallamos con PE_editor en Offset la Image base y en Size escribimos Size of Image 

Acordaros de darle el nombre y la extensión *.exe al guardarlo.

Ahora aprovechando que estamos parados en el OEP buscaremos el principio y fin de la tabla de importaciones igual que lo hicimos en el capitulo pasado:                              desde el OEP poco a poco con F7 hasta llegar a la primera instrucción tipo FF25 XXXXXXXX JMP DWORD PTR DS:[XXXXXX]

Esta vez la encontramos en la dirección  40121C justo encima del OEP

Y hacemos el seguimiento en el dump: Follow in dump - Memory address.

 

En esa dirección hacemos control + R  sobre sus 4 bytes y nos aseguramos (somos novatos y no conviene darlo todo por hecho) que estamos dentro de la tabla de importación pues vemos una instrucción tipo JMP DWORD PTR DS: [xxxxxx]

Busco el final de la tabla examinado las direcciones partiendo desde 40109C hacia abajo con control + R para ir buscando las referencias y creo encontrar el final en la dirección 4010C8

 

Para asegurarme sombreo de un golpe un puñado de direcciones a partir de la que yo pienso que es el final hacia abajo y pulso control + R  y compruebo que acerté, no se ve ninguna referencia a ningún salto tipo  JMP DWORD PTR DS: [xxxxxx] a partir de esta dirección

 

Ahora buscare el principio partiendo desde la dirección 40109C hacia arriba y llego hasta 401000, el “tope” del dump, pulso control + R y como podéis ver en la imagen encuentro  una referencia tipo JMP DWORD PTR DS: [xxxxxx]

En este caso JMP DWORD PTR DS: [ModuleEntryPoint] que es la dirección 401000 pues lo vemos claramente en el dump, no podemos “subir” mas de esa dirección así que ese será el principio de la import table

Por tanto ya tenemos el principio y fin de la tabla localizado: principio = 401000 final 4010C8

 

Realmente buscar el principio y final de la tabla es sencillo, solo hay que tener un poco de paciencia para buscarlo y hacerlo con cuidado y fijándonos bien, cuando tengamos practica nos iremos orientando al ver bloques en el que un cierto numero se repite constantemente o alguna otra pista,  pero eso son cosas que iremos cogiendo con la practica, de momento es mejor buscar tranquilamente  mirando bien lo que hacemos.

 

Calculamos la longitud de la tabla:

Final de tabla menos principio de tabla mas 4 = 4010C8401000 + 4 = CC  esta es la Size de la tabla.

 

Antes de pasar a reconstruir la IAT debemos fijar el exe que volcamos.

Abrimos PE_editor y cargamos nuestro crackme volcado (lo llamé 00dumpy.exe) y pulsamos sections y sobre una de las líneas click derecho dumpfixer (RS=VS & RO=VO)

Bien ya tenemos el “00dumpy” preparado así que vamos a empezar a reconstruir la IAT,  recordemos: este capitulo hasta aquí ha sido prácticamente igual a los pasos que dimos en el cap anterior salvo el modo de encontrar el OEP:

lo hemos hecho por el método de las excepciones el cual creo que es bastante sencillo: solo hace falta saber contar hasta llegar a la penúltima excepción  (pues la ultima será la que da paso al programa) e ir pasándolas con shift + F9 (en este caso hasta llegar a la que hace el numero 15), pasarla con shift + F7, poner el BP Memory on access en la sección code del crackme pulsar F9 y ya estamos sobre el OEP, no es muy difícil, la única pega que nos puede surgir es el cartel de versión trial mientras pasamos las excepciones, pero reiniciamos el análisis y resuelto.

Ejecutamos el crackme protegido (dobleceroasprotect.exe), como lo empaquete con un ASProtect trial os aparece otra vez el cartelito que lo indica, lo aceptáis y ya esta el crackme ejecutándose a su bola, luego abrimos Import Rec.  y atacamos el exe que se esta ejecutando.

Introducimos los datos que nos pide

OEP = 401224 – 400000 (Image base) = 1224 o si preferís elimináis el primer numero: 401224 o lo que es lo mismo escribir los 5 últimos 01224

RVA = 401000 – 400000 (Image base) = 1000 o si preferís elimináis el primer numero: 401000 o lo que es lo mismo escribir los 5 últimos 01000

Size = 4010C8 (fin de IAT) – 401000 (principio de IAT) + 4 = CC

Pulsamos get imports y aquí empiezan nuestros problemas: valid NO

Esto quiere decir que la tabla de importación esta j#did@ esto es por que ASProtect trastoca la tabla y hace variaciones para poner el crackeo/desempacado mas difícil.

Miro por si acaso estuviera mal el principio y fin de la IAT, por si fuera error mío pues soy muy novato en esto pero veo que esta todo bien

 Principio ->   fin ->  

 

Si miramos el log de Import vemos que nos dice que hay 45 unresolved, con esto nos dice que hay 45 direcciones de la tabla que tendremos que buscarnos la vida para arreglarlas

 

Pulso  y me aparecen las 45 direcciones “noresueltas” sombreadas.

Para arreglar este tema deberíamos ir mirando una a una todas las direcciones mala fijándonos en su RVA y arreglándolas pero esto es un c#ñ@z#, pensad que este es un crackme/programa pequeño, en un exe mayor habrá  incluso mas de cien direcciones por arreglar y será odioso arreglarlas una a una.

Intento  buscarme la vida de la manera mas fácil posible: pulso  a ver que pasa y …

  ... parece que me lo arregló automáticamente: valid YES.

Pruebo a fijar el exe volcado con    y después lo pruebo y veo que funciona.

Ya tenemos el crackme desempaquetado y listo para analizar, si lo cargamos en Olly veremos las APIs y las (pocas) strings del crackme claramente.

Este crackme dio bastante trabajo a los chicos del foro de HxC a la hora de hallar el serial.

El tema este de AutoTrace a veces no funciona y abr que emplear otro método manual que veremos mas adelante en otro capitulo.

 

Método automático o del monje durmiente:

Pillamos Stripper 2.07 y cargamos el crackme empaquetado con ASProtect

Pulsamos unpacking y … … otra vez el put# cartelito trial versión, lo aceptamos y vemos el log de Stripper que nos cuenta como en 3 segundos volcó el crackme fijo la tabla y guardo el crackme desempacado con éxito.

 

Existe otro programa para la reconstrucción de la IAT que se llama Revirgin, yo no lo trato aquí pues este programa me da problemas en XP pero podéis ver su funcionamiento en los tutoriales de Ricardo Narvaja.

También existe un plugin para Olly llamado ASProtect 1.2x que debe facilitar bastante el trabajo, no puedo usarlo -y por tanto tampoco explicarlo-  pues también me produce error y me cierra Olly en cuanto intento hacer algo con el.

Aprovecho esta ocasión para agradecer a los creadores de este tipo de programas (ya sean desempacadores, debuggers, editores de recursos, editores PE…) su trabajo para facilitarnos este tema del crackeo, os imagináis hacer esto sin contar con alguna de estas herramientas ¿? Buff!!!

 

Si teneis alguna duda buscadme por la red.

Nos vemos.

 

Capitulo siguiente

                                                                                                 


Abril 2004

Pagina oficial del curso

 

Gracias a ...