Todas as permutações de uma chave de licença do Windows

97

Preciso me inscrever para uma atualização do Windows 8 para meu laptop, para a qual preciso da chave de licença do Windows 7 na parte inferior do laptop.

Como a Microsoft decidiu, em sua infinita sabedoria, criar rótulos de licença que se desgastam e não consigo ler minha chave de licença claramente, isso significa que não posso registrar meu laptop para a oferta de upgrade do Windows usando um processo automatizado.

Ao segurar o laptop em um ângulo em relação à luz, fui capaz de verificar a maior parte do código, mas várias das letras são ambíguas (agradeço novamente à Microsoft por usar caracteres fáceis de interpretar mal em sua etiqueta).

Tenho a seguinte chave de licença (ofuscada),

MPP6R-09RXG-2H[8B]MT-[B8]K[HN]M9-V[6G]C8R

onde os caracteres entre colchetes são ambíguos, então é 8ou B, Bou 8, Hou N, 6ou G.

Fazendo 16 combinações.

É apropriado gerar as possíveis permutações desta chave de licença usando itertools ou existe uma maneira melhor?

Eu obtive a chave correta com agradecimentos aos contribuidores. Uma maneira muito conveniente de verificar se a chave é válida é usando o verificador de chave de produto do Windows 7 .

Kerridge0
fonte
11
Acho que você poderia listar as dezesseis combinações à mão, o que no final pode levar menos tempo.
Waleed Khan
17
Uma pergunta tão legal. +1
Flavius
12
Eu realmente espero que você tenha alterado alguns dos personagens reconhecidos e você não esteja postando sua chave real do Windows na Internet ...
rodrigo
1
Heh, teria sido uma pergunta muito interessante para postar em codegolf.stackexchange.com
Earlz
4
@rodrigo Sim, ofusquei o código :)
Kerridge0

Respostas:

165

Isenção de responsabilidade: Sim, eu sei que este não é um código Python . Simplesmente veio à minha mente e eu simplesmente tive que escrever.

A maneira mais simples é usar a expansão do shell:

$ echo MPP6R-09RXG-2H{8,B}MT-{B,8}K{H,N}M9-V{6,G}C8R
MPP6R-09RXG-2H8MT-BKHM9-V6C8R
MPP6R-09RXG-2H8MT-BKHM9-VGC8R
MPP6R-09RXG-2H8MT-BKNM9-V6C8R
MPP6R-09RXG-2H8MT-BKNM9-VGC8R
MPP6R-09RXG-2H8MT-8KHM9-V6C8R
MPP6R-09RXG-2H8MT-8KHM9-VGC8R
MPP6R-09RXG-2H8MT-8KNM9-V6C8R
MPP6R-09RXG-2H8MT-8KNM9-VGC8R
MPP6R-09RXG-2HBMT-BKHM9-V6C8R
MPP6R-09RXG-2HBMT-BKHM9-VGC8R
MPP6R-09RXG-2HBMT-BKNM9-V6C8R
MPP6R-09RXG-2HBMT-BKNM9-VGC8R
MPP6R-09RXG-2HBMT-8KHM9-V6C8R
MPP6R-09RXG-2HBMT-8KHM9-VGC8R
MPP6R-09RXG-2HBMT-8KNM9-V6C8R
MPP6R-09RXG-2HBMT-8KNM9-VGC8R
motociclista
fonte
8
Eu sei que este não é um código python. Simplesmente veio à minha mente e gostei da ideia. Não há necessidade de downvote esta resposta. :-(
bikeshedder
Não é python, mas mesmo assim é uma bela solução.
Yuval Adam
2
+1 ... e o Windows (até onde eu sei) não tem essa "expansão" ... mas você sempre pode usar Cygwin
Barranka
55
Bem, o Windows pode não ter isso, mas se você precisar iterar sua chave de licença do Linux ... espere, essa é outra razão pela qual eu amo o Linux
Drake Clarris
1
Não só é curto e doce, mas deu as respostas de uma forma muito limpa para copiar e colar. Na verdade, havia uma quinta variável e eu peguei minha chave !! Na verdade, dei a tarefa de "escrever" a um colega, e ele desistiu! Muito obrigado.
Kerridge0
59
from itertools import product
for perm in product('8B', 'B8', 'HN', '6G'):
    print 'MPP6R-09RXG-2H%sMT-%sK%sM9-V%sC8R' % perm
Yuval Adam
fonte
17

Outra forma de gerar as combinações

>>> ['MPP6R-09RXG-2H%sMT-%sK%sM9-V%sC8R' % (a, b, c, d)
...  for a in '8B' for b in 'B8' for c in 'HN' for d in '6G']
['MPP6R-09RXG-2H8MT-BKHM9-V6C8R',
 'MPP6R-09RXG-2H8MT-BKHM9-VGC8R',
 'MPP6R-09RXG-2H8MT-BKNM9-V6C8R',
 'MPP6R-09RXG-2H8MT-BKNM9-VGC8R',
 'MPP6R-09RXG-2H8MT-8KHM9-V6C8R',
 'MPP6R-09RXG-2H8MT-8KHM9-VGC8R',
 'MPP6R-09RXG-2H8MT-8KNM9-V6C8R',
 'MPP6R-09RXG-2H8MT-8KNM9-VGC8R',
 'MPP6R-09RXG-2HBMT-BKHM9-V6C8R',
 'MPP6R-09RXG-2HBMT-BKHM9-VGC8R',
 'MPP6R-09RXG-2HBMT-BKNM9-V6C8R',
 'MPP6R-09RXG-2HBMT-BKNM9-VGC8R',
 'MPP6R-09RXG-2HBMT-8KHM9-V6C8R',
 'MPP6R-09RXG-2HBMT-8KHM9-VGC8R',
 'MPP6R-09RXG-2HBMT-8KNM9-V6C8R',
 'MPP6R-09RXG-2HBMT-8KNM9-VGC8R']
>>> 
Nick Dandoulakis
fonte
9

Que tal usar itertools e functools ao mesmo tempo?

>>> from operator import mod
>>> from functools import partial
>>> from itertools import product
>>> map(partial(mod, 'MPP6R-09RXG-2H%sMT-%sK%sM9-V%sC8R'), product('8B', 'B8', 'HN', '6G'))
['MPP6R-09RXG-2H8MT-BKHM9-V6C8R', 'MPP6R-09RXG-2H8MT-BKHM9-VGC8R', 'MPP6R-09RXG-2H8MT-BKNM9-V6C8R', 'MPP6R-09RXG-2H8MT-BKNM9-VGC8R', 'MPP6R-09RXG-2H8MT-8KHM9-V6C8R', 'MPP6R-09RXG-2H8MT-8KHM9-VGC8R', 'MPP6R-09RXG-2H8MT-8KNM9-V6C8R', 'MPP6R-09RXG-2H8MT-8KNM9-VGC8R', 'MPP6R-09RXG-2HBMT-BKHM9-V6C8R', 'MPP6R-09RXG-2HBMT-BKHM9-VGC8R', 'MPP6R-09RXG-2HBMT-BKNM9-V6C8R', 'MPP6R-09RXG-2HBMT-BKNM9-VGC8R', 'MPP6R-09RXG-2HBMT-8KHM9-V6C8R', 'MPP6R-09RXG-2HBMT-8KHM9-VGC8R', 'MPP6R-09RXG-2HBMT-8KNM9-V6C8R', 'MPP6R-09RXG-2HBMT-8KNM9-VGC8R']
motociclista
fonte
1
Agradável! Nunca me ocorreu que você pudesse usar operator.mod para fazer a formatação de strings também.
Tom
@MartijnPieters partialnão é necessário ao usar, formatpois não muda nada quando chamado sem *argsou **kwargs. Ao usar formatvocê não pode passar a tupla diretamente, mas precisa convertê-lo aos argumentos primeiro: map(lambda args: 'MPP6R-09RXG-2H{}MT-{}K{}M9-V{}C8R'.format(*args), product('8B', 'B8', 'HN', '6G')). Ainda uso muito a velha %formatação de strings por motivos sentimentais. Eu realmente deveria considerar usar a formatfunção com mais frequência.
ciclista de
Sim, de alguma forma, imaginei os argumentos sendo aplicados como *args. Meu erro.
Martijn Pieters
3

http://www.magicaljellybean.com/keyfinder/

O Magical Jelly Bean Keyfinder é um utilitário freeware que recupera a chave do produto (chave do cd) usada para instalar o Windows a partir do seu registro. Ele também possui um arquivo de configuração atualizado pela comunidade que recupera as chaves do produto para muitos outros aplicativos.

Basta executá-lo na instalação para a qual deseja a chave.

Paul Collingwood
fonte
2
Infelizmente, o Windows instalado no laptop não está usando a chave de licença encontrada na parte inferior do laptop, mas é instalado usando algum tipo de chave de volume corporativa. A Microsoft não permite que esses códigos sejam usados ​​para validar a atualização do Windows.
Kerridge0
1

Se você usar a opção Windows Anytime Upgrade diretamente do Windows 7, NÃO precisa saber qual é a chave de licença.

Enquanto o sistema operacional estiver ativado, o Windows 8 irá apenas sobrescrever o sistema operacional existente e colocar tudo do Windows 7 em uma pasta "Windows-old" que você pode excluir, a menos que precise de um arquivo ou algo assim.

O processo de atualização do Windows procura um sistema operacional Windows ativado, até mesmo o Windows XP faria, desde que seja ativado antes de instalar a atualização.

Você receberá um e-mail com a chave de licença do Windows 8 ao comprar por meio do Anytime Upgrade. Se você comprar uma atualização de uma loja, receberá apenas uma chave de licença e um URL de download OU apenas conecte a chave ao Windows Anytime Upgrade e ele será baixado e instalado.

phpMedler
fonte
Correto, no entanto, no momento da publicação, este código era necessário para a "Oferta de atualização do Windows". Este processo também pode ser útil para aqueles que desejam reinstalar o Windows usando o código no COA e não têm mais a partição de restauração do fabricante.
Kerridge0