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,aqui una foto de el reto
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

















































