CraCKeaR uN PRoGRaMa eMpaCaDo II

 

Para empezar, un programa empacado es un programa comprimido (siii!! como lo que hace el WinZip), pero con programas ejecutables. Existen varios empacadores como: Aspack, UPX, Crunch, PCShrink, PePack, etc

Estos programas se basan en un algoritmo de empaquetado, que afecta a casi todo el programa. Lo unico que no empaca es el encabezado con la informacion del fichero y su propia rutina de desempaque en Runtime (es decir cada vez que lo ejecutamos se desempaca), lo habitual es que los programas empacados comiencen asi:

PUSHAD <-- Guarda todos los registros
CALL [address] <-- Llamaa la rutina que desempaca el programa
POPAD <-- Devuelve todos los registros de la pila
JMP "address" <-- Salta al comienzo del programa, el cual ya esta desempacado

Si quereis meteros en el tema en profundidad coged los tutoriales de numit_or sobre encabezamientos PE, no son buenos, ni muy buenos.... son EXCELENTES!!! Mirad en la seccion de "Enlaces a tener en cuenta".


Despues de esta pequeña introduccion empecemos con el crackeo ;-D


¿Cómo podemos saber si un programa esta empacado? Bueno la gran mayoria de las veces, por no decir siempre, cuando un porgrama esta empacado es imposible desensamblarlo o las intruccuiones del desensamblado son incoherentes; otra de las caracteristicas es que no puedes cargarlo en el Loader del SICE (aunque eso es por otras causas que ahora expicaremos); y por ultimo si entramos en el codigo del programa a traves del SICE por un bpx las direcciones suelen ser "raras" es decir 500100 o asi.


- Despues de haber comprobado o deducido que el programa esta empacado debemos meternos el el ProcDump (si quereis saber como se usa entrad en la seccion pertinente ;-)) y miramos su encabezamiento PE, veremos que en la seccion de .text ó .CODE en el apartado de Caracteristics estara C0000040 (esto indica al SICE, aunque no solo a él, que el programa no es ejecutable, por ello no "rulaba" el Loader), asi que debemos cambiar
C0000040 por E0000020 (el cual nos indica que es un archivo ejecutable).


- Despues de esto entramos en el Loader del SICE y cargamos el programa y... joe! ahora si que rula xDDDD entramos en el codigo y veremos lo que os dije al principo de esta seccion eso de PUSHAD etc. Bueno pues lo que nosotros debemos hacer es buscar el POPAD que devuelva los registros y que nos lleve al codigo desempacado. Para ello debemos tracear bastante (F10).


-TRUCO: Mas que un truco es algo de logica que no a todos se les ocurre. Cuando traceamos tanto en el código es habitual encontrar bucles, asi que para no tragarnoslos cuando encontreis un salto hacia arriba haceis G address siguiente al salto, asi nos lleva a la siguiente isntruccion y no debemos tragarnos eternos bucles ;-)


- Una vez encontrado el POPAD debemos poner S (address del POPAD) L FFFFFF 61 (61 es el codigo en hexadecimal del POPAD) y darle al run (F5). Si al hacer esto el programa se carga... es que hemos encontrado la rutina adecuada!!! si no es asi a por el siguiente POPAD :-( Despues de esto volvemos al SICE a la direccion del POPAD y continuamos, id tranquilos porque cerca (a unos 4 o 5 F10) encontraremos un RET, apunta la direccion de RET!!! Si le damos F10 de nuevo veras que nos lleva a otra parte del codigo diferente y cuya direccion (la cual apuntaremos tambien) es algo como 4XXXXX COÑO!!! Esto es el codigo desempacado!!!! xDDD


- Volvemos al RET ese y ponemos A (address en la que este ese RET) y JMP EIP, [Esc] y F5. Salimos de SICE pero... no pasa nada! Pues si que pasa algo, con esto que acabamos de hacer hemos generado un bucle infinito que hace que el programa se cargue en memoria, lo mejor es que lo que esta cargado en memoria es el programa ya desempacado :-D


- Nos metemos de nuevo en el ProcDump y en la ventana inicial veras los programas cargados en memoria, si buscamos alli estara nuestro programilla. Una vez detectado lo selecionamos con el boton derecho y le damos a Dump(Full) y lo guardamos con otro nombre. Despues de esto tenemos nuetro programa desempaquetado y guardado, el cual puede ser desensamblado y petado. Observareis que el programa que hemos guardado es el mismo programa pero que ocupa un poco mas que el otro :-)


- En esta seccion no os dire como crackearlo, para ello ya estan las otras secciones ;-)