На этот вопрос уже есть ответ здесь:
Я сейчас борюсь с использованием ubuntu и нужна помощь.
Итак, сейчас я запускаю Ubuntu с USB-накопителя после того, как Windows 7 каким-то образом ушла.
Как я могу получить ключ продукта Windows, который находится где-то на жестком диске моего ноутбука, из Ubuntu?
Сначала восстановите свою Ubuntu с движением к режим восстановления и выполнение
sudo apt install --reinstall ubuntu-desktop
<час> , Этот ответ не записан мной, но Thomas на Суперпользователь , голосуйте там при голосовании здесь спасибо
существует большой инструмент, доступный для Linux, названного chntpw. Можно получить его легко на Debian/Ubuntu через:
sudo apt install chntpw
Для изучения соответствующего файла реестра монтируют диск Windows и открывают его как так:
chntpw -e /path/to/windisk/Windows/System32/config/software
Теперь для получения декодируемого DigitalProductId вводят эту команду:
dpi \Microsoft\Windows NT\CurrentVersion\DigitalProductId
в комментарии А снизу говорится
, путь к соответствующему файлу реестра является/path/to/windisk/Windows/System32/config/RegBack/SOFTWARE
Таким образом для любого задающегося вопросом, как это на самом деле работает.
По существу необходимо будет захватить содержание ключа реестра
HKLM\Software\Microsoft\Windows NT\CurrentVersion\DigitalProductId
Это - так называемое REG_BINARY
. Значение это - просто набор байтов. Вы могли вывести их через chntpw
или скопируйте их вручную.
Давайте посмотрим то, что мы имеем отношение к тем байтам для получения нашего ключа продукта с помощью некоторого псевдо кода.
После того как у Вас есть те, которые в Массиве, необходимо извлечь подмножество байтов, которые кодируют идентификатор продукта. В особенности: диапазон между 52 и (52 + 14). Это дает Вам 15 байтов.
EncodedId = DigitalProductId.Range(52, 52+14)
Это - все еще набор байтов, которые не делают вообще напоминают ключ продукта. Таким образом давайте декодировать его.
Для этого Вам нужен набор всех символов, из которых может быть сделан ключ продукта:
Characters = "BCDFGHJKMPQRTVWXY2346789"
Да это не целый алфавит. Как оказалось, ключ продукта Windows не использует все алфавитно-цифровые символы.
Теперь давайте сделаем декодирование. Нам будет нужно:
ProductKey = ""
FOR i = 0 TO 24
c = 0
FOR j = 14 TO 0 STEP -1
# Shift the current contents of c to the left by 1 byte
# and xor it with the next byte of our id
c = (c * 256) XOR EncodedId[j]
# Put the result of the divison back into the array
EncodedId[j] = FLOOR(c / 24)
# Calculate remainder of c
c = c MOD 24
LOOP
# Take character at position c and prepend it to the ProductKey
ProductKey = Characters[c] + ProductKey
LOOP
Наконец мы вставляем "-" символ в строку в соответствующих местах.
FOR i = 4 TO 1 STEP -1
ProductKey = ProductKey.Insert(i * 5, "-")
LOOP
И мы сделаны!
... Почти:
PRINT(ProductKey)
Теперь!
Поддержка нашего псевдо кода
$array.Range($from, $to)
Получите содержание $array
от $from
кому: $to
$array.Insert($where, $what)
Вставить $what
в $where
FOR $var = $start TO $stop [STEP $step]
циклично выполните переменную $var
от $start
кому: $stop
применение $step
на каждом повторении$a XOR $b
Вычислите поразрядно эксклюзивный или на числах $a
и $b
$a MOD $b
Вычислите остаток от подразделения $a
и $b
$array[$i]
Возьмите только элемент в положении $i
от массива#bla bla
Комментарий и будет проигнорированВы видите 3 фактической реализации в C#, PowerShell и Python в Суперпользователе