Karpoff Spanish Tutor

Programa:

Krackme KeyFile


 

PROTECCION: (1)- Empaketado.(2)- Rutinas antidebugging.(3)- Protección keyFile.
Objetivo: Hacer un Keygen, Simular estar registrados, etc.
Descripcion: Tal tal tal
Dificultad: ??????
DOWNLOAD: ??????
Herramientas: - ProcDump.- SoftIce.- W32Dasm.- Heditor Hexadecimal.
CRACKER: Nopper   FECHA: 14/7/2000

 

 introduccion

buenaz, soy nopper, y este es mi tuto sobre el crackme keyfile hecho por +dza kraker de tnt! publicado el 14 de julio del 2000. si habeis leido la info k viene con el tuto sabreis k es un crackme de nivel newbie ( acorde con mi skill, sea dicho de paso ), asi k si buscais un pedazo de tuto no os leais esto.

bueno, empecemos, vamos a rajar a nuestra victima en canal para poder examinarlo mejor, asi k preparad vuestros guantes de latex, vuestras mascarillas de cirujano loco y vuestra musica preferida para pasar un buen rato de disección digital xd.

 

 al atake


 (1)-<< empaketado >>
bueno, el desempaketado lo voy a hacer manualmente pork: 1º) el gettype no me chutaba bien con este crackme ( no se pork ) 2º) por k me gusta hacerlo as
í y 3º) pork es mas didáctico ( no podemos estar a espensas de esperar a k salga el desempaketador de nuestra victima ).
ok, primero nos vamos a nuestro procdump y editamos las secciones de código con el atributo e0000020, estas suelen ser nombradas como .code, .text y también la sección de código del propio cargador, en este caso aspack, en caso de duda o de k todas las secciones lleven nombres iguales, pues aplicale el atributo a todas las secciones. este atributo permite k las secciones sean editables, asi nuestro softice podrá romper inicialmente en la primera de línea de código, de no ser asi, no romperá y el programa se ejecutará del tirón.
ahora vayamos a nuestro sice y ejecutemos a la victima, aterrizamos en la primera línea de código del cargador k es un pushad, bien esto es tipico de todos los cargadores, la estructura típica de un cargador es:
pushad ( empuja todo los registros de proposito general )
call xxxxxx ( algoritmo de deskompresión )
popad ( recupera todos los registros de proposito general )
ret o jmp ( salto hacia la primera linea de código del programa desempaketado )
pues lo interesante ahora es buscar un trozo de código del tipo popad seguido de un ret o jump.
pero no empeceis a buscar ahora, pork el propio cargador esta encriptado, asi k empezar a darle a f8/f10 durante unos segundos para k de tiempo a la desencripatación, id de vez en cuando mirando desde el final del cargador hacia arriba hasta buscar algo interesante. nota: seguro k estais pensando lo poco elegante, poco estricto e intuitivo del sistema, pero creedme, es tan solo cuestión de practicar, cuando lleveis unos cuantos desempaketamientos manuales vereis las cosas al vuelo y no tardareis mas de 5 minutos en sacarlo.
bueno si habeis mirado un poco por ahi vereis k en la linea 40626f aparece un popad y despues un j
mp k dan bastante el cante. si seguiis traceando vereis k salta a 401000, bien! ese es el comienzo del programa, ya desempaketado. arrankemos otra vez el sice, y pongamos un break en 40626f cuando este esté desencriptado. ahora ensamblemos: a eip, y poned jmp eip, esto se hace para k el programa kede en un bucle infinito y nos permita volcar el programa de una forma limpia y sin errores, ahora id al procdump y en la sección task dumpear el programa (botón derecho-dump/full). ahora cambiemos el punto de entrada para k nuestro volcado empiece correctamente esto lo conseguimos restandole a 401000 (inicio del programa ya desempaketado) a la base, en este caso 400000, esto es igual a 1000, y ya está, lo tenemos!!!.



nota :si teneis algun problema o no entendeis algo recomiendo leer los documentos genericos de mr.orange y mr.blue sobre desempaketamiento manual k podreis encontrar en el ecd.

(2)-<< antidebug >>
bueno, de entrada decir k aunke useis frogsice nos va a detectar el sice, asi k kojamos y hagamos un listado muerto de nuestra victima con nuestro w32dasm. si echais un vistazo a las strings references veremos 2 frases muy interesantes: " a debugger has been detected, quiting" y "numega softice detected, quiting", bueno pues estas frases son volcadas a pantalla con messagebox y por encima de estos messagebox aparecen de forma clara y sin ningun tipo de complicacion alguna los saltos condicionales k controlan su ejecución:

bien pues fácil, no? capamos el salto con un par de nop y resuelto, así llegaremos al salto incondicional y nos libraremos de ese mensajito k tanto nos da por culo.

con este tampoco hay problem no? forzamos el salto con un jmp y punto.
todavía nos keda un tercero k se encuentra en la linea 401430 el cual es posterior a un call k llama al registro para buscar rastros de nuestro amado sice, asi k con este también lo forzamos a un incondicinal con un jmp y terminado.

(3)-<< keyfile >>
bueno ahora comienza las comprobaciones de existencia del keyfile, reserva de memoria para su lectura y posterior comprobación con un bloke de bytes k el crackme guarda por algun lado.
de entrada si ejecutamos nuestro programa con lo k llevamos hecho nos saldra un mensaje del tipo:"where the hell is my keyfile?", es decir, no encuentra el archivo por ningun lado y nos lo echa en cara. buenos si os fijais este mensaje viene de un salto q es posterior a una llamada a la api openfile, si os fijais en el parametro k se le pasa como path, esta es "c:\crackme.lic", linea 401476 push 40202c. pues nada si él kiere un archivo llamado así en c:\ nosotros no vamos a impedirselo, no? cojamos el editor del dos y creemos uno.
posteriormente veremos algunas apis relacionadas con la reserva de memoria, comprobando si nuestro crackme no esta vacio, es decir contiene al menos 1 byte, sino mostrará el siguiente error por pantalla "memory alloc error, quiting."
pues rellenemos con algo de basura nuestro crackme ficticio y problem resuelto. ahora si seguimos tracenado se nos avisara de k nuestro keyfile no es el correcto "invalid key file dude... are you trying to trick me?" buenos es el último punto k nos falta, ahora miremos en nuestro listado muerto y veremos una string donde dice: "good job...." umm interesting, vemos k a esta linea se accede desde un salto proveniente de 401528, si os fijais en esa porcion de código y traceamos un poco veremos k está comprobando 2c bytes empujados a ecx ( es decir, 44 bytes) de nuestro estro keyfile con la porción de código k lo valida indicada por esi, pues tan solo nos falta fijarnos dnd se encuentra ese bloke y copiar los primeros 44 bytes con un heditor hexadecimal a nuestro crackme y ya está!!!. crackme resuelto :)



resultado:


happy cracking.

saludos para toda la peña del canal #crackers del hispano.
para cualkier apreciación:
herobit@mixmail.com
nopper.

 

karpoff spanish tutor: pagina dedicada a la divulgacion de informacion en castellano, sobre ingenieria inversa y programacion. email "colabora con tus proyectos"
www.000webhost.com