50 votes

Puis-je récupérer ma clé de produit Windows à partir d'Ubuntu ?

J'ai du mal à utiliser ubuntu et j'aimerais avoir de l'aide.

En ce moment, je fais tourner ubuntu à partir d'une clé USB après avoir quitté Windows 7.

Comment puis-je obtenir ma clé de produit Windows, qui se trouve quelque part sur le disque dur de mon ordinateur portable, à partir d'Ubuntu ?

58voto

Mark Kirby Points 17611

Récupérez d'abord votre Ubuntu en allant sur mode de récupération et en cours d'exécution

sudo apt install --reinstall ubuntu-desktop

Cette réponse n'est pas écrite par moi mais par Thomas sur Superutilisateur Si vous votez ici, merci de le faire.

Il existe un excellent outil pour Linux appelé chntpw. Vous pouvez l'obtenir l'obtenir facilement sur Debian/Ubuntu via :

sudo apt install chntpw

Pour consulter le fichier de registre correspondant, montez le disque de Windows et cliquez sur l'ouvrir comme suit :

chntpw -e /path/to/windisk/Windows/System32/config/SOFTWARE

Maintenant, pour obtenir le DigitalProductId décodé, entrez cette commande :

dpi \Microsoft\Windows NT\CurrentVersion\DigitalProductId

Un commentaire ci-dessous dit

Le chemin d'accès au fichier de registre correspondant est le suivant /path/to/windisk/Windows/System32/config/RegBack/SOFTWARE

9voto

MrPaulch Points 191

Pour ceux qui se demandent comment este fonctionne réellement.

Vous devez essentiellement récupérer le contenu de la clé de registre

HKLM\Software\Microsoft\Windows NT\CurrentVersion\DigitalProductId

Il s'agit d'un soi-disant REG_BINARY . Il s'agit donc d'une simple collection d'octets. Vous pouvez les vider via chntpw ou les copier à la main.

Voyons ce que nous devons faire avec ces octets afin d'obtenir notre clé de produit à l'aide de quelques pseudo-code .

Une fois que vous les avez dans un tableau, vous devez extraire le sous-ensemble d'octets qui codent l'identifiant du produit. En particulier : l'intervalle entre 52 et (52 + 14). Cela vous donne 15 octets.

EncodedId = DigitalProductId.Range(52, 52+14)

Il s'agit toujours d'un tas d'octets qui ne ressemblent pas du tout à la clé du produit. Décodons-le.

Pour cela, vous avez besoin de la collection de tous les caractères dont une clé de produit peut être composée :

Characters = "BCDFGHJKMPQRTVWXY2346789"

Oui, ce n'est pas tout l'alphabet. Il s'avère qu'une clé de produit Windows n'utilise pas tous les symboles alphanumériques.

Passons maintenant au décodage. Nous aurons besoin de

  • Une variable contenant la clé du produit
  • Une boucle de 0 à 24. Pour chaque caractère de notre clé de produit
  • Une boucle intérieure sur 0 à 14 (en sens inverse) Pour chaque octet de notre identifiant codé
  • Un peu de bricolage et d'arithmétique pour le processus de décodage

ProductKey = ""
FOR i = 0 TO 24
    c = 0

    FOR j = 14 TO 0 STEP -1
        # Shift the current contents of c to the left by 1 byte 
        #  and xor it with the next byte of our id
        c = (c * 256) XOR EncodedId[j]

        # Put the result of the divison back into the array
        EncodedId[j] = FLOOR(c / 24)

        # Calculate remainder of c
        c = c MOD 24
    LOOP
    # Take character at position c and prepend it to the ProductKey
    ProductKey = Characters[c] + ProductKey
LOOP

Enfin, nous insérons le caractère "-" dans la chaîne aux endroits appropriés.

FOR i = 4 TO 1 STEP -1
    ProductKey = ProductKey.Insert(i * 5, "-")
LOOP

Et c'est fini !

... Presque :

PRINT(ProductKey)

Maintenant !


Capacités de notre pseudo-code

  • $array.Range($from, $to) Obtenir le contenu de $array de $from a $to
  • $array.Insert($where, $what) Insérer $what à $where
  • FOR $var = $start TO $stop [STEP $step] boucle la variable $var de $start a $stop appliquant $step à chaque itération
  • $a XOR $b Calculer peu judicieux exclusif ou sur les chiffres $a y $b
  • $a MOD $b Calculer le reste de la division de $a y $b
  • $array[$i] Ne prendre que l'élément situé à la position $i à partir du tableau
  • #bla bla Il s'agit d'un commentaire qui sera ignoré
  • Les chaînes de caractères sont des tableaux de caractères.

Vous pouvez voir 3 implémentations réelles en C#, PowerShell et Python à l'adresse suivante Super utilisateur

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X