PROGRAMA

      

PROTECCION

     

HERRAMIENTAS

cyTOm!c`s ASPACK 1

Crackme FSG Cokeing

 

FSG Scarabee 2

 

ASPACK

 

FSG

 

Olly Debugger

Peid

PE_Editor

 

 

 

 

 

     NIVEL: Homínido

 

 



 Continuar avanzando en el tema empaquetados

Seguiremos los mismos pasos que en el capitulo anterior para resolver el empaquetado ASPACK veremos nuevas formas de desempacar gracias al packer FSG

 



Antes de comenzar el desempacado (este capitulo tendrá menos rollo escrito y mas acción, jeje) quiero mostraros algo que os comente por encima en el capitulo anterior:

Estas tres instrucciones:

PUSH EBP
MOV EBP,ESP
ADD ESP,XXX

Son características del comienzo de los programas escritos en Delphi.

Veremos el comienzo de los programas escritos en otros leguajes para que tengáis una referencia a la hora de encontrar el OEP.

 

Delphi

Crackme de karpoff     crackme de Joe Cracker

PUSH EBP
MOV EBP,ESP
ADD ESP,-XXX

 

C

Crackme de Cokeing     otro crackme de cokeing

PUSH EBP

MOV EBP,ESP

SUB ESP,X

 

Visual Basic 

crackme de Doblecero   crackme de Shoulck

 

Podéis observar que encima del OEP se ven los saltos a las apis/dlls del crackme 

 

 

 

Estos saltos tendremos que verlos en capítulos posteriores cuando empiecen a complicarse las cosas, (por desgracia) de momento quedaros con como es el inicio del crackme /OEP.

PUSH Crackme_.XXX

CALL <JMP.&MSVBVM60.#100>

ADD BYTE PTR DS:[EAX],AL

ADD BYTE PTR DS:[EAX],AL

ADD BYTE PTR DS:[EAX],AL

XOR BYTE PTR DS:[EAX],AL

ADD BYTE PTR DS:[EAX],AL

INC EAX

 

 Visual C++

Crackme de Shouck 

PUSH EBP

MOV EBP,ESP

PUSH –X

 

TASM/MASM (ensamblador)

Crackme de Cruehead  

Crackme de Abex     

 

PUSH

CALL      <JMP.&KERNEL32.GetModuleHandleA>    ; \GetModuleHandleA

MOV DWORD PTR DS:[XXXXXX],EAX

PUSH 0

PUSH CRACKME XXX

 

 

Estas son algunas de las pistas que sigo a la hora de orientarme para saber si he encontrado el OEP, aparte claro esta de comprobar si la dirección que pienso que es el OEP esta dentro de la sección code del crackme.

Supongo que los maestros se reirán pero es el método que yo empleo y de momento en mi poca andadura me ha servido para orientarme.

Como siempre espero correcciones y ayudas para seguir aprendiendo.

Basta de rollo y vamos al tajo.

Utilizaremos el crackme del capitulo pasado sacado del curso de Ricardo, con la diferencia de que esta vez el packer será ASPack.

 

Desempacando ASPACK

Seguiremos los mismos pasos que utilizamos con PE Compact a la hora de resolver este primer empaquetado.

Analizamos con Peid y vemos la protección ASPack 2.12, aprovecho para orientarme un poco por si tuviera problemas a la hora de encontrar el OEP y utilizo el plugin generic OEP finder del Peid,  repito: solo para orientarme y me dice que el OEP se encuentra en la dirección 4251D0 (jeje, esto es lógico estoy utilizando el mismo crackme que en el capitulo anterior solo que con distinto empacador, por tanto: mismo crackme = mismo OEP, lógico) creo que así nos será mas fácil ir iniciándonos en el tema.

Cargo el crackme en Olly y miro las strings references: basurilla

Pasados los cartelitos de aviso la primera dirección en la que para Olly es un PUSHAD, en el capitulo anterior vimos que teníamos que bajar un poco con F7 hasta llegar al primer  pushad, sin embargo aquí aparecemos justo encima del primer pushad.

 

Si queréis podéis mirar el memory map (alt+M) y ver que estamos fuera de la sección code, estamos en una  sección llamada .aspack, jeje.

 visto esto pulsamos una sola vez F7 para pasar el pushad y en ESP hacemos follow in dump

Fijaros en el Stack igual que en el cap anterior vemos EDI en primer lugar y los demás registros a continuación, en la ventana del dump hacemos lo mismo: sombreamos los primeros 4 pares de la izquierda (que pertenecen a EDI pero “escritos al revés”) y ponemos un BP Hardware on acess Dword

Pulsamos F9 y aparecemos aquí:

Bajamos pulsando poco a poco F7 y llegamos al RETN

Pulsamos una vez mas F7 y aparecemos aquí:

Que raro, la dirección coincide con la que Peid nos dijo que era el OEP (además nosotros ya lo sabemos del capitulo anterior) pero no vemos código, vamos arreglar esto.

Nos ponemos en la línea donde esta Olly parado y click derecho – Analysis – Remove analysis

Ya vemos el código como es debido

Y –recordemos que este crackme esta escrito en Delphi- las tres instrucciones clave:

Por tanto hemos encontrado el OEP traceando, coincide con el que nos da el Peid, procedemos a hacer el volcado del exe desde el plugin del Olly

Pulsamos get eip as oep y luego dump, le damos un nombre y ya tenemos el exe volcado y con el OEP que nosotros queremos.

Los pasos para aspack son los mismos que vimos para PECompact

Probamos que el volcado funciona ejecutándolo y luego lo abrimos en Olly (el dumpy.exe) para que veáis realmente que ahora Olly para en el OEP bueno, el que nosotros le indicamos que cambiara, también vemos que no aparece el cartel de “aviso empaquetado”

Vemos ahora las strings references

ASPack resuelto.

 

Ahora alguno dirá: “ya se desempaquetar” pues no amigo, ni esto es matrix (“ya se kung-fu”) ni todos los empaquetadores se hallan con “la formula del PUSHAD” como veremos al analizar el siguiente crackme.

 

Desempacando FSG packer

 

Siguiendo los pasos del maestro Narvaja  y sus acólitos veo en su curso este empaquetador, en ese capitulo se halla el OEP gracias al plugin OllyDump find OEP, muy rápidamente pero esto a mi no me convence, no quiero decir que no funcione, sino que necesito mas.

Como en un tanto por ciento muy elevado de las veces decido investigar por mi cuenta.

Como tengo la colaboración de varios coleguitas hacedores de crackmes (entre otras cosas) y para esta segunda parte del curso me baje varios packers para ir probándolos y saber algo el tema del que debía tratar, decido empacar con FSG el crackme 1 de Cokeing y probar por otro camino distinto que el del tuto de Ricardo. Perdón maestro por apartarme del camino. ;)

Analizo con Peid me dice que esta empacado con FSG pero no me resuelve el OEP para darme siquiera una pista.

 

 

Cargo el crackme en Olly y aparezco aquí, en el EP del packer.

 

 

Para orientarme miro el memory map para ver en que sección estoy y donde comienza la sección code, donde supuestamente (según Ricardo en el 90%) debe encontrarse el OEP

 

 

Estoy fuera de de la sección code y veo que la sección code empieza en 401000 como llego hasta ahí ¿?

Mi lógica me dice que busque el primer pushad y repita el mismo proceso que para anteriores packers pero mirad que decepción me lleve: ni un pushad cercano

 

 

Como soy un poco cabezón y la esperanza es lo ultimo que se pierde seguí buscando mas a ver si veía algo que me diera una pista y encontré esto:

 

 

Un salto condicional a la sección code del crackme, exactamente al principio de la sección code, voy a poner un BP a ver que pasa …

 

 

Me sale el cartel que vimos en un capitulo de la primera parte del curso avisando que poner un BP aquí puede tener desastrosas influencias  y paso de el como de comer mi€rd@ y pongo el BP con dos c#j#n€s a ver que pasa, que ya es hora de arriesgarnos.

Cuando para en el BP veo que no toma el salto, y no me gusta (iba a decir me j#d€, pero después de las dos chulerías anteriores creo que basta por este capitulo) pues quiero llegar a esa zona a ver si encuentro alguna pista para hallar el OEP

 

 

Cambio el salto para saltar directamente a 401000 y examinar esa zona poniéndole un JMP directo y lo ejecuto/rebaso pulsando F7 una vez

 

 

Aparezco aquí:

 

 

Como no veo nada hago lo mismo que en el crackme anterior  y me encuentro, OH! sorpresa, con lo que parece un OEP de un programa en C

 

 

Como muchas veces la flauta suena por casualidad me decido a volcarlo desde aquí como siempre

 

  luego  y después

 

Pruebo el crackme dumpeado/volcado pero no funciona,  si cargo el dumpeado en Olly se ven las Strings pero el programa da error de ejecución.

Pruebo el plugin Find OEP de OllyDump y este después de unos pocos segundos me para (lo localiza) en el OEP que yo he encontrado 401000

Bueno al menos este intento fallido me sirve para asegurarme de cual es la dirección verdadera del OEP

 

Bueno como soy un desconfiado y del que menos me fío es de mi mismo voy a probar si pasa lo mismo con el crackme del curso de Ricardo.

El crackme se llama Scarabee crackme 2

Lo cargo en Olly y aparezco aquí:

 

 

Miro donde estoy y donde se halla la sección code

 

 

Busco mas abajo en el código y no veo pushad ninguno, lo cual me hace ver que cada packer tiene sus características propias.

Voy hasta un salto condicional que me envía a la zona code de este crackme, fijaros que no me envía al principio como el crackme de Cokeing pero si a una dirección dentro de la sección code que es el OEP de este crackme: 00401200

Lo vemos marcado en rojo y al probar con el plugin del OllyDump nos confirma el OEP.

 

 

Este fue un intento fallido para buscar por mi cuenta otra forma distinta de volcar el exe y resolver este packer pues no me basta solo con copiar lo que dicen otros crackers, ya sabéis que el fin de este curso es explicarlo todo lo mas fácil posible, además esta forma fallida de buscar el OEP si nos dará resultado para encontrar el OEP en otros packers.

 

Un apunte:

en los dos crackmes anteriores hay un salto a la zona de código (desde donde se salta al OEP) estos saltos están marcados por el símbolo    (guión)

En los capítulos anteriores señale que el símbolo > marcaba los principios de instrucción

El significado de este símbolo (-) es salto a una dirección lejana fuera de la sección del ejecutable en la que nos encontramos.

 

Como lo desempacan en el curso de Ricardo y como debemos desempacarlo nosotros ¿?

 

Hago un copy paste salvaje del texto de Orimagic para que lo leáis tal cual, solo haré algunos apuntes si lo veo necesario.

Desempacado del FSG del crackme de Scarabee :

Este es el único empaquetador que no reconoce ni el Pe-Identifier ni el Pe-Scan. Como sabemos entonces que esta empacado con FSG. Bien al cargarlo en el Olly nos dice que el OEP está fuera de la sección de código, es decir que se encuentra empaquetado. Bueno una vez cargado en Olly, hallemos el OEP. Nos vamos a Plugins – OllyDump - Find OEP by Section Hop (Trace Over), y tras unos 30 segundos, se nos para en 00401200. Vamos a view – memory, para asegurarnos de que nuestro OEP, se encuentra en la sección de código, y así es ya que la sección de código empieza en 00401000 y llega hasta 00405000-1.

 

Nota de Ratón: no se la fecha en que se escribió este tuto de Orimagic, pero ahora el Peid si descubre el FSG

Así que dumpeemos a partir de esta dirección. Plugins – Ollydump – Dump Debugged Process.

Nota de Raton: si al volcar y ejecutar el exe  no os funciona con el método 1 probad a volcarlo con el método 2

Salvamos a disco y ya está dumpeado, lo probamos también funciona, por lo que no nos es necesario arreglar la IAT en este caso tampoco.

Nota de Raton: de momento esto de la IAT nos viene muy grande de momento (al menos a mi), ya hablaremos de ello (por desgracia)

 

Por último agradecer a todos los listeros de crackslatinos, y en especial a Ricardo Narvaja, que siempre está ahí cuando se le necesita y que cada día nos enseña un poco más.

Nota de Raton: yo no voy a ser menos pelota ;) mi agradecimiento a todos ellos igualmente y además te  agradezco a ti Orimagic este tuto que me dejo el trabajo prácticamente hecho.

Los pasos descritos por Orimagic para resolver este crackme sirven para cualquier otro crackme empacado con FSG, tened en cuenta que cada crackme es distinto y el OEP y las direcciones variaran.

Bueno mate dos pájaros de un tiro y además descubrí (quizás ya estuviera explicado por ahí, pero para mi es mi descubrimiento personal de la semana) la forma de hallar el OEP de un programa empacado con FSG si necesidad de utilizar el plugin.

 

Nos vemos.

 

Capitulo siguiente

                                                                                                 


Marzo 2004

Pagina oficial del curso

 

Gracias a ...