Hola
En esta ocasion voy a mostrar la resolucion de este crackme (http://crackmes.de/users/shadow_/shadows_registerme/) hecho en .net, no es demasiado dificil, consta principalmente de una nag al abrir, un formulario donde introducir usuario y contraseña y otra nag al salir.
Tiene proteccion anti olly.
Esa es toda la estructura que tiene el crackme, empezaremos intentando entender el algoritmo de generacion de seriales, para ello usaremos ilspy e ildasm. En ilspy veremos el codigo desempacado, debemos buscar en el boton register que es el que verifica nuestras credenciales.
Este es el codigo que nos devuelve
[code2=cpp]private void Button1_Click(object sender, EventArgs e)
{
this.shadow = this.rand.Next(1, 99999999);
if (Operators.ConditionalCompareObjectEqual(this.TextBox2.Text, Operators.ConcatenateObject(this.TextBox1.Text + this.TextBox3.Text + this.TextBox4.Text + this.TextBox5.Text + this.TextBox6.Text + this.TextBox7.Text + this.TextBox8.Text + this.TextBox9.Text + this.TextBox1.Text, this.shadow), false))
{
this.Button2.Enabled = true;
this.Button1.Enabled = false;
this.Button1.Text = “Registered to Shadow”;
this.Text = “Registered to Shadow!”;
}
else
{
Interaction.MsgBox(“Incorrect serial, noob.”, MsgBoxStyle.OkOnly, null);
}
}[/code2]
El codigo lo que hace es declarar una variable a la que le asigna un valor numerico generado de forma aleatoria y luego lo concatena con la informacion de una serie de textbox. Ahora tenemos que buscar que informacion contiene cada textbox, ya que en el formulario solo aparecen 2 y ahi vemos que hay hasta 9.
La informacion que buscamos la encontramos en
Echando un vistazo vemos que el textbox1 corresponde a nuestro nombre de usuario y el textbox2 es el correspondiente a la contraseña. El resto de textbox hacen una concatenacion de la siguiente manera
‘username’ur’a’stupid’dumb’idiotic’crazy’noob’username’numero aleatorio
*Sin comillas
Generar un algoritmo/keygen para generar seriales validos deberia ser muy facil de no ser por el numero aleatorio del final (hasta 99999999). Para resolver este problema intentaremos ver si se puede sustituir el numero random por un numero fijo, ya que de no ser asi cada vez que generasemos un serial tendriamos una posibilidad entre 99999999 de que fuese valido, algo totalmente ridiculo.
Para ello vamos a ildasm y buscamos el boton register
Pero que buscamos exactamente aqui? Buscamos el numero 99999999 en hexadecimal para saber donde esta y en que zona mas o menos tenemos que buscar
Podemos usar mismamente la calculadora de windows
Ya sabemos que el numero aleatorio estara identificado en el codigo con 5F5E0FF
Esta es la linea que buscamos
IL_0008: /* 20 | FFE0F505 */ ldc.i4 0x5f5e0ff
Ahora tenemos que localizar la zona donde empieza este procedimiento, osea el offset.
Method begins at RVA 0x2f60
Esa linea es la que nos interesa, el
RVA = (VA – RA)
Ahora buscamos el VA y el RA con el programa peID
RA = 00002000
VA = 00000400
Simplemente restamos (hexadecimalmente) y obtenemos
1C00
Ahora le restamos 1C00 a 2F60 = 1360
Ahora abrimos nuestro crackme con un editor hexadecimal y nos dirigimos al offset 0x1360
Ahi tenemos marcado en verde el offset buscado y recuadrado en azul el numero aleatorio, ahora simplemente vamos a ahcer que ese numero no sea aleatorio sino que sea siempre 1.
Tal que asi.
Ahora vamos a crear un keygen, ya que el algoritmo consiste en una concatenacion vamos a hacer algo rapido en lenguaje batch
[code2=batch]@echo off
color a
:inicio
set/p nom=nombre de usuario?=
pause
cls
echo la contraseña es:
echo %nom%urastupiddumbidioticcrazynoob%nom%1
pause
cls
goto inicio[/code2]
De este modo y usando como nombre de usuario reversecoder.tk
obtenemos:
reversecoder.tkurastupiddumbidioticcrazynoobreversecoder.tk1
Verificamos
Ahora solo nos quedan las nags del principio y del final, para ello haremos un procedimiento parecido, localizaremos su posicion en memoria y quitaremos ese procedimiento.
Para la nag 1 que sale al abrir, buscamos en el ildasm
Vemos que su RVA es 3088, hacemos el mismo procedimiento que antes, es decir, le restamos 1C00 y obtenemos el offset donde se encuentra el procedimiento
0x1488
Nopeamos todas las instrucciones con ceros exxcepto el ret
Para la nag2 exactamente lo mismo, su posicion en memoria seria
3074 – 1C00 = 1474
offset nag 2 = 0x1474
Parcheamos
Ya tenemos resuelto el crackme con proteccion anti ollydbg y desarrollado en net.
Fuente:reversecoder.tk