Определение серийного номера Windows

Аватар пользователя userok


Определение серийного номера Windows.

Написанное ниже справедливо для всех ОС Windows, но рассматривать данный вопрос мы будем на примере ОС Windows XP.

Для начала ответим на вопрос: а где-же от нас скрывают эти заветные символы?
Ответ: в реестре. Однако, как почему-то часто бывает у Microsoft, не всё так просто, серийный номер-то присутствует, но присутствует он в слегка закодированном виде. Для чего так сделано — одному Биллу известно. У меня только одна версия — чтобы поиздеваться над пользователями:), ибо логических объяснений этому странному факту лично я не нахожу.

Давайте откроем редактор реестра Windows и перейдём по следующему адресу HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
Здесь нас интересует двоичный параметр DigitalProductID. Открыв его мы видим кучу символов в шестнадцатеричном виде, непосредственно серийный номер ОС — это пятнадцать символов с 53 по 67.

Рисунок 1.


Синим выделены символы в которых содержится информация о серийном номере.

Каким образом перевести эту тарабарщину в серийный номер? Рассмотрим варианты для работающей ОС и для повреждённой ОС, которая не может загрузиться самостоятельно, а нам необходимо вытащить её серийный номер, например, для переустановки. На возможное ехидное замечание, что проще всего серийник посмотреть на наклейке, сразу отвечу: «Спасибо, кэп!» Однако наклейка может быть повреждена, либо это корпоративная версия Windows, вся документация на которую, включая серийные номера лежит у директора в сейфе, а директор в данный момент на Кипре и.т.д. В общем если у Вас есть читабельная лицензионная наклейка, тогда мне вообще непонятно зачем Вы всё это сейчас читаете;)

Способ первый. Нормально загруженная ОС с использованием стороннего софта, без посмотра реестра.

Здесь всё проще простого: запускаете программу и она сразу показывает серийный номер вашей ОС. В реестр лезть не надо. Есть небольшие бесплатные утилиты, показывающие серийный номер, а есть коммерческие программы, имеющие богатый дополнительный функционал. Рассмотрим несколько бесплатных программ:

1) ProduKey крошечная, бесплатная утилита, которая отображает ProductID и серийные ключи для MS-Office, Windows, Exchange Server и SQL Server.
Рисунок 2.


Cсылка на страницу загрузки программы.

2) Win KeyFinder - это утилита, которая позволит Вам просмотреть и восстановить из реестра ключи к операционным системам Windows 98, 2000, 2003, XP, Vista, 7 и к некоторым другим приложениям. Программа Win KeyFinder позволяет не только расшифровывать их, но и изменять ключи к некоторым продуктам, нажатием лишь одной кнопки.
Рисунок 3.


Cсылка на страницу загрузки программы.

3) Windows Product Key Viewer
Windows Product Key Viewer - это полезное приложение, которое позволяет находить  установленные ключи программ серии Windows, а также отображает всю важную информацию об этих программных продуктах.
Рисунок 4.


Cсылка на страницу загрузки программы.

Способ второй. Нормально загруженная ОС с использованием стороннего софта, с просмотром реестра.

Качаем программу DigitalProductID_to_WinXP_Serial.exe
Рисунок 5.


Запускаем, открываем в реестре параметр DigitalProductID в разделе HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ и вручную вбиваем символы 53-67 (см. Рисунок 1.) из DigitalProductID. Нажимаем кнопку "Bin>Txt" и получаем серийный номер.

Способ третий. Нормально загруженная ОС без использования стороннего софта и просмотра реестра.

Для просмотра серийного номера предлагается выполнить один из скриптов приведённых ниже, которые читают из реестра содержимое DigitalProductID, конвертируют в читабельный вид серийный номер и выводит в диалоговое окно. Желающие могут, проанализировав их код, разобраться с алгоритмом конвертации.

Скрипт первый:
Set WshShell = WScript.CreateObject("WScript.Shell")
strDigitalProductId="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"
strOffXPRU="HKLM\SOFTWARE\Microsoft\Office\10.0\Registration\{91110419-6000-11D3-8CFE-0050048383C9}\DigitalProductId"

strXPKey=GetKey(WshShell.RegRead(strDigitalProductId))
'strOffXPRUKey=GetKey(WshShell.RegRead(strOffXPRU))

'CopytoClipboard
set ie=CreateObject("internetExplorer.application")
ie.navigate "about:blank"
do until ie.readystate=4: wscript.sleep 1: loop
ie.document.parentwindow.clipboardData.setData "Text", strXPKey

MsgBox "WinXP:"&strXPKey&chr(13)&_
"key in clipboard"
' "OffXP:"&strOffXPRUKey

