Páginas

anun1

sábado, 25 de julio de 2026

Solucion al Crackme De Tr4ceflow

Hola amigos hoy veremos la solución del crackme de tr4ceflow, este reto o crackme mejor dicho lo resolví hace tiempo en uno de los retos que ponía el maestro Ricardo Narvaja en el grupo de crackslatinos y es de nivel 3, ya que lo encontré en la página de crackmes.one y hay dice su nivel... Bueno sin tanta palabra pasamos a verlo

si ejecutamos el crackme nos arroja un mensaje que tenemos que eliminar


Bueno eso lo hacemos nopeando la api MessageBoxA que arroja ese mensaje así que para eso lo haré desde un editor hexadecimal y nos quedaría así


Pueden usar el x32dbg para eso y encontrar el mensaje y nopearlo por si lo quieren hacer de ese modo

Ahora pasamos a explicar como funciona o como genera el serial válido, para empezar el nombre debe contener mínimo 2 dígitos y máximo 5 si no nos arroja el mensaje incorrecto, otra cosa el nombre ingresado su dígitos son convertidos a mayúsculas.

después de esto el crackme busca el dígito menor del nombre cuando digo menor me refiero a su código ASCII como por ejemplo el menor vendría siendo el dígito A otra cosa el crackme no acepta números en el campo nombre si pones te manda el cartelito incorrecto.

Ya que tiene el dígito menor este dígito se le es restado 2 y después entra en un bucle y a cada dígito sele resta dicho valor y en cada vuelta de le resta 1 ejemplo si ingresamos como nombre la palabra "papa"... Nota lo convierte a mayúsculas y quedaría así "PAPA" y A=65-2 es igual a 63

Digito   |   Valor ASCII   |  Digito Menor  |  Resultado  |

P ------------- 80 --------------- 63 -------------- 17

A -------------65 --------------- 62 -------------- 3

P ------------- 80 --------------- 61 -------------- 19

A ------------ 65 --------------- 60 -------------- 5

después el campo serial tiene que ser de 8 a 10 dígitos si no nos manda el cartelito de error, ya que tenemos el serial este es dividido por los siguientes valores

37  41  43  47  53

Como ven es para 5 digitos, ya que cuando divida por 37 el residuo de la división tiene que dar 17 como en el primer digito de la tabla anterior y después divide por 41 y el residuo de la división tiene que dar 3 y así después divide por 43 y el residuo tiene que dar 19 y así... Como no tengo el serial para "papa" no les puedo poner la tabla como ejemplo

Y si se preguntan como hice el keygen, pues les digo que mi keygen da nombres al azar y no saca el serial de un nombre en especifico y como me dijo mi amigo tincopasan eso no es un keygen ya que no te genera un serial para un nombre específico, pero en fin se me hizo más fácil ami y funciona para el crackme ya que te manda el cartelito correcto aquí una foto del keygen de aquella ves que lo hice para crackslatinos


Como perdí el código fuente de aquella vez no puedo mostrárselos así que ahora lo hice en JavaScript y HTML aquí el código... Si quieren probarlo ya saben copean y pegan en el bloc de notas como keygen.html

