
Keygen de Windows XP
Un generador de claves VLK para Windows XP / Windows Server 2003. Esta herramienta te permite generar claves válidas de Windows XP basadas en la Raw Product Key (Clave de Producto sin procesar), que puede ser aleatoria.
La Raw Product Key (RPK) se proporciona en forma de 9 dígitos XXX-YYYYYY y solo es necesaria para generar una clave de Windows XP.

Ve a la pestaña de Releases y descarga la última versión desde allí.
Este proyecto no está muerto — haré todo lo posible por llevarlo a buen término.
En general, lo único que nos separa de generar claves válidas de Windows XP para CADA EDICIÓN y CADA COMPILACIÓN es la falta de las respectivas claves privadas generadas a partir de sus contrapartes públicas dentro de pidgen.dll. No hay código disponible en línea para la función de logaritmo discreto de curva elíptica, solo hay información vaga sobre cómo hacerlo.
Con el tiempo, el problema se ha resuelto parcialmente.
El recurso BINK no estaba codificado de ninguna manera y los datos simplemente se escribían secuencialmente en el recurso. sk00ter también explicó por completo el formato BINK en los foros de MDL. Aprovechando el conocimiento previo de la comunidad sobre el tema, escribí un lector BINK en Python 3. El archivo es público en este repositorio, haz clic aquí para ver el código fuente.
La solución del logaritmo discreto es el área de investigación más inexplorada a día de 28 de mayo de 2023. Sin embargo, mi amigo nephacks encontró esa escurridiza herramienta para resolver ese difícil problema en los rincones más oscuros de internet. Se llama ECDLP (Problema del Logaritmo Discreto de Curva Elíptica) Solver, de Mr. HAANDI. Como era extremadamente frustrante encontrarla en línea, la volví a subir a mi sitio web. Puedes descargar la herramienta aquí.
El archivo ReadMe que viene con la versión 0.2a del solucionador es suficientemente bueno por sí solo, así que cualquiera con un poco de criterio podrá configurar esa herramienta. Sin embargo, no es de código abierto, por lo que integrarlo en mi keygen resulta imposible.
En el escenario ideal, el keygen te pediría un recurso BINK extraído de pidgen.dll, que luego descompondría en los siguientes segmentos:
pubX; pubY)genX; genY)a; b)pConociendo estos segmentos, el keygen forzaría por fuerza bruta el orden del generador genOrder usando el algoritmo de Schoof, seguido de la clave privada privateKey, aprovechando el genOrder calculado para usar el algoritmo más óptimo de Pollard Rho. No hay duda de que podemos descifrar cualquier clave privada en cuestión de 20 minutos usando poder computacional moderno, siempre que tengamos el algoritmo funcional.
Una vez que el keygen termina de forzar por fuerza bruta la clave privada correcta, la tarea se reduce a generar realmente una clave, que es lo que hace este keygen. Para darte una mejor perspectiva, puedo proporcionarte el flujo del keygen ideal. Lo que está tachado es lo que implementa mi keygen:
genOrder, privateKey)Necesitamos usar una Raw Product Key aleatoria como base para generar un ID de producto con la forma AAAAA-BBB-CCCCCCS-DDEEE.
| Dígitos | Significado |
|---|---|
| AAAAA | Constante de familia de SO |
| BBB | ID de canal |
| CCCCCC | Número de secuencia |
| S | Dígito de comprobación |
| DD | Índice de clave pública |
| EEE | Número aleatorio de 3 dígitos |
La constante de familia de SO AAAAA es diferente para cada serie de Windows XP. Por ejemplo, es 76487 para SP3.
Las secciones BBB y CCCCCC esencialmente codifican la Raw Product Key. Por ejemplo, si la primera sección es igual a XXX y la segunda sección es igual a YYYYYY, la Raw Product Key se codificará como XXX-YYYYYY.
El dígito de comprobación S se elige de modo que la suma de todos los dígitos C más él dé un número divisible por 7.
El índice de clave pública DD nos permite saber qué clave pública se usó para verificar con éxito la autenticidad de nuestra Clave de Producto.
Por ejemplo, es 22 para claves Professional y 23 para claves VLK.
Se usa un número aleatorio EEE para generar un ID de instalación diferente cada vez.
La Clave de Producto en sí (no confundir con la RPK) tiene la forma FFFFF-GGGGG-HHHHH-JJJJJ-KKKKK, codificada en Base-24 con
el alfabeto BCDFGHJKMPQRTVWXY2346789 para excluir cualquier carácter que pueda confundirse fácilmente, como I y 1 u O y 0.
Según la fórmula de capacidad del alfabeto, la clave puede contener como máximo 114 bits de información. $$N = \log_2(24^{25}) \approx 114$$
Con base en ese cálculo, descomponemos la Clave de Producto de 114 bits en 4 segmentos ordenados:
| Segment | Capacity | Data |
|---|---|---|
| Upgrade | 1 bit | Indicador de versión de actualización |
| Serial | 30 bits | Raw Product Key (RPK) |
| Hash | 28 bits | Hash de la RPK |
| Signature | 55 bits | Firma de curva elíptica para el hash de la RPK |
Por simplicidad, combinaremos los segmentos Upgrade y Serial en un solo segmento llamado Data. Con esa lógica podremos extraer la RPK desplazando Data a la derecha y volver a empaquetarla desplazando los bits a la izquierda, porque la mayoría de las claves de producto a priori válidas que he comprobado tenían el bit de actualización establecido en 1.
Microsoft rehizo el formato de su Clave de Producto con Windows Server 2003 para incluir una clave de autenticación de servidor backend, que era un enfoque realmente seguro para la validación de licencias, ya que nadie podía adivinar qué algoritmo de validación habían empleado en su servidor privado. Además de añadir el mecanismo de validación en línea, también aumentaron la aritmética general de 384 a 512 bits y el escalar de la firma a 62 bits de información.
| Segment | Capacity | Data |
|---|---|---|
| Upgrade | 1 bit | Indicador de versión de actualización |
| Channel ID | 10 bits | La parte BBB de la RPK |
| Hash | 31 bits | Hash de la RPK |
| Signature | 62 bits | Firma de curva elíptica para el hash de la RPK |
| Auth Key | 10 bits | Valor de autenticación backend |
Sin embargo, si generábamos una clave sin tener en cuenta la activación en línea, aún podíamos generar claves válidas que nos permitieran pasar la instalación del sistema operativo. Y eso es exactamente lo que hace el código: genera una clave de autenticación aleatoria de 10 bits. Hoy en día no importa en absoluto, ya que los servidores de activación están caídos y Server 2003 se considera abandonware, del mismo modo que todo este proyecto no debería considerarse piratería.