Function GetKey(rpk)

Const rpkOffset=52:i=28
szPossibleChars="BCDFGHJKMPQRTVWXY2346789"

Do 'Rep1
dwAccumulator=0 : j=14
Do
dwAccumulator=dwAccumulator*256
dwAccumulator=rpk(j+rpkOffset)+dwAccumulator
rpk(j+rpkOffset)=(dwAccumulator\24) and 255
dwAccumulator=dwAccumulator Mod 24
j=j-1
Loop While j>=0
i=i-1 : szProductKey=mid(szPossibleChars,dwAccumulator+1,1)&szProductKey
if (((29-i) Mod 6)=0) and (i-1) then
i=i-1 : szProductKey="-"&szProductKey
End If
Loop While i>=0 'Goto Rep1

GetKey=szProductKey
End Function

Скрипт второй:
Set WshShell = CreateObject("WScript.Shell")
regKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
DigitalProductId = WshShell.RegRead(regKey & "DigitalProductId")
Win8ProductName = "Windows Product Name: " & WshShell.RegRead(regKey & "ProductName") & vbNewLine
Win8ProductID = "Windows Product ID: " & WshShell.RegRead(regKey & "ProductID") & vbNewLine
Win8ProductKey = ConvertToKey(DigitalProductId)
strProductKey ="Windows 8 Key: " & Win8ProductKey
Win8ProductID = Win8ProductName & Win8ProductID & strProductKey
MsgBox(Win8ProductKey)
MsgBox(Win8ProductID)
Function ConvertToKey(regKey)
Const KeyOffset = 52
isWin8 = (regKey(66) \ 6) And 1
regKey(66) = (regKey(66) And &HF7) Or ((isWin8 And 2) * 4)
j = 24
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
y = 14
Do
Cur = Cur * 256
Cur = regKey(y + KeyOffset) + Cur
regKey(y + KeyOffset) = (Cur \ 24)
Cur = Cur Mod 24
y = y -1
Loop While y >= 0
j = j -1
winKeyOutput = Mid(Chars, Cur + 1, 1) & winKeyOutput
Last = Cur
Loop While j >= 0
If (isWin8 = 1) Then
keypart1 = Mid(winKeyOutput, 2, Last)
insert = "N"
winKeyOutput = Replace(winKeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
If Last = 0 Then winKeyOutput = insert & winKeyOutput
End If
a = Mid(winKeyOutput, 1, 5)
b = Mid(winKeyOutput, 6, 5)
c = Mid(winKeyOutput, 11, 5)
d = Mid(winKeyOutput, 16, 5)
e = Mid(winKeyOutput, 21, 5)
ConvertToKey = a & "-" & b & "-" & c & "-" & d & "-" & e
End Function

Текст скрипта необходимо вставить в пустой файл и присвоить этому файлу расширение .vbs.
Запустив скрипт двойным кликом мыши, Вы увидите диалоговое окно с серийным номером Windows.

Способ четвёртый. Неработоспособная ОС. Используем сторонний софт.

Этот способ является вариацией второго способа. Для его использования нам необходим доступ к реестру неработоспособной ОС а так же программа DigitalProductID_to_WinXP_Serial.exe

1) Для доступа к реестру понадобится liveCD WindowsXP или можно подключить жёсткий диск с неработающей ОС к другому компьютеру.
2) Запускаем редактор реестра (Пуск –> Выполнить –> regedit->OK).
3) Устанавливаем курсор мыши на раздел слева HKEY_USERS.
4) В меню файл выбираем «Загрузить куст».
5) В открывшемся окне находим наш жёсткий диск с нерабочей ос (пусть это будет Z: для примера)
6) Ищем файл Z:\Windows\system32\config\software и выбираем его.
7) Далее нам предлагается ввести имя загружаемого куста, вводим что нам больше нравится, например 12345.
8) Жмём ОК. Слева в разделе HKEY_USERS появится каталог 12345 с содержимым файла
Z:\Windows\system32\config\software. (Подробнее о файлах реестра читайте в статье Файлы реестра Windows XP. Восстановление из резервной копии на нашем сайте.)
9) Переходим по адресу HKEY_USERS\12345\Microsoft\Windows NT\CurrentVersion\, открываем значение параметра DigitalProductID.
10) Запускаем программу DigitalProductID_to_WinXP_Serial.exe (см. Рисунок 5.)
и вручную вбиваем символы 53-67 (см. Рисунок 1.) из DigitalProductID. Нажимаем кнопку "Bin>Txt" и получаем серийный номер.

Эта статья опубликована под Creative Commons Attribution ShareAlike лицензией.

Добавить комментарий