Hola amigos hoy les traigo el crackme número 2 de ANALYST por si no lo vieron la solución de el crackme 1 aquí les dejo el link
Este reto es un poco más complicado que el primero por eso me tarde en traer la solución, bueno lo abrimos con el x32dbg y buscamos en los string el mensaje correcto y lo encontramos este
Ahora damos doble clic y nos manda a esta zona
Como podemos ver hay esta la API de comparación hay podemos ver con que compara nuestro serial si ponemos un breakpoint y más arriba se encuentra la generación del serial aquí les pego el código en ensamblador
004010F7 | 33D2 | xor edx,edx | edx:EntryPoint
004010F9 | 33DB | xor ebx,ebx |
004010FB | 8B55 D4 | mov edx,dword ptr ss:[ebp-2C] | edx:EntryPoint
004010FE | 0155 C4 | add dword ptr ss:[ebp-3C],edx | edx:EntryPoint
00401101 | 0155 C4 | add dword ptr ss:[ebp-3C],edx | edx:EntryPoint
00401104 | 8BC2 | mov eax,edx | edx:EntryPoint
00401106 | 83C0 05 | add eax,5 |
00401109 | 8945 B8 | mov dword ptr ss:[ebp-48],eax |
0040110C | 33C0 | xor eax,eax |
0040110E | 8BCF | mov ecx,edi | ecx:EntryPoint, edi:EntryPoint
00401110 | 83C1 04 | add ecx,4 | ecx:EntryPoint
00401113 | 894D B4 | mov dword ptr ss:[ebp-4C],ecx | ecx:EntryPoint
00401116 | 33C9 | xor ecx,ecx | ecx:EntryPoint
00401118 | 0155 BC | add dword ptr ss:[ebp-44],edx | edx:EntryPoint
0040111B | 017D BC | add dword ptr ss:[ebp-44],edi | edi:EntryPoint
0040111E | 6BFF 03 | imul edi,edi,3 | edi:EntryPoint
00401121 | 897D C0 | mov dword ptr ss:[ebp-40],edi | edi:EntryPoint
00401124 | 33FF | xor edi,edi | edi:EntryPoint
00401126 | 0FBE8C05 44FFFFFF | movsx ecx,byte ptr ss:[ebp+eax-BC] | ecx:EntryPoint
0040112E | 83F9 61 | cmp ecx,61 | ecx:EntryPoint, 61:'a'
00401131 | 7C 07 | jl k4n2.40113A |
00401133 | 90 | nop |
00401134 | 90 | nop |
00401135 | 90 | nop |
00401136 | 90 | nop |
00401137 | 83E9 20 | sub ecx,20 | ecx:EntryPoint
0040113A | 8BF1 | mov esi,ecx | esi:EntryPoint, ecx:EntryPoint
0040113C | 03DE | add ebx,esi | esi:EntryPoint
0040113E | 0FAFD9 | imul ebx,ecx | ecx:EntryPoint
00401141 | 4A | dec edx | edx:EntryPoint
00401142 | 0FBE8C2F 44FFFFFF | movsx ecx,byte ptr ds:[edi+ebp-BC] | ecx:EntryPoint
0040114A | 0FBEB42F 45FFFFFF | movsx esi,byte ptr ds:[edi+ebp-BB] | esi:EntryPoint
00401152 | 83F9 61 | cmp ecx,61 | ecx:EntryPoint, 61:'a'
00401155 | 7D 12 | jge k4n2.401169 |
00401157 | 90 | nop |
00401158 | 90 | nop |
00401159 | 90 | nop |
0040115A | 90 | nop |
0040115B | 83FE 61 | cmp esi,61 | esi:EntryPoint, 61:'a'
0040115E | 7D 0E | jge k4n2.40116E |
00401160 | 90 | nop |
00401161 | 90 | nop |
00401162 | 90 | nop |
00401163 | 90 | nop |
00401164 | EB 0B | jmp k4n2.401171 |
00401166 | 90 | nop |
00401167 | 90 | nop |
00401168 | 90 | nop |
00401169 | 83E9 20 | sub ecx,20 | ecx:EntryPoint
0040116C | EB ED | jmp k4n2.40115B |
0040116E | 83EE 20 | sub esi,20 | esi:EntryPoint
00401171 | 47 | inc edi | edi:EntryPoint
00401172 | 03DE | add ebx,esi | esi:EntryPoint
00401174 | 0FAFD9 | imul ebx,ecx | ecx:EntryPoint
00401177 | 4A | dec edx | edx:EntryPoint
00401178 | 75 C8 | jne k4n2.401142 |
0040117A | 895D C8 | mov dword ptr ss:[ebp-38],ebx |
0040117D | 33C9 | xor ecx,ecx | ecx:EntryPoint
0040117F | 33D2 | xor edx,edx | edx:EntryPoint
00401181 | 33DB | xor ebx,ebx |
00401183 | 33C0 | xor eax,eax |
00401185 | 837D D4 32 | cmp dword ptr ss:[ebp-2C],32 | 32:'2'
00401189 | 0F8D A0000000 | jge k4n2.40122F |
0040118F | 0FBE840D 44FFFFFF | movsx eax,byte ptr ss:[ebp+ecx-BC] |
00401197 | 03C1 | add eax,ecx | ecx:EntryPoint
00401199 | 03D8 | add ebx,eax |
0040119B | 41 | inc ecx | ecx:EntryPoint
0040119C | 3B4D D4 | cmp ecx,dword ptr ss:[ebp-2C] | ecx:EntryPoint
0040119F | 75 EE | jne k4n2.40118F |
004011A1 | D1C0 | rol eax,1 |
004011A3 | 35 40E20100 | xor eax,1E240 | 1E240:"???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
004011A8 | 8945 B0 | mov dword ptr ss:[ebp-50],eax |
004011AB | 33C9 | xor ecx,ecx | ecx:EntryPoint
004011AD | 33D2 | xor edx,edx | edx:EntryPoint
004011AF | 33DB | xor ebx,ebx |
004011B1 | 33C0 | xor eax,eax |
004011B3 | 0FBE840D 44FFFFFF | movsx eax,byte ptr ss:[ebp+ecx-BC] |
004011BB | 6BD0 06 | imul edx,eax,6 | edx:EntryPoint
004011BE | 33C2 | xor eax,edx | edx:EntryPoint
004011C0 | 03D8 | add ebx,eax |
004011C2 | 41 | inc ecx | ecx:EntryPoint
004011C3 | 3B4D D4 | cmp ecx,dword ptr ss:[ebp-2C] | ecx:EntryPoint
004011C6 | 75 EB | jne k4n2.4011B3 |
004011C8 | 035D B0 | add ebx,dword ptr ss:[ebp-50] |
004011CB | 895D AC | mov dword ptr ss:[ebp-54],ebx |
Es algo extenso la generación del serial así que solo les traeré el generador de claves, así que aquí el código de mi keygen
<html>
<head>
<title>Keygen Crackme 2 tHE ANALYST ...:::Flamer:::...</title>
</head>
<body bgcolor="black">
<center>
<marquee style="font-size:30;color:yellow;">Generador De Claves Crackme 2 tHE ANALYST ...:::By Flamer:::...</marquee><br><br>
<label style="color:white;">Nombre:</label>
<input type="text" id="nom" size='75' 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='90' style="background-color:Gray;color:white;text-align:center;">
<input type="button" value="Copy" onclick="copiar2()"><br><br>
<input type="button" value="Generar" onclick="manual()" 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');
navigator.clipboard.writeText(c.value);
}
//==================================================================================
function copiar2()
{
let c=document.getElementById('pass');
navigator.clipboard.writeText(c.value);
}
//==================================================================================
function limpia()
{
document.getElementById("nom").value="";
document.getElementById("pass").value="";
}
//==================================================================================
function corre()
{
let cadena="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
let l=cadena.length-1
let largo=parseInt(Math.random() * (l - 4) + 4);
let x,posi,nick="";
for(x=0;x<largo;x++)
{
posi=parseInt(Math.random() * (l - 0) + 0);
nick+=cadena[posi];
}
document.getElementById("nom").value=nick;
document.getElementById("pass").value=genera(nick);
tiempo=setTimeout("corre()",10);
}
//==================================================================================
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 genera(nombre)
{
let parte1=nombre.length * 2;
let parte2=nombre.length + 5;
let parte3="1AF254";
let parte4=(1765968*3).toString(16);
let edi=0,ebx=0,esi=0,ecx=0,txt="",edx=nombre.length;
let nom=nombre;
let parte8=1765968+ nom.length;
nombre=nombre.toUpperCase();
ecx=nombre[edi].charCodeAt(0);
esi=ecx;
ebx=ebx+esi;
ebx=ebx*ecx;
edx--;
while(edx>0)
{
ecx=nombre[edi].charCodeAt(0);
esi=nombre[edi+1].charCodeAt(0);
edi++;
ebx=ebx+esi;
ebx=ebx*ecx;
txt=ebx.toString(16);
txt=txt.slice(-8);
ebx=parseInt(txt,16);
edx--;
}
let parte5=ebx;
eax=nom[nom.length-1].charCodeAt(0);
eax=eax + nom.length-1;
txt=eax.toString(2);
txt=txt + "0";
eax=parseInt(txt,2);
let parte6=eax ^ 123456;
ebx=0;
for(ecx=0;ecx<nom.length;ecx++)
{
eax=nom[ecx].charCodeAt(0);
edx=eax*6;
eax=eax ^ edx;
ebx=ebx+eax;
}
let parte7=ebx + parte6;
return (parte6.toString(16) + parte7.toString() + "-" + parte2.toString() + parte3 + "-" + + parte5.toString() + parte8.toString() + "-" + parte1.toString(16) + parte4.toString(16)).toUpperCase();
}
//==================================================================================
function manual()
{
let nom=document.getElementById("nom").value;
if(nom.length>3 && nom.length<50)
{
document.getElementById("pass").value=genera(nom);
}
else
{
alert("Error Nombre Muy Corto o Muy Largo, De 4 a 49 Digitos..."); ///menor a 50
}
}
</script>
</body>
</html>
Así que lo copeamos y pegamos en el bloc de notas y lo aguardamos como "key.html" y aprobar aquí una foto
Ahora probamos la clave en el crackme y nos manda este cartelito
Bueno espero les guste y perdonen por no explicar nada de la generación del serial, pero serial algo extenso y seme hizo más fácil solo subir la solución...Bueno saludos Flamer
















































