web-dev-qa-db-fra.com

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

Je me bats actuellement avec Ubuntu et j'aimerais avoir de l'aide.

En ce moment, je lance Ubuntu depuis une clé USB après Windows 7.

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

29
frugge

Commencez par récupérer 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 , votez-y, merci de voter ici, merci

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

Sudo apt install chntpw

Pour examiner le fichier de registre approprié, montez le disque Windows et ouvrez-le 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 de dessous dit

Le chemin d'accès au fichier de registre approprié est/chemin/vers/windisk/Windows/System32/config/RegBack/SOFTWARE

36
Mark Kirby

Donc, pour ceux qui se demandent comment this fonctionne réellement.

Essentiellement, vous devrez récupérer le contenu de la clé de registre

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

C'est ce qu'on appelle REG_BINARY. Ce qui signifie que c'est juste une collection d'octets. Vous pouvez les transférer via chntpw ou les copier à la main.

Voyons ce que nous avons à faire avec ces octets pour obtenir notre clé de produit à l'aide d'un pseudo-code .

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

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

Ceci est toujours un tas d'octets, qui ne ressemblent pas du tout à la clé de produit. Alors laissez-nous le décoder.

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

Characters = "BCDFGHJKMPQRTVWXY2346789"

Oui, ce n'est pas l'alphabet entier. Une clé de produit Windows n’utilise pas tous les symboles alphanumériques.

Maintenant, faisons le décodage. Nous aurons besoin de:

  • Une variable pour contenir la clé de produit
  • Une boucle de 0 à 24. Pour chaque caractère de notre clé de produit
  • Une boucle interne de 0 à 14 (en sens inverse) pour chaque octet de notre identifiant codé
  • Un peu de bidouillage et d'arithmatique 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 nous avons fini!

... Presque:

PRINT(ProductKey)

À présent!


Capacités de notre pseudo-code

  • $array.Range($from, $to) Obtenez le contenu de $array de $from à $to
  • $array.Insert($where, $what) Insérez $what à $where
  • FOR $var = $start TO $stop [STEP $step] boucle la variable $var de $start à $stop en appliquant $step à chaque itération
  • $a XOR $b Calculer au format binaire exclusif ou sur les chiffres $a et $b
  • $a MOD $b Calcule le reste de la division de $a et $b
  • $array[$i] Ne prenez que l'élément à la position $i du tableau
  • #bla bla Est un commentaire et sera ignoré
  • Les chaînes ne sont que des tableaux de caractères.

Vous pouvez voir 3 mises en œuvre réelles dans C #, PowerShell et Python sur at super utilisateur

5
MrPaulch