Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: pezpc en 28 Noviembre 2004, 04:05 am



Título: Crackear un componente .net
Publicado por: pezpc en 28 Noviembre 2004, 04:05 am
Estoy intentando crackear un componente web para manipulación de imágenes. El componente esta compilado en .net. He intentado descompilarlo, pero el ensamblado esta protegido con un obfuscator y no puedo recompilar el código descompilado. Para poder usar el componente en otros programas hay que incrustar una licencia, en el ensamblado de nuestro programa, que nos es proporcionada por email al descargar el programa.

Protecciones:

-El fichero que contiene la licencia es un fichero xml y esta firmado con el algoritmo RSA y por lo tanto solo dispongo de la clave publica que se encuentra en otro fichero xml incrustrado en la dll del componente.

-El componente a su vez esta firmado el algoritmo RSA y solo dispongo de la clave publica.


Problemas:

Tengo dos posibilidades para crackear el componente. Se exactamente que punto del programa devuelve true o false si la licencia es correcta o no, y también se que texto hay que poner el fichero xml de licencia para que devuelva true la función que lo comprueba. Mi problema es que tanto si modifico la dll como el fichero de licencia recibo un error al intentar usar el componente pues comprueba que el contenido ha sido alterado y los hash no coinciden. Y ahí es donde me pierdo no se como calcular un nuevo hash valido para  el componente o para la licencia.


Mi interés por el componente es únicamente educativo pues este solo vale 20 $ y además es fácil programar uno parecido. Pero estoy interesado en aprender un poco mas sobre cracking para poder proteger mis aplicaciones y por ello estaría enormemente agradecido al que ayudara o me explicara que posibilidades hay de crackear este componente.


Título: Re: Crackear un componente .net
Publicado por: Unravel en 8 Enero 2005, 13:35 pm
Te da igual el calcular un nuevo hash, porque luego deberías firmarlo, y no tienes la clave privada.
El proceso lógico que debería hacer esa protección es el siguiente.
El programa (o quien sea) calcula un hash de parte del código o de la licencia, luego descifra con la pública el hash que tiene almacenado de su código original (la firma) y los compara. Si no coincide es que algo a cambiado.
Ahí es donde tienes que atacar, y saltarte la condición que compare los hashes.

Si esto es una movida porque lo compara el SO directamente o algo así, tb puedes generarte una pareja privada/publica, realizar las modificaciones, calcular luego el hash (según los bytes y las cabeceras sabes que algoritmo usa), cifrarlo con tu privada, guardarlo encima del anterior y cambiar la pública del componente, que ya la conoces.

En cualquier caso, si lo consigues, coméntamelo, porque no debe de ser nada fácil.