Аватар пользователя 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 лицензией.

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