Hola amigos hoy veremos un reto del usuario deurus es un keyfile(lo baje de crackmes.one y de hay saque el nombre de usuario) es un reto igual que un crackme solo con la diferencia que el serial se guarda en un archivo no se escribe en un cuadro de texto como los demás retos, aquí una foto del reto
Damos clic en el botón aceptar y se cierra, así que lo abrimos con x32dbg y buscaremos como se llama el archivo que leerá la contraseña, asi que buscamos en los string el mensaje que nos muestra arriba y aquí esta
Así que damos doble clic en él y nos manda a esta zona... Nota: en la imagen de arriba nos muestra el mensaje correcto y el incorrecto, pero eso lo veremos después
Así que ponemos un breakpoint como lo muestra la imagen, pero al parecer en la imagen se puede ver un string que dice "key.txt" al parecer así se llamara el archivo, asi que lo ejecutamos y vemos que nos muestra
Y si hay esta la ruta, entonces el archivo se llama "key.txt" así que pasamos a crearlo para ver que sucede y adentro le ponemos "123456" y vemos que ahora al ejecutarlo no se cierra, entonces ahora nos iremos de nuevo a los string y buscamos el mensaje de registrado
Y nos lleva a esta zona
Como vemos en esas líneas compara así que más arriba se genera el serial así que nos vamos hasta la línea 004654A2 y miramos que compara 6 con 14 que en decimal es 20
Como vemos esta comparando lo que está dentro del archivo que son 6 dígitos con 20, eso quiere decir que el serial a buscar es de 20 dígitos, así que le pondremos 20 dígitos al archivo "key.txt" yo le pondré como serial "1234567890abcdefghij" y pasamos el primer filtro, pero ahora nos topamos con otro este
Y si entramos en el CALL de arriba contiene este código
004653B3 | 8BF0 | mov esi,eax | esi:"1234567890abcdefghij"
004653B5 | 33C0 | xor eax,eax |
004653B7 | EB 09 | jmp keyfileme#01.4653C2 |
004653B9 | 80C2 D0 | add dl,D0 |
004653BC | 80EA 0A | sub dl,A |
004653BF | 73 09 | jae keyfileme#01.4653CA |
004653C1 | 46 | inc esi | esi:"1234567890abcdefghij"
004653C2 | 8A16 | mov dl,byte ptr ds:[esi] | esi:"1234567890abcdefghij"
004653C4 | 84D2 | test dl,dl |
004653C6 | 75 F1 | jne keyfileme#01.4653B9 |
004653C8 | B0 01 | mov al,1 |
004653CA | 5E | pop esi | esi:"1234567890abcdefghij"
004653CB | 5B | pop ebx | ebx:"1234567890abcdefghij"
004653CC | C3 | ret |
Así que lo traceamos y averiguamos que solo acepta números, si ponemos letras nos rebota el salto, así que modificamos el serial del archivo yo pondré "01234567890123456789"
Ahora pondré como serial en el archivo "11111222223333344444" y nos muestra lo siguiente
Ahora si seguimos ya sabremos que pasa con cada parte del serial y vemos que xorea 11111 con 34256
Y más abajo xorea 33333 con 65798 y nos da x resultado, así que vemos que solo toma 2 partes del código, la primera y la tercera aquí les dejo el código de generación del serial
0046551B | 8BF0 | mov esi,eax |
0046551D | 81F6 D0850000 | xor esi,85D0 |
00465523 | 8B45 E0 | mov eax,dword ptr ss:[ebp-20] | [ebp-20]:"33333"
00465526 | E8 FD34FAFF | call keyfileme#01.408A28 |
0046552B | 8BF8 | mov edi,eax |
0046552D | 81F7 06010100 | xor edi,10106 |
00465533 | 8BC6 | mov eax,esi |
00465535 | 25 01000080 | and eax,80000001 |
0046553A | 79 05 | jns keyfileme#01.465541 |
0046553C | 48 | dec eax |
0046553D | 83C8 FE | or eax,FFFFFFFE |
00465540 | 40 | inc eax |
00465541 | 0FB755 FE | movzx edx,word ptr ss:[ebp-2] |
00465545 | 33C2 | xor eax,edx |
00465547 | 8945 DC | mov dword ptr ss:[ebp-24],eax |
0046554A | 8BC7 | mov eax,edi |
0046554C | C1E0 03 | shl eax,3 |
0046554F | 0FB755 FC | movzx edx,word ptr ss:[ebp-4] |
00465553 | 33C2 | xor eax,edx |
00465555 | 8945 D4 | mov dword ptr ss:[ebp-2C],eax |
00465558 | 8BC6 | mov eax,esi |
0046555A | 99 | cdq |
0046555B | F77D D4 | idiv dword ptr ss:[ebp-2C] |
0046555E | 3355 DC | xor edx,dword ptr ss:[ebp-24] |
00465561 | 03D7 | add edx,edi |
00465563 | 8995 F0FDFFFF | mov dword ptr ss:[ebp-210],edx |
Bueno si analizan el código verán que en la línea 00465541...EDX toma el valor 1B desde una dirección de memoria
Y en la línea 0046554F....EDX vuelve a tomar otro valor desde otra dirección que es A
Si se preguntan que son esos valores pues les cuento el valor 1B es el día 27 en decimal y la A es el mes 10 en decimal que es octubre... Ahora veremos de donde toma esos valores para eso nos vamos a los módulos y pondremos un breakpoint en la API GetLocalTime esta
Y se detiene justo en la API y traceamos un poco con F8 y vemos en los registros los valores que les mencione
Bueno ya que saben de donde salen esos valores 1B y A y que toma los primeros 5 dígitos del serial y los otros 5 dígitos de la tercera parte del serial, hace las operaciones del código que les deje arriba y al final en la línea 00465611 compara si es menor que 65000
Y líneas más abajo en la línea 0046561D pregunta si es mayor a 9000
Y por último en la línea 0046562B pregunta si es menor a 10000
Bueno y si todo sale bien este es el mensaje que muestra
Ahora les dejo el generador de claves o keygen... Solo copean y pegan en el bloc de notas como "genera.html"
<html>
<head>
<title>Keygen Reto KeyFileMe#01 by deurus ...:::Flamer:::...</title>
</head>
<body bgcolor="black">
<center>
<marquee style="font-size:30;color:yellow;">Keygen Reto KeyFileMe#01 by deurus ...:::Flamer:::...</marquee><br><br>
<label style="color:white;">Serial:</label>
<input type="text" id="pass" size='80' style="background-color:Gray;color:white;text-align:center;">
<input type="button" value="Copy" onclick="copiar()"><br><br>
<input type="button" value="Generar" onclick="genera()">
<input type="button" value="Descargar" onclick="descarga()">
</center>
<script>
function copiar()
{
let c=document.getElementById('pass');
navigator.clipboard.writeText(c.value);
}
//==================================================================================
function genera()
{
let fecha=new Date();
let dia=fecha.getDate();
let mes=fecha.getMonth() + 1;
let p3,p1,s1,s2;
[s1,s2]=busca1(mes);
p1=s2;
p3=s1;
document.getElementById("pass").value=s2.toString() + aleatorio() + s1.toString() + aleatorio();
}
//==================================================================================
function busca2(r1,r2,d)
{
let p,x=9000;
for(x=9000;x<50000;x++)
{
p=x;
p=p ^ 34256;
p=p % r1;
p=(p ^ d) + r2;
if(p>9000 && p<10000)
return x;
}
return -1;
}
//==================================================================================
function aleatorio()
{
let r=parseInt(Math.random() * (99999 - 11111) + 11111);
return r.toString();
}
//==================================================================================
function busca1(m)
{
let x=65000,p,r1,r2,y;
do
{
do
{
x++;
p=x;
p=p ^ 65798;
r2=p;
p=p << 3;
p=p ^ m;
r1=p;
}while(p>65000)
y=busca2(r1,r2,m);
}while(y==-1);
return [x,y];
}
function descarga()
{
const a = document.createElement('a');
a.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent(document.getElementById("pass").value);
a.download = 'key.txt';
a.click();
}
</script>
</body>
</html>
Aquí una imagen
Bueno amigos creo que eso es todo espero les haya gustado saludos Flamer
No hay comentarios.:
Publicar un comentario