<html>
<head>
<title>Generador De Claves</title>
<style>
.textbox
{
   background-color:black;
   color:lime;
   border-radius:8px;
   border:2px solid;
   height:30px;
   width:300px;
   text-align:center;
   font-size:15px;
}
.textbox:hover
{
   border-color: white;
}
.mark
{
   color:lime;
   font-size:35px;
}
.boton
{
   background-color:black;
   color:lime;
   border-radius:8px;
   border:2px solid;
   height:30px;
   width:100px;
}
.boton:hover
{
   border-color: white;
}
</style>
</head>
<body bgcolor="black">
<marquee class="mark">Keygen Crackme tr4ceflow   ...:::By Flamer:::...</marquee><br>
<br><br>
<center>
<input type="text" id="nick" placeholder="Nombre" class="textbox" disabled>
<input type="button" value="Copiar" onclick="copiar1()" class="boton">
<br><br>
<input type="text" id="pass" placeholder="Serial" class="textbox" disabled>
<input type="button" value="Copiar" onclick="copiar2()" class="boton">
<br><br>
<input type="button" id="g" value="Generar" onclick="auto()" class="boton">&emsp;
<input type="button" id="d" value="Detener" onclick="detente()" class="boton" disabled>
</center> 
<script>
let t=0;
function copiar1() 
{
   let c=document.getElementById('nick'); 
   document.getElementById('nick').disabled=false;
   c.select();
   document.execCommand('copy');
   document.getElementById('nick').disabled=true;
}
function copiar2() 
{
   let c=document.getElementById('pass'); 
   document.getElementById('pass').disabled=false;
   c.select();
   document.execCommand('copy');
   document.getElementById('pass').disabled=true;
}
function inverso(a, m)
{
    let m0 = m;
    let x0 = 0;
    let x1 = 1;

    while (a > 1)
    {
        let q = Math.floor(a / m);

        let t = m;
        m = a % m;
        a = t;

        t = x0;
        x0 = x1 - q * x0;
        x1 = t;
    }

    if (x1 < 0)
        x1 += m0;

    return x1;
}

function CRT(modulos, residuos)
{
    let M = 1;

    for (let i = 0; i < modulos.length; i++)
        M *= modulos[i];

    let r = 0;

    for (let i = 0; i < modulos.length; i++)
    {
        let Mi = M / modulos[i];
        let inv = inverso(Mi % modulos[i], modulos[i]);
        r += residuos[i] * Mi * inv;
    }

    r %= M;

    if (r < 0)
        r += M;

    return r;
}

function calcularP1(nombre)
{
    let p1 = [];
    let d = nombre.charCodeAt(0);

    // Buscar el menor ASCII
    for (let i = 1; i < nombre.length; i++)
    {
        let c = nombre.charCodeAt(i);

        if (c < d)
            d = c;
    }

    d -= 2;

    for (let i = 0; i < nombre.length; i++)
    {
        let c = nombre.charCodeAt(i);
        p1[i] = c - d;
        d--;
    }

    return p1;
}

function nombreAleatorio()
{
    const letras = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    let largo = Math.floor(Math.random() * 4) + 2; // 2 a 5 letras
    let nombre = "";

    for (let i = 0; i < largo; i++)
        nombre += letras[Math.floor(Math.random() * letras.length)];

    return nombre;
}

function generar()
{
   const modulos = [37,41,43,47,53];
   let nombre,numero;
   for(let i=0;i<10;i++)
   {
       nombre = nombreAleatorio();

       let p1 = calcularP1(nombre);

    // completar residuos si el nombre tiene menos de 5 letras
       while(p1.length<5)
           p1.push(0);

       numero = CRT(modulos,p1);
   }
   document.getElementById("nick").value=nombre;
   document.getElementById("pass").value=numero;
   t=setTimeout("generar()",10);
}   
function auto()
{
   generar();
   document.getElementById('g').disabled=true;
   document.getElementById('d').disabled=false;
}
function detente()
{
   clearTimeout(t);
   document.getElementById('g').disabled=false;
   document.getElementById('d').disabled=true;
}
</script>
</body>
</html>

Y aqui una foto


Una cosa tengo que aclarar la primera vez que lo hice no use chatgpt, no existían las IA en aquel entonces me toco quebrarme la cabeza por días así que esta vez si, porque no quise batallar para eso solo hice lo que hace el crackme y le pedí a la IA que lo revirtiera y guala tenemos el keygen

bueno en fin espero les haya gustado saludo flamer y una foto del reto ya solucionado


Quiero mandar saludos a todos los crackslatinos en especial a ricardo por el reto, tincopasan por decirme que eso no es un keygen...pero funciona no jajaja, apuromafo, softdat, @papitapro1234,  EdePC y a MCKSys Argentina y demás


No hay comentarios.:

Publicar un comentario