Hola amigos hoy veremos la solución al crackme 1 de hendrix, sin más que decir aquí les dejo una foto del reto
Bueno ahora le pasamos el Exeinfo PE para ver que nos dice y esto nos arroja
Nos dice que está empacado con upx así que nos vamos a la consola y a escribir "upx -d" para ver que nos dice
Valla nos arroja error esto quiere decir que han modificado algo, no nos queda otra que desempacar a mano, así que nos vamos al depurador x32dbg y nos muestra la palabra pushad así que solo presionamos, solo una vez F8, solo una vez y revisamos el registro ESP y asemos lo siguiente
Clic derecho y seleccionamos mostrar en el volcado y hay se mostró esto
Hay nos muestra la dirección del Original Entry Point (OEP) asi que le ponemos un breakpoint en esa dirección y presionamos F9 y después nos vamos solo con F8 hasta llegar al main o que se muestre esto
Ahora lo vamos a dumpear de memoria para eso usamos Scylla y damos clic en
Y al presionar Fix Dump seleccionamos el archivo Dump que se creó así
Y nos crea un archivo llamado "Crackme1_dump_SCY.exe" y pues ya lo podemos abrir con el x32dbg y ya lo podemos tracear..... Bueno para empezar este crackme toma el nombre que ingresamos y calcula su longitud o sea el número de dígitos y los multiplica por 2 yo ingrese el nombre "polo" tiene 4 dígitos multiplicado por 2 son 8... Luego compara ese resultado 8 por la longitud de el serial que ingresamos yo ingrese "123456"

Como ven esa es la zona que les digo así que ingresaremos "polo" y como serial "12345678" y vemos que si pasa, ahora nos vamos hasta la dirección 00402774 donde vemos que toma los 2 primeros dígitos del serial "12" y más abajo una intrusión de multiplicación
En la primera multiplicación lo hace por 56
(49*56=2744) después el resultado lo multiplica por el valor ASCII de 2 que es 50
(50*2744=137200) ese es el resultado...y más abajo vemos una intrusión de división
(137200 / 255=538) y sobran 10 o sea A en hexadecimal
Después multiplica el valor ASCII de "p" de "polo" por 2 y es E0 y el resultado es comparado por A
70 * 2= E0
Como vemos toma de 2 dígitos del serial y los multiplica el primero por 56 y después el resultado por el segundo digito y luego los divide por 255 y el residuo lo compara por el primer digito de el nombre por 2 y luego toma el "34" del serial y multiplica el valor ASCII del 3 que es 51 * 56 y el resultado por el valor ASCII de el 4 que es 52 para después dividirlo entre 255 y el residuo lo compara por el valor ASCII de "o" de el nombre "polo" que es
111 * 2 = 222 y así sucesivamente con todos los dígitos del serial y con los dígitos del nombre.... Bueno espero me hayan entendido aquí les dejo el keygen
<html>
<head>
<title>Keygen Crackme 1 De Hendrix ...:::Flamer:::...</title>
</head>
<body bgcolor="black">
<center>
<marquee style="font-size:30;color:yellow;">Generador De Claves Del Crackme 1 De Hendrix ...:::By Flamer:::...</marquee><br><br>
<label style="color:white;">Nombre:   </label>
<input type="text" id="nom" size='50' style="background-color:Gray;color:white;text-align:center;">
<input type="button" value="Copy" onclick="copiar1()"><br><br>
<label style="color:white;">Serial:       </label>
<input type="text" id="pass" size='50' style="background-color:Gray;color:white;text-align:center;">
<input type="button" value="Copy" onclick="copiar2()"><br><br>
<input type="button" value="Generar" onclick="genera()" id="boton1">
<input type="button" value="Automatico" onclick="auto()" id="boton2">
<input type="button" value="Limpiar" onclick="limpia()" id="boton3">
</center>
<script>
let tiempo;
function copiar1()
{
let c=document.getElementById('nom');
c.select();
document.execCommand('copy');
}
//==================================================================================
function copiar2()
{
let c=document.getElementById('pass');
c.select();
document.execCommand('copy');
}
//==================================================================================
function limpia()
{
document.getElementById("nom").value="";
document.getElementById("pass").value="";
}
//==================================================================================
function auto()
{
if(document.getElementById("boton2").value=="Automatico")
{
document.getElementById("boton2").value="Detener";
document.getElementById("boton1").disabled=true;
document.getElementById("boton3").disabled=true;
corre();
}
else
{
document.getElementById("boton2").value="Automatico";
document.getElementById("boton1").disabled=false;
document.getElementById("boton3").disabled=false;
clearTimeout(tiempo);
}
}
//==================================================================================
function corre()
{
let cadena="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
let x,posi,nombre="";
let largo=parseInt(Math.random() * (20 - 1) + 1);
for(x=0;x<largo;x++)
{
posi=parseInt(Math.random() * ((cadena.length - 1) - 0) + 0);
nombre+=cadena[posi];
}
document.getElementById("nom").value=nombre;
genera();
tiempo=setTimeout("corre()",10);
}
//==================================================================================
function genera()
{
let x,digito,pass="",p;
let nom=document.getElementById("nom").value;
for(x=0;x<nom.length;x++)
{
digito=nom[x].charCodeAt(0);
digito=digito * 2;
p=ciclo(digito);
if(p==0)
{
pass="";
break;
}
else
{
pass+=p;
}
}
document.getElementById("pass").value=pass;
}
//==================================================================================
function ciclo(digito)
{
let x,y,p;
for(x=33;x<=122;x++)
{
for(y=33;y<=122;y++)
{
p=((x*56) * y) % 255;
if(p==digito)
{
return String.fromCharCode(x) + String.fromCharCode(y);
}
}
}
alert("Error El Nombre No Tiene Password De Solucion");
clearTimeout(tiempo);
return 0;
}
</script>
</body>
</html>
Aqui una foto del keygen
Ahora ingresamos la palabra "polon" y la contraseña y nos muestra esto
Bueno amigo creo que eso es todo espero les haya gustado saludo Flamer
No hay comentarios.:
Publicar un comentario