Páginas

anun1

sábado, 5 de septiembre de 2026

Solucion al Crackme 2 De Enigmagroup

Hola amigos hoy veremos la solución del crackme 2 de la página Enigmagroup, vamos a ver si los resolvemos todos los retos, me pondré a resolverlos y a presentar sus soluciones, ya que la página desapareció por completo y el dominio está ocupado por otras personas y por otra parte su creador Chris o mejor llamado Psychomarine murió hace ya 3 años y nos dejó estos crackmes como su legado, bueno empecemos.

Este es el reto y al poner el mause en el botón Submit se desactiva y al ponerlo en cancelar se vuelve a activar pero esto no nos deja hacerle clic aquí una foto


Lo abrimos con el x32dbg y le ponemos esto en el CommandBar o barra de comandos "bp EnableWindow"


Y presionamos enter ahora se detendrá en la API que desactiva el botón y activa..., ya que se detenga solo nos vamos presionando F8 y hasta llegar de nuevo desamblado del crackme,  para que no se pierdan tienen que llegar al CALL que activa el botón, lo aclaro porque está otro CALL que en este no se pueden hacer nada y como pusimos un breackpoint en la API se detendrá así que si llegan a esa zona no hagan nada no tiene caso, buscamos otro CALL no ese


Solo al ejecutarlo si se detiene en la API Enablewindow déjenlo correr y pongan el ratón en el botón submit y se detendrá eso los mandara al CALL correcto que es este el de la dirección 004036D2


Vemos que el registro EBX está en 1 así que modificaremos la línea 

004036CE | 57                       | push edi                                

por 

004036CE | 53                       | push ebx                                     

Y guardamos los cambios y llamamos al nuevo archivo "App2_Activado.exe" y vemos que el nuevo archivo no se desactiva el botón... Bueno ahora pasamos a encontrar el serial, así que ponemos un breakpoint en la dirección

00403209 | FF15 54104000            | call dword ptr ds:[<__vbaVarTstEq>]            |

Y ejecutamos y ponemos como contraseña "123456" y  nos vamos traseando con F7 ese CALL y vemos que compara el serial ingresado con "TOPGUN"


Asi que ingresamos ese serial como nombre para ver que nos arroja y como vemos nos arroja el cartelito correcto


Bueno les dejaré un código en JavaScript para activar el botón, solo funciona con este crackme no con otros

<html>
<head>
<title>Activar Boton</title>
</head>
<body>
<br><br>
<center>
<input type="file" id="archivo"><br><br>
<input type="button" value="Activar" onclick="activa()">
</center>
<script>
async function activa()
{
    // Obtener el objeto File
    const input = document.getElementById("archivo");
    const archivo = input.files[0];

    if (!archivo)
    {
        alert("Selecciona un archivo");
        return;
    }

    // Leer archivo como ArrayBuffer
    const buffer = await archivo.arrayBuffer();

    // Convertirlo a Uint8Array
    const datos = new Uint8Array(buffer);

    // Comprobar que exista la posición
    if (datos.length <= 14030)
    {
        alert("El archivo es demasiado pequeño");
        return;
    }

    // Mostrar byte original
    alert("Original: 0x" + datos[14030].toString(16).padStart(2, "0"));

    // Modificar byte
    datos[14030] = 0x53;

    // Mostrar nuevo byte
    alert("Nuevo: 0x" + datos[14030].toString(16).padStart(2, "0"));

    // Crear archivo modificado
    const nuevoArchivo = new Blob([datos], {
        type: "application/octet-stream"
    });

    // Descargar
    const enlace = document.createElement("a");

    enlace.href = URL.createObjectURL(nuevoArchivo);
    enlace.download = "App2_Activado.exe";

    enlace.click();

    // Liberar URL
    URL.revokeObjectURL(enlace.href);
}
</script>
</body>
</html>

Aqui una foto


Si les aparece este cartelito al ejecutar el nuevo archivo descargado


Solo ceban a propiedades y palomean la opción desbloquear y aplicar cambios...Nota: esto solo es para el reto este no para otros archivos que desconoscan, ya que podrían correr peligro


Bueno creo que eso es todo saludos y espero les haya gustado Flamer


miércoles, 2 de septiembre de 2026

Generador De Claves Del Crackme 2 de tHE ANALYST

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




miércoles, 26 de agosto de 2026

Solucion al Crackme 1 De Enigmagroup

Hola amigos hoy veremos la solución de el crackme 1 de enigmagroup como es el primero es algo sencillo, vamos a ver si los hacemos todos son 14 crackmes en total, bueno empecemos primero lo abrimos con x32dbg

y buscamos las string


Como podemos ver hay esta el mensaje correcto así que damos clic en el y nos lleva a esta zona


Como podemos ver más arriba se encuentra la API que compara 2 cadenas así que ponemos un breakpoint en esa línea y lo ejecutamos para ver si se detiene, ponemos como serial  "123456" y presionamos el botón Submit y se detiene justo donde pusimos el breakpoint y nos vamos traceando con F7 para entrar en ese call y averiguar con que cadena compara... Bueno me fui traseando con F7 hasta llegar a esta zona


Hay podemos ver que compara la contraseña que pusimos nosotros "123456" con la palabra "WAY2EASY" bueno así que la copeamos y ponemos en el crackme a ver que pasa y nos muestra esto


Como podemos ver nos arroja el cartelito correcto así que esa es la clave... Bueno creo que eso es todo saludos Flamer

 

sábado, 22 de agosto de 2026

Solucion Al Crackme Threadhell Crackme De Nyan

Hola amigos hoy veremos como resolver el crackme de Nyan que fue publicado en el grupo de CrackSLatinoS al cual le mando un saludo y por publicar este reto...bueno empesemos primero lo analizamos con el ExeInfo PE y a ver que nos dice


y vemos que está programado en Golang un lenguaje que no había escuchado y Google nos dice esto


también no dice que es un ejecutable de 64 bits así que lo abrimos con x64dbg y buscamos los string a ver que nos dice, a ver si encontramos el mensaje correcto o el incorrecto y vemos lo siguiente.


Es mucha basura está claro que aquí no vamos a encontrar nada y como dice Nyan ese es el objetivo que no encuentres como resolverlo... Bueno así que lo ejecutamos y al ingresar alguna contraseña y presionar enter vemos que se cierra de repente no se pausa y eso es por los hilos... Si queremos saber cuantos hilos tiene no vamos a la pantalla de hilos y vemos lo siguiente


Si los detenemos no nos deja trabajar bien... así que por hay no es, bueno se me acaban las opciones así que se me ocurre algo la API que cierra el programa y nos vamos a los módulos donde están las APIs y encontramos la API ExitProcess esta


Si se preguntan que vamos a hacer con esa API, les cuento vamos a seguir el camino que sigue el programa para cerrarse o terminar, ya que al presionar enter se cierra, así que damos doble clic en ella y nos manda a esta parte del código


Como vemos nos manda a una parte sin salida, ese pedazo de código se ejecuta con los hilos y cierra el programa... Pero los hilos no nos importan vamos a seguir el camino y averiguar que call manda llamar esa función y para eso damos clic derecho al push rbp y después clic en encontrar referencias así como en la imagen


Y nos muestra lo siguiente


Como vemos son muchos call que mandan llamar esa función, así que ponemos un breakpoint en cada una y ejecutamos el crackme para después ingresar como contraseña "polomon" y presionamos enter y vemos que se detiene en la siguiente


Vemos que se detiene en una....yo quite los breakpoint para no tener tantos y damos doble clic en ese call y no manda a esta zona


Otra zona que no muestra nada, pero no se apresuren vamos a averiguar de donde mandan llamar esa función...así que primero quitamos el brackpoint para no tener tantos y damos clic derecho en él push rbp y clic en encontrar referencias así como en la imagen


Y nos muestra lo siguiente


Esta vez solo hace referencia a un solo call así que damos doble clic en él a ver donde nos lleva y nos lleva a esta zona


Ahora vamos a dar clic derecho en la comparación(cmp) y después clic en encontrar referencias así como en la imagen


Y nos muestra los siguientes


No vamos a poner breackpoins, damos clic en el primer call y miramos lo siguiente


Como podemos ver hay algunos string que llaman la atención uno de ellos es el que se imprime cuando inicia el programa y otro que no sabemos para qué es... Damos clic en el segundo call y nos muestra el chico bueno o el mensaje correcto


Ese pedazo de código se ejecuta con los hilos y si asemos lo mismo para ver de que parte del código es llamado nos manda a un salto JMP que está abajo... Modificando los saltos podemos imprimir el mensaje correcto, pero ese no es suficiente, tenemos que encontrar el serial y el tercer call no nos lleva a nada así que la opción es el primer call y ponemos un breackpoint en uno de los string así como en la imagen


Nota: en este momento estoy corriendo el crackme no lo cerré por eso me muestra el serial, así que lo cerramos y lo ejecutamos para ver si se detiene donde pusimos el breakpoint....y si se detiene ahora es irnos presionando F8 para ver donde se detiene para que ingresemos el serial y se detiene aquí en este call


así que ponemos un breakpoin en la línea de abajo e ingresamos como serial "polomon" y damos enter y se detiene donde le dijimos al programa


Para revisarlos y echarles una mira dita y no trasearlos con F7 y F8 solo nos ponemos encima de ellos y presionamos enter para ver que contienen o que hacen y nos regresamos con la tecla menos y en uno de ellos vemos que pregunta el número de dígitos del serial y eso lo sé porque ingrese varios seriales distintos con números distintos de dígitos y descubrí que el serial contiene 9 dígitos este es el call


después por casualidad ingrese "123456789" y medio el serial correcto.... Luego mire esa cadena arriba y me dije si pongo "012345678" funcionara algo tiene que ver esa cadena y si funciono después ingrese pedazos de 9 dígitos de esa cadena y funcionaban, no sé porque, pero funcionan así que le hice un keygen tomando pedazos de esa cadena aquí se los dejo

EDITO: El serial solo tiene que tener 9 caracteres pueden ser cualquiera solo con longitud 9 eso lo muestra en la imagen de arriba pero para mas muestra les dejo una imagen entramos en el call ese y yo ingrese como serial "polomon" y vemos que compara la longitud de este serial con 9


                                     

Como vemos compara el largo de la cadena y si es 9 elige un ret y sino el otro

<html>
<head>
<title>Keygen Crackme ThreadHell Crackme Nyan  ...:::Flamer:::...</title>
</head>
<body bgcolor="black">
<center>
<marquee style="font-size:30;color:yellow;">Keygen Crackme El Infierno De Los Hilos Crackme Nyan ...:::By Flamer:::...</marquee><br><br>
<label style="color:white;">Serial:</label>
<input type="text" id="pass" size='50' style="background-color:Gray;color:white;text-align:center;">
<input type="button" value="Copy" onclick="copiar()"><br><br>

<input type="button"  value="Generar" onclick="auto()" id="boton1">
<input type="button"  value="Detener" onclick="stop()" id="boton2" disabled>
<input type="button"  value="Limpiar" onclick="limpia()" id="boton3">
</center>
<script>
let tiempo;
function copiar() 
{
   let c=document.getElementById('pass'); 
   navigator.clipboard.writeText(c.value);
}
//==================================================================================
function limpia()
{
   document.getElementById("nom").value="";
   document.getElementById("pass").value="";
}
//==================================================================================
function auto()
{
   document.getElementById("boton1").disabled = true;
   document.getElementById("boton2").disabled = false;
   genera(); 
   tiempo=setTimeout("auto()",10);
}
//==================================================================================
function stop()
{
   document.getElementById("boton1").disabled = false;
   document.getElementById("boton2").disabled = true;
   clearTimeout(tiempo);
}
//==================================================================================
function genera()
{
   let cadena="[rsp+58]:&" + String.fromCharCode(34) + "Password:0123456789winsymlink/dev/stdinParseFloatcomplex128t.Kind==IsValidSidLogonUserWLockFileExReOpenFileNetUserAddNetUserDelNtOpenFileWSASocketWws2_32.dllvgetrandomnotifyListprofInsertstackLargeNotworkermSpanInUseGOMAXPROCSstoptracedisablethpinvalidptrschedtracesemacquiredebugcall<badpcflushGenMBgoal,cleanups\ns.state=s.base()=heapGoal=GOMEMLIMITKiBnow,pagesatsweepgen=sweepgen,bound=,limit=exitThreadBadvarintGCforced\nrunqueue=stopwait=runqsize=gfreec";
   let largo,posi,pass;
   
   largo=cadena.length-10;
   posi=parseInt(Math.random() * (largo - 0) + 0);
   pass=cadena.substr(posi,9);
   document.getElementById("pass").value=pass;
}
</script>
</body>
</html>

Aquí una foto de él


Así que probamos unos cuantos seriales para probar el keygen y nos muestra esto


Bueno es todo por hoy espero les haya gustado saludo a Neutrino, a Nyan por este crackme y a todos los CrackSLatinoS




jueves, 20 de agosto de 2026

Solucion al Crackme 1 De Hendrix Reto WarZone Del Foro.ElHacker.Net

Hola amigos hoy veremos la solución al crackme 1 de hendrix, sin más que decir aquí les dejo una foto del reto

 


Bueno ahora le pasamos el Exeinfo PE para ver que nos dice y esto nos arroja


Nos dice que está empacado con upx así que nos vamos a la consola y a escribir "upx -d" para ver que nos dice


Valla nos arroja error esto quiere decir que han modificado algo, no nos queda otra que desempacar a mano, así que nos vamos al depurador x32dbg y nos muestra la palabra pushad así que solo presionamos, solo una vez F8, solo una vez y revisamos el registro ESP y asemos lo siguiente


Clic derecho y seleccionamos mostrar en el volcado  y hay se mostró esto


Hay nos muestra la dirección del Original Entry Point (OEP) asi que le ponemos un breakpoint en esa dirección y presionamos F9 y después nos vamos solo con F8 hasta llegar al main o que se muestre esto


Ahora lo vamos a dumpear de memoria para eso usamos Scylla y damos clic en


Y al presionar Fix Dump seleccionamos el archivo Dump que se creó así


Y nos crea un archivo llamado "Crackme1_dump_SCY.exe" y pues ya lo podemos abrir con el x32dbg y ya lo podemos tracear..... Bueno para empezar este crackme toma el nombre que ingresamos y calcula su longitud o sea el número de dígitos y los multiplica por 2 yo ingrese el nombre "polo" tiene 4 dígitos multiplicado por 2 son 8... Luego compara ese resultado 8 por la longitud de el serial que ingresamos yo ingrese "123456"

                                       

Como ven esa es la zona que les digo así que ingresaremos "polo" y como serial "12345678" y vemos que si pasa, ahora nos vamos hasta la dirección 00402774 donde vemos que toma los 2 primeros dígitos del serial  "12" y más abajo una intrusión de multiplicación


En la primera multiplicación lo hace por 56 

(49*56=2744)  después el resultado lo multiplica por el valor ASCII de 2 que es 50

(50*2744=137200) ese es el resultado...y más abajo vemos una intrusión de división
(137200 / 255=538) y sobran 10 o sea A en hexadecimal


Después multiplica el valor ASCII de "p" de "polo" por 2 y es E0 y el resultado es comparado por A
70 * 2= E0



Como vemos toma de 2 dígitos del serial y los multiplica el primero por 56 y después el resultado por el segundo digito y luego los divide por 255 y el residuo lo compara por el primer digito de el nombre por 2 y luego toma el "34" del serial y multiplica el valor ASCII del 3 que es 51 * 56 y el resultado por el valor ASCII de  el 4 que es 52 para después dividirlo entre 255 y el residuo lo compara por el valor ASCII de "o" de el nombre "polo" que es

111 * 2 = 222 y así sucesivamente con todos los dígitos del serial y con los dígitos del nombre.... Bueno espero me hayan entendido aquí les dejo el keygen


<html>
<head>
<title>Keygen Crackme 1 De Hendrix  ...:::Flamer:::...</title>
</head>
<body bgcolor="black">
<center>
<marquee style="font-size:30;color:yellow;">Generador De Claves Del Crackme 1 De Hendrix ...:::By Flamer:::...</marquee><br><br>

<label style="color:white;">Nombre:&nbsp&nbsp&nbsp</label>
<input type="text" id="nom" size='50' style="background-color:Gray;color:white;text-align:center;">
<input type="button" value="Copy" onclick="copiar1()"><br><br>

<label style="color:white;">Serial:&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp</label>
<input type="text" id="pass" size='50' style="background-color:Gray;color:white;text-align:center;">
<input type="button" value="Copy" onclick="copiar2()"><br><br>

<input type="button"  value="Generar" onclick="genera()" 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'); 
   c.select();
   document.execCommand('copy');
}
//==================================================================================
function copiar2() 
{
   let c=document.getElementById('pass'); 
   c.select();
   document.execCommand('copy');
}
//==================================================================================
function limpia()
{
   document.getElementById("nom").value="";
   document.getElementById("pass").value="";
}
//==================================================================================
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 corre()
{
   let cadena="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
   let x,posi,nombre="";
   let largo=parseInt(Math.random() * (20 - 1) + 1);
   
   for(x=0;x<largo;x++)
   {
      posi=parseInt(Math.random() * ((cadena.length - 1) - 0) + 0);
	  nombre+=cadena[posi];
   }
   document.getElementById("nom").value=nombre;
   genera();
   tiempo=setTimeout("corre()",10);
}
//==================================================================================
function genera()
{
   let x,digito,pass="",p;
   let nom=document.getElementById("nom").value;
   
    
   for(x=0;x<nom.length;x++)
   {
      digito=nom[x].charCodeAt(0);
	  digito=digito * 2;
	  p=ciclo(digito);
	  if(p==0) 
	  {
	     pass="";
	     break;
	  }
      else 
      {
	     pass+=p;
      }	  
   }
   document.getElementById("pass").value=pass;
}
//==================================================================================
function ciclo(digito)
{
   let x,y,p;
   for(x=33;x<=122;x++)
   {
      for(y=33;y<=122;y++)
	  {
	     p=((x*56) * y) % 255;
         if(p==digito)
         {
		    return String.fromCharCode(x) + String.fromCharCode(y);
         }		 
	  }
   }
   alert("Error El Nombre No Tiene Password De Solucion");
   clearTimeout(tiempo);
   return 0;
}
</script>
</body>
</html>


Aqui una foto del keygen


Ahora ingresamos la palabra "polon" y la contraseña y nos muestra esto



Bueno amigo creo que eso es todo espero les haya gustado saludo Flamer