Saludos indetectables
En esta ocasion voy a mostrar la resolucion de este crackme ([Enlace externo eliminado para invitados]) 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.
Imagen

Imagen

Imagen

Imagen


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.

Imagen


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
Imagen


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
Imagen

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

Imagen


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

Imagen


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

Imagen


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.

Imagen


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:

Imagen


reversecoder.tkurastupiddumbidioticcrazynoobreversecoder.tk1

Verificamos

Imagen


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

Imagen


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

Imagen


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

3074 – 1C00 = 1474

offset nag 2 = 0x1474

Parcheamos

Imagen


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

Fuente:reversecoder.tk
666699966999999996699966699999
666699966999999996699966969999
699999966999999996699966996999
666699966999999996699966999699
666699966999999996699966999699
699999996699999966999966996999
699999999669999669999966969999
699999999996666999999966699999
https://reversecodes.wordpress.com

http://indeseables.github.io/
Responder

Volver a “Manuales”