Zmiana ProductID w Windows XP

Microsoft chcąc ograniczyć instalowanie nielegalnych kopii Windows XP, wprowadził blokadę antypiracką w Service Pack 1. Uniemożliwia ona instalację SP1 na Windowsach XP, których instalacja została przeprowadzona z wykorzystaniem dostępnych publicznie kluczy (w tym chyba najpopularniejszego FCKGW-…). Podczas instalacji Windowsa, na podstawie wpisaneho klucza, tworzony jest identyfikator produktu ProductID. Właśnie na podstawie ProductID instalator SP1 sprawdza, czy aktualizacja systemu może zostać dokonana. Aby więc zainstalować SP1 na Windowsie XP, którego klucz został uznany przez MS za “piracki”, należy zmienić klucz i ponownie aktywować Windows. Opis tej procedury można od jakiegoś już czasu znaleźć w Sieci. Okazało się, że zabezpieczenie antypirackie daje się we znaki także legalnym, zarejestrowanym użytkownikom Windows XP. W tej sytuacji Microsoft zdecydował się upublicznić procedurę zmiany ProductID. Możemy ją odnaleźć w artykule Q328874 w MS Knowledge Base. Artykuł opisuje dwa sposoby zmiany ProductID: ręczny (z wykorzystaniem Windows Activation Wizard i Edytora rejestru) i automatyczny (skrypt korzystający z WMI - Windows Management Instrumentation).

W metodzie ręcznej MS zaleca najpierw utworzenie na wszelki wypadek nowego punktu przywracania systemu. Następnie wykonujemy kolejne kroki zmiany ProductID:

  1. Klikamy na Start i wybieramy Uruchom… (Run…).

  2. Wpisujemy regedit i klikamy na OK.

  3. Odnajdujemy klucz HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\Current Version\WPAEvents

  4. Odnajdujemy wartość OOBETimer, zaznaczamy ją i z menu kontekstowego wybieramy Modyfikuj… (Modify…).

  5. Zmieniamy przynajmniej dwie ostatnie cyfry aby zdezaktywować Windows.

  6. Znowu klikamy na Start i na Uruchom… (Run…).

  7. Wpisujemy %systemroot%\system32\oobe\msoobe.exe /a i klikamy na OK.

  8. Zaznaczamy opcję aktywacji przez telefon (Yes, I want to telephone a customer service representative to activate Windows) i klikamy na Dalej (Next).

  9. Wybieramy zmianę klucza (Change Product key).

  10. Wpisujemy nowy klucz i klikamy na Update. Jeśli kreator wrócił do poprzedniego okienka, zaznaczamy przypomnienie później (Remind me later.) i uruchamiamy komputer ponownie.

  11. Możemy powtórzyć kroki 6 i 7 w celu sprawdzenia, czy zmiana klucza się powiodła i Windows jest aktywowany.

  12. Klikamy na OK aby zamknąć kreatora.

  13. Możemy teraz zainstalować Service Pack 1.

Jeśli po instalacji SP1 nie daje się uruchomić systemu, należy wcisnąć F8 i wybrać ostatnią dobrą konfigurację (Last Known Good Configuration).

Sposób automatyczny polega na uruchomieniu skryptu VBS, któremu jako parametr podajemy nowy klucz. Przyda się napewno w sytuacji gdy mamy do zmiany kucze na wielu maszynach. Prawdę mówiąc użycie skryptu nawet na tylko jednym komputerze jest opłacalne, ponieważ trwa o wiele krócej niż procedura ręczna. Microsoft udostępnia dwa skrypty, jeden, nazwany ChangeVLKeySP1.vbs jest przeznaczony dla systemów z zainstalowanym SP1, drugi, nazwany ChangeVLKey2600.vbs jest przeznaczony dla systemów bez tej aktualizacji. Wybrany skrypt kopiujemy do pliku tekstowego z rozszerzeniem VBS. W zależności od wybranej nazwy pliku możemy zmienić też treść komunikatu w treści skryptu. Użycie każdego skryptu jest bardzo proste, wywołojemy go podając klucz jako parametr. Można wykorzystać Wiersz polecenia, polecenie Uruchom… z menu Start lub też umieścić wywołanie skryptu razem z parametrem. w pliku CMD.

ChangeVLKey2600.vbs

´

´ WMI Script - ChangeVLKey.vbs

´

´ This script changes the product key on the computer

´

´***************************************************************************

ON ERROR RESUME NEXT

if Wscript.arguments.count<1 then

Wscript.echo “Script can´t run without VolumeProductKey argument”

Wscript.echo “Correct usage: Cscript ChangeVLKey.vbs ABCDE-FGHIJ-KLMNO-PRSTU-WYQZX”

Wscript.quit

end if

Dim VOL_PROD_KEY

VOL_PROD_KEY = Wscript.arguments.Item(0)

VOL_PROD_KEY = Replace(VOL_PROD_KEY,"-","") ´remove hyphens if any

Dim WshShell

Set WshShell = WScript.CreateObject(“WScript.Shell”)

WshShell.RegDelete “HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WPAEvents\OOBETimer” ´delete OOBETimer registry value

for each Obj in GetObject(“winmgmts:{impersonationLevel=impersonate}”).InstancesOf (“win32_WindowsProductActivation”)

result = Obj.SetProductKey (VOL_PROD_KEY)

if err <> 0 then

WScript.Echo Err.Description, “0x” & Hex(Err.Number)

Err.Clear

end if

Next

ChangeVLKeySP1.vbs

´

´ WMI Script - ChangeVLKey.vbs

´

´ This script changes the product key on the computer

´

´***************************************************************************

ON ERROR RESUME NEXT

if Wscript.arguments.count<1 then

Wscript.echo “Script can´t run without VolumeProductKey argument”

Wscript.echo “Correct usage: Cscript ChangeVLKey.vbs ABCDE-FGHIJ-KLMNO-PRSTU-WYQZX”

Wscript.quit

end if

Dim VOL_PROD_KEY

VOL_PROD_KEY = Wscript.arguments.Item(0)

VOL_PROD_KEY = Replace(VOL_PROD_KEY,"-","") ´remove hyphens if any

for each Obj in GetObject(“winmgmts:{impersonationLevel=impersonate}”).InstancesOf (“win32_WindowsProductActivation”)

result = Obj.SetProductKey (VOL_PROD_KEY)

if err <> 0 then

WScript.Echo Err.Description, “0x” & Hex(Err.Number)

Err.Clear

end if

Next

Na podstawie Microsoft Knowledge Base Q328874.