|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
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. 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 = 4010C8 – 401000 + 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. |
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|