Recentemente tive a necessidade de conseguir saber qual foi a chave de produto (Product Key) usada na instalação do Windows. Esta situação foi provocada pela necessidade de reinstalar o sistema operativo e o dono do computador não se lembrar onde a tinha guardado. Apesar de se poder instalar o Windows 7 sem especificar a chave, o mesmo não se aplica à ativação do mesmo, logo teria de aproveitar o facto do sistema operativo ainda funcionar para conseguir saber qual foi a chave usada no momento da instalação.
É verdade que existem muitas aplicações no mercado que resolvem esta situação, mas o objetivo deste artigo é mostrar como é que se consegue obter esta informação usando apenas os recursos que já se encontram disponíveis no sistema operativo.
A chave de produto do Windows está armazenada numa entrada do registo de forma encriptada. A cifra usada é publica e encontra-se documentada no portal da Microsoft.
Instruções:
1 – Clicar em “Iniciar” e escrever “PowerShell ISE”
2 – No editor PowerShell colar o seguinte código:
function Get-WindowsKey
{
param ($targets = ".")
$hklm = 2147483650
$regPath = "Software\Microsoft\Windows NT\CurrentVersion"
$regValue = "DigitalProductId4"
Foreach ($target in $targets) {
$productKey = $null
$win32os = $null
$wmi = [WMIClass]"\\$target\root\default:stdRegProv"
$data = $wmi.GetBinaryValue($hklm,$regPath,$regValue)
$binArray = ($data.uValue)[52..66]
$charsArray = "B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9"
For ($i = 24; $i -ge 0; $i--) {
$k = 0
For ($j = 14; $j -ge 0; $j--) {
$k = $k * 256 -bxor $binArray[$j]
$binArray[$j] = [math]::truncate($k / 24)
$k = $k % 24
}
$productKey = $charsArray[$k] + $productKey
If (($i % 5 -eq 0) -and ($i -ne 0)) {
$productKey = "-" + $productKey
}
}
$win32os = Get-WmiObject Win32_OperatingSystem -computer $target
$obj = New-Object Object
$obj | Add-Member Noteproperty "Nome do Computador" -value $target
$obj | Add-Member Noteproperty "Edição do Windows" -value $win32os.Caption
$obj | Add-Member Noteproperty "Versão do Service Pack" -value $win32os.CSDVersion
$obj | Add-Member Noteproperty "Arquitetura" -value $win32os.OSArchitecture
$obj | Add-Member Noteproperty "Número da Versão" -value $win32os.BuildNumber
$obj | Add-Member Noteproperty "Registado para" -value $win32os.RegisteredUser
$obj | Add-Member Noteproperty "Canal de origem (ProductID)" -value $win32os.SerialNumber
$obj | Add-Member Noteproperty "Chave do produto (ProductKey)" -value $productkey
$obj
}
}
Get-WindowsKey
3 – Pressionar a tecla F5 ou então clicar no botão play
Na área de resultados vai aparecer o seguinte:
Nome do Computador : .
Edição do Windows : Microsoft Windows 7 Enterprise
Versão do Service Pack : Service Pack 1
Arquitetura : 64-bit
Número da Versão : 7601
Registado para : NOME_DO_REGISTO
Canal de origem (ProductID) : 11111-11111-11111-11111
Chave do produto (ProductKey) : A123A-A123A-A123A-A123A-A123A
O script PowerShell que aqui coloquei foi desenhado por forma a ser possível obter a chave de produto em múltiplas máquinas remotas, bastando para isso passar o nome do(s) computador(es) à função Get-WindowsKey. Quando o nome da máquina não é especificado o mesmo é substituído por “.” o que corresponde à máquina local.
Para que este script funcione em máquinas remotas é necessário garantir que o contexto de utilizador na qual o script é executado tem permissões de administração sobre a máquina remota e/ou permissões sobre os objetos WMI das máquinas remotas.
Nas instalações OEM do Windows a chave obtida através deste método é diferente daquela que se encontra impressa no COA (Certificado de Autenticidade). Isto significa que a chave obtida é apenas válida quando usada em conjunto com o meio de instalação/recuperação fornecido pelo fabricante do computador.
Recursos adicionais:
Página de onde foi retirado o script original: http://mspowershell.blogspot.pt/2009/02/retrieveing-windows-product-key.html
Página oficial do PowerShell:
http://technet.microsoft.com/pt-pt/scriptcenter/dd742419.aspx
Como interpretar o valor do ProductID:
http://support.microsoft.com/kb/936607/pt
Notas:
- O resultado apresentado em “ProductID” e “ProductKey” foram alterados propositadamente neste artigo.
- Efetuei alterações ao script original por forma a corrigir uma pequena anomalia relativa ao nome da chave e efetuei a tradução dos resultados obtidos para o idioma Português.
- Em versões anteriores ao Windows 7 a chave é DigitalProductID
Etiquetas:Dicas; PowerShell; Product Key; Chave do Produto; Windows 7