Crackme | Nivel 2 | .NET

En esta ocasion voy a mostrar la resolucion de este crackme 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.

1 2 3 4

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.

5

Este es el codigo que nos devuelve
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);
}
}

 

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

6

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

7

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

8

Ya sabemos que el numero aleatorio estara identificado en el codigo con 5F5E0FF

 

9

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

10

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.

11

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

@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

De este modo y usando como nombre de usuario reversecoder.tk 

obtenemos:

22

reversecoder.tkurastupiddumbidioticcrazynoobreversecoder.tk1

Verificamos

33

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

44

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

55

Para la nag2 exactamente lo mismo, su posicion en memoria seria

3074 – 1C00 = 1474

offset nag 2 = 0x1474

Parcheamos

66

Ya tenemos resuelto el crackme con proteccion anti ollydbg y desarrollado en net.

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s