Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: mickro en 19 Marzo 2009, 00:23 am



Título: Cracking .Net AYUDA!
Publicado por: mickro en 19 Marzo 2009, 00:23 am
Estoy dando mis primeros pasos con el cracking, y para empezar estoy practicando con la plataforma .Net, ya que es mas sencillo.
Bueno, resulta que el me he bajado un componente/control para el .net. Nose si las normas del foro me permiten decir el nombre del producto, pero el software sirve para agregar a tus proyectos la administracion de usuairos, roles, permisos, ect.
Al instalarlo su me copiaron 5 archivos dll. Inmediatamente abri el proyecto de prueba que viene con el instalador para observar que limitacion tenia dicho producto.
Y la unica limitacion que existe es que permite administrar hasta 4 usuarios.
Bien, una vez hecho eso abrí las dll con el Reflector y para mi sorpresa el assembly no estaba ofuscado, esto facilito mucho mi tarea, ya que lo unico que tenia que hacer era buscar el lugar en donde el software hacia el control (de no permitir mas de 4 usuarios) y modificarlo.
Cuando encontre la dichosa linea, vi que era un simple If:

Código:

if(context.Runtime.RolesProvider.GetMaxUsers(utcNow) <= ((int) context.PrincipalManager.GetSpecialValue("count")))
{
  VGTrace.WriteLineIf(VGTrace.TraceError, SR.UserCreationNotAllowedMaxUserHasBeenReached);
  status = VGMembershipCreateStatus.TooManyUsers;
  return null;
}


El metodo context.Runtime.RolesProvider.GetMaxUsers() devuelva la cantidad de usuarios permitidos por este trial, en este caso 4 y context.PrincipalManager.GetSpecialValue("count") devuelve la cantidad de usuarios ya ingresados en el sistema.
Luego, utilizando ildasm y ilasm logre modificar ese if y que de la siguiente manera:

Código:
if(context.Runtime.RolesProvider.GetMaxUsers(utcNow) <= 0) 
{
  VGTrace.WriteLineIf(VGTrace.TraceError, SR.UserCreationNotAllowedMaxUserHasBeenReached);
  status = VGMembershipCreateStatus.TooManyUsers;
  return null;
}


es decir, nunca va a dar verdadero y nunca va a entrar en ese if, que era mi objetivo. En realidad, el verdadero objetivo es que no se ejecute esta linea:

Código:
status = VGMembershipCreateStatus.TooManyUsers; 

Bien, hasta aqui todo bien....pero no. Resulta que la dll estaba firmada (strong name) y aqui empezo mi calvario.
Con la ayuda de la herramienta CFF Explorer removí el Strong Name Signature, pero de vuelta al visual studio me salio el siguiente error :

No se puede cargar el archivo o ensamblado 'xxxxxx.xxxxx.xxxxxxx, Version=2.8.812.19, Culture=neutral, PublicKeyToken=8e423a8f05ffd0dc' ni una de sus dependencias. La definición del manifiesto del ensamblado no coincide con la referencia al ensamblado. (Excepción de HRESULT: 0x80131040)

Pueden ayudarme???, por donde sigo?
Gracias de antemano.


Mickro


Título: Re: Cracking .Net AYUDA!
Publicado por: KJD en 19 Marzo 2009, 01:46 am
No conozco mucho de firmas digitales, pero podria ser tambien que checkee el si se ha modificado algo dentro de la dll.

Ahora, no hay algo que emule la firma digital??


Título: Re: Cracking .Net AYUDA!
Publicado por: mickro en 19 Marzo 2009, 13:35 pm
SI, checkea si se ha manipulado la dll. Asi funciona, por eso elimine el strong name signature.
Pero al eliminarlo me tira esto cuando algun proyecto intenta cargar la dll :

No se puede cargar el archivo o ensamblado 'xxxxxx.xxxxx.xxxxxxx, Version=2.8.812.19, Culture=neutral, PublicKeyToken=8e423a8f05ffd0dc' ni una de sus dependencias. La definición del manifiesto del ensamblado no coincide con la referencia al ensamblado. (Excepción de HRESULT: 0x80131040)


Título: Re: Cracking .Net AYUDA!
Publicado por: KJD en 19 Marzo 2009, 15:01 pm
Lamentablemente no se tanto sobre c# (y eso que programo con el), lo unico que se me ocurre es ver si se puede emular el strong name para dejarlo como antes.


Título: Re: Cracking .Net AYUDA!
Publicado por: KJD en 19 Marzo 2009, 15:16 pm
Perdon por el doble post, pero queria seprar los dos temas.

Si bien no tengo idea sobre strong names, leyendo en google encontre un post que explica como "clonar" el strong name de una dll incluso saltear la verificacion de este. te dejo los links, pero eso si, postea si pudiste hacer algo, y si te animas hace un tutorial ya que no hay muchos por ahi.

Código:
http://www.atrevido.net/blog/2004/11/28/Cracking+Code+4+Replacing+A+Strong+Name.aspx

http://groups.google.co.uk/group/microsoft.public.dotnet.security/browse_frm/thread/268e8fab2a7124df?hl=en&lr=&rnum=2&prev=/groups%3Fq%3DRahul%2BKumar%2Bgroup:*security*%26hl%3Den%26lr%3D%26selm%3D%2523UDXSOX0EHA.3820%2540TK2MSFTNGP11.phx.gbl%26rnum%3D2


Saludos y espero noticias  :D


Título: Re: Cracking .Net AYUDA!
Publicado por: Mintaka en 20 Marzo 2009, 14:10 pm
Hola a tod@s.
Mira a ver si te pueden ayudar estos otros dos tutoriales:

http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/901-1000/911-Evadiendo%20StrongNames%20de%20.NET%20con%20OllyDbg%20-%20por%20marciano.rar

http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/1001-1100/1041-StrongNames%20y%20Reflexil.rar

Suerte,

Mintaka


Título: Re: Cracking .Net AYUDA!
Publicado por: KJD en 20 Marzo 2009, 14:37 pm
Mintaka comom siempre impecable, es lo mismo que encontre yo pero mejor explicado y en castellano  :D

Ahora no se si servira para framework 3.0-3.5, esperemos que mickro de alguna respuesta si le sirvio.


Título: Re: Cracking .Net AYUDA!
Publicado por: mickro en 21 Marzo 2009, 07:34 am
Primero gracias por ayudarme. Este foro es excelente!.
Ahora bien, les cuento que he tenido novedades, mas tarde o mañana con mas tiempo posteo algo.
Nuevamente gracias a todos!

Mickro