Hola amigos hoy veremos la solución del crackme de Mek y si se preguntan quien es Mek era un forero del foro el hacker.net también llamado Señor Patata así lo mienta rojodos en un hilo del foro, su crackme lo encontré en dicho foro y esta fácil de resolver y entretenido bueno para pasar el rato, bueno empecemos aquí una foto del reto.
Para empezar el campo nombre debe contener 10 dígitos o más, si contiene menos nos saca del programa.
Ahora aquí es donde está el chico bueno o mejor dicho el corazón del crackme donde hace la magia
00408408 | 8B55 FC | mov edx,dword ptr ss:[ebp-4] | [ebp-04]:"polokolomes"
0040840B | 0FB6541A FF | movzx edx,byte ptr ds:[edx+ebx-1] |
00408410 | 33C2 | xor eax,edx |
00408412 | 03C3 | add eax,ebx |
00408414 | 50 | push eax |
00408415 | 8D45 FC | lea eax,dword ptr ss:[ebp-4] | [ebp-04]:"polokolomes"
Lo que hace es tomar dígito por dígito del campo nombre (que tiene que ser mayor a 10 dígitos) lo xorea con la longitud del campo nombre y después le suma la posición del dígito si es el 1 o 2 o 3 según en la vuelta que vaya y con longitud del nombre me refiero a el número de dígitos del campo en este caso "polokolomes" tiene 11 dígitos de longitud.
Bueno aquí les dejo una foto del generador de claves
aqui el codigo por si lo quieren probar
<html>
<head>
<title>Keygen</title>
</head>
<body bgcolor="black">
<marquee style="color:white;font-size:30;">Generador De Claves Del Crackme De MEK En Delphi ...:::By Flamer:::...</marquee><br>
<br><br>
<center>
<input type="text" id="nombre" placeholder="Entrada" size="50px" style="background-color:DarkSlateGray;color:white;text-align:center;">
<input type="button" value="Copiar" onclick="copiar1()">
<br><br>
<input type="text" id="pass" placeholder="Salida" size="50px" style="background-color:DarkSlateGray;color:white;text-align:center;">
<input type="button" value="Copiar" onclick="copiar2()">
<br><br>
<input type="button" id="g" value="Generar" onclick="generar()">
<input type="button" id="a" value="Automatico" onclick="autoni()">
<input type="button" id="c" value="Limpiar" onclick="cleare()">
</center>
<script>
let tiempo;
function copiar1()
{
let c=document.getElementById('nombre');
c.select();
document.execCommand('copy');
}
function copiar2()
{
let c=document.getElementById('pass');
c.select();
document.execCommand('copy');
}
function generar()
{
let nom = document.getElementById("nombre").value;
if(nom.length>=10)
{
document.getElementById("pass").value=coder(nom);
}
else
{
alert("Error El Nombre Debe Contener 10 o Mas Digitos Menos No");
}
}
function cleare()
{
document.getElementById("nombre").value="";
document.getElementById("pass").value="";
}
function autoni()
{
if(document.getElementById("a").value=="Automatico")
{
document.getElementById("a").value="Detener";
document.getElementById("g").disabled=true;
document.getElementById("c").disabled=true;
tiempo=setTimeout("auto()",10);
}
else
{
document.getElementById("a").value="Automatico";
document.getElementById("g").disabled=false;
document.getElementById("c").disabled=false;
clearTimeout(tiempo);
}
}
function auto()
{
let cadena = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
let largo = cadena.length - 1;
let x,posi,nom="";
let lar = Math.floor(Math.random() * (30 - 10 + 1)) + 10;
for(x=0;x<lar;x++)
{
posi=Math.floor(Math.random() * (largo - 0 + 1)) + 0;
nom+=cadena[posi];
}
document.getElementById("nombre").value=nom;
document.getElementById("pass").value=coder(nom);
tiempo=setTimeout("auto()",10);
}
function coder(nom)
{
// Tu secuencia hexadecimal original
let x,codigo="",digi;
for(x=0;x<nom.length;x++)
{
digi=nom[x].charCodeAt(0);
digi=(digi ^ nom.length) + (x+1);
codigo+=digi.toString(16);
}
// Ejecutar e imprimir el resultado
let resultado = Texto(codigo);
return resultado;
}
function Texto(cadenaHex)
{
// 1. Tabla completa de caracteres de la página de códigos CP437 (0x00 a 0xFF)
const Symbols =
"\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼" +
" !\"#$%&'()*+,-./0123456789:;<=>?" +
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" +
"`abcdefghijklmnopqrstuvwxyz{|}~⌂" +
"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒ" +
"áíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐" +
"└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀" +
"αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ";
// 2. Limpiar los espacios en blanco
const cadenaLimpia = cadenaHex.replace(/\s+/g, '');
// 3. Extraer las parejas hexadecimales
const parejas = cadenaLimpia.match(/.{1,2}/g);
if (!parejas) return "";
// 4. Mapear cada byte con su símbolo correspondiente en la tabla antigua
let resultado = "";
for (let i = 0; i < parejas.length; i++)
{
const valorDecimal = parseInt(parejas[i], 16);
// Asegurarnos de que el índice esté dentro del rango de la tabla (0-255)
if (valorDecimal >= 0 && valorDecimal < 256)
{
resultado += Symbols[valorDecimal];
}
}
return resultado;
}
</script>
</body>
</html>
Si me preguntan por qué algo tan sencillo ocupa un programa tan grande es porque para empezar tiene 3 botones el limpiar, el automático y el generar.... El limpiar no ocupa mucho código, pero lo demás si y más ya que el crackme el serial da dígitos raros y si se preguntan eso que tiene que ver pues les explico, no es lo mismo presionar Alt+1 que imprimir dicho carácter desde un programa... ya que si lo haces desde un programa te da un cuadrito ejemplo:
Si presionó Alt+1 me da esto ☺, pero si lo hago desde un programa pasa esto imagen:
Bueno aqui la imagen del mensaje de correcto
Bueno creo que eso es todo saludos Flamer y hasta la próxima y saludos a todos los CrackSLatinoS [CLS] en especial a Ricardo,Neutrino que acabó de leer su tutorial del crackme 6 de RogerFm.Net, también a apuromafo que me ayudo en algunos crackmes de la página hbh.sh el cual el primero era muy sencillo y no veía la solución por siego jajaja y tambien a tincopasan y a todos los demas de la lista saludos
No hay comentarios.:
Publicar un comentario