|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Seguiremos
los mismos pasos que en el capitulo anterior para resolver el empaquetado
ASPACK veremos nuevas formas de desempacar gracias al packer FSG |
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Estas tres instrucciones: PUSH EBP 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
PUSH EBP C Crackme de
Cokeing PUSH EBP MOV EBP,ESP SUB ESP,X Visual
Basic crackme de
Doblecero 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 Como muchas veces la flauta suena
por casualidad me decido a volcarlo desde aquí como siempre
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. |
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|