Могу ли я восстановить ключ продукта Windows от Ubuntu? [dубликат]

top имеет пакетный режим (-b), который генерирует выходной сигнал без кодов управления экраном. Добавив некоторые другие ключи и параметры, вы сможете сосредоточиться на необходимой вам статистике и перенаправить ее в файл или другую программу для обработки.

24
задан 6 September 2017 в 06:54

6 ответов

Сначала восстановите свой Ubuntu, перейдя в режим восстановления и запустив

sudo apt install --reinstall ubuntu-desktop

Этот ответ написан не мной, а режимом восстановления on Суперпользователь, пожалуйста, проголосуйте там, если вы проголосуете за это спасибо

Для 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 [!d6 ]

Комментарий ниже говорит:

В Linux есть отличный инструмент, называемый chntpw. Вы можете легко получить его на Debian / Ubuntu с помощью:

30
ответ дан 22 May 2018 в 18:45
  • 1
    Довольно круто! Просто протестировал это на моей домашней системе, и комментарий ниже был правильным для моей домашней системы. В этом работает Windows 10. Мне это нравится! +1 – Terrance 6 September 2017 в 00:01
  • 2
    Важно проверить регистр имен файлов и файлов. На моем компьютере с Windows 10 файла не было; Мне пришлось использовать прописные буквы SOFTWARE для имени файла. – Paddy Landau 6 September 2017 в 11:25
  • 3
    Вау. Это блестящая особенность chntpw. – dhaupin 5 November 2017 в 04:39
  • 4
    К сожалению, я получаю File is too small; got 0 bytes while expecting 72 or more на диске Windows 10. – amenthes 5 May 2018 в 20:03

Сначала восстановите свой Ubuntu, перейдя в режим восстановления и запустив

sudo apt install --reinstall ubuntu-desktop

Этот ответ написан не мной, а режимом восстановления on Суперпользователь, пожалуйста, проголосуйте там, если вы проголосуете за это спасибо

Для 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

Комментарий ниже говорит:

В Linux есть отличный инструмент, называемый chntpw. Вы можете легко получить его на Debian / Ubuntu с помощью:

31
ответ дан 18 July 2018 в 07:21

Сначала восстановите свой Ubuntu, перейдя в режим восстановления и запустив

sudo apt install --reinstall ubuntu-desktop

Этот ответ написан не мной, а режимом восстановления on Суперпользователь, пожалуйста, проголосуйте там, если вы проголосуете за это спасибо

Для 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

Комментарий ниже говорит:

В Linux есть отличный инструмент, называемый chntpw. Вы можете легко получить его на Debian / Ubuntu с помощью:

31
ответ дан 24 July 2018 в 18:47

Итак, для кого-то интересно, как это работает.

По существу вам нужно будет захватить содержимое раздела реестра

HKLM\Software\Microsoft\Windows NT\CurrentVersion\DigitalProductId

Это так называемый REG_BINARY , Это просто набор байтов. Вы можете сбросить их через chntpw или скопировать их вручную.

Посмотрим, что мы делаем с этими байтами, чтобы получить наш ключ продукта с помощью некоторого псевдокода.

Как только у вас есть объекты в массиве, вам нужно извлечь подмножество байтов, которые кодируют идентификатор продукта. В частности: диапазон между 52 и (52 + 14). Это дает вам 15 байт.

EncodedId = DigitalProductId.Range(52, 52+14)

Это все еще куча байтов, которые совсем не напоминают ключ продукта. Итак, давайте расшифруем его.

Для этого вам понадобится коллекция всех символов, из которых может быть сделан ключ продукта:

Characters = "BCDFGHJKMPQRTVWXY2346789"

Да, это не весь алфавит. Как оказалось, ключ продукта Windows не использует все буквенно-цифровые символы.

Теперь давайте сделаем декодирование. Нам понадобится:

Переменная, которая удерживает ключ продукта. Цикл от 0 до 24. Для каждого символа нашего ключа продукта Внутренний цикл от 0 до 14 (В обратном порядке) Для каждого байта в нашем закодированном id Несколько бит fiddeling и арифметический для процесса декодирования
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.Insert($where, $what) Вставить $what в $where Цикл с 0 по 24. Для каждого символа нашего ключа продукта $a XOR $b Вычислить побитовое исключение или по номерам $a и $b [d14 ] Внутренний цикл от 0 до 14 (в обратном порядке) Для каждого байта в нашем закодированном id $array[$i] Возьмите только элемент в позиции $i из массива . Некоторое битное искажение и арифметическое для процесса декодирования Строки - это только массивы символов.

Вы можете увидеть 2 фактических реализации в C # и PowerShell в this

5
ответ дан 22 May 2018 в 18:45

Итак, для кого-то интересно, как это работает.

По существу вам нужно будет захватить содержимое раздела реестра

HKLM\Software\Microsoft\Windows NT\CurrentVersion\DigitalProductId

Это так называемый REG_BINARY , Это просто набор байтов. Вы можете сбросить их через chntpw или скопировать их вручную.

Посмотрим, что мы делаем с этими байтами, чтобы получить наш ключ продукта с помощью некоторого псевдокода.

Как только у вас есть объекты в массиве, вам нужно извлечь подмножество байтов, которые кодируют идентификатор продукта. В частности: диапазон между 52 и (52 + 14). Это дает вам 15 байт.

EncodedId = DigitalProductId.Range(52, 52+14)

Это все еще куча байтов, которые совсем не напоминают ключ продукта. Итак, давайте расшифруем его.

Для этого вам понадобится коллекция всех символов, из которых может быть сделан ключ продукта:

Characters = "BCDFGHJKMPQRTVWXY2346789"

Да, это не весь алфавит. Как оказалось, ключ продукта Windows не использует все буквенно-цифровые символы.

Теперь давайте сделаем декодирование. Нам понадобится:

Переменная, которая удерживает ключ продукта. Цикл от 0 до 24. Для каждого символа нашего ключа продукта Внутренний цикл от 0 до 14 (В обратном порядке) Для каждого байта в нашем закодированном id Несколько бит fiddeling и арифметический для процесса декодирования 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.Insert($where, $what) Вставить $what в $where Цикл с 0 по 24. Для каждого символа нашего ключа продукта $a XOR $b Вычислить побитовое исключение или по номерам $a и $b Внутренний цикл от 0 до 14 (в обратном порядке) Для каждого байта в нашем закодированном id $array[$i] Возьмите только элемент в позиции $i из массива . Некоторое битное искажение и арифметическое для процесса декодирования Строки - это только массивы символов.

Вы можете увидеть 2 фактических реализации в C # и PowerShell в this

5
ответ дан 18 July 2018 в 07:21

Итак, для кого-то интересно, как это работает.

По существу вам нужно будет захватить содержимое раздела реестра

HKLM\Software\Microsoft\Windows NT\CurrentVersion\DigitalProductId

Это так называемый REG_BINARY , Это просто набор байтов. Вы можете сбросить их через chntpw или скопировать их вручную.

Посмотрим, что мы делаем с этими байтами, чтобы получить наш ключ продукта с помощью некоторого псевдокода.

Как только у вас есть объекты в массиве, вам нужно извлечь подмножество байтов, которые кодируют идентификатор продукта. В частности: диапазон между 52 и (52 + 14). Это дает вам 15 байт.

EncodedId = DigitalProductId.Range(52, 52+14)

Это все еще куча байтов, которые совсем не напоминают ключ продукта. Итак, давайте расшифруем его.

Для этого вам понадобится коллекция всех символов, из которых может быть сделан ключ продукта:

Characters = "BCDFGHJKMPQRTVWXY2346789"

Да, это не весь алфавит. Как оказалось, ключ продукта Windows не использует все буквенно-цифровые символы.

Теперь давайте сделаем декодирование. Нам понадобится:

Переменная, которая удерживает ключ продукта. Цикл от 0 до 24. Для каждого символа нашего ключа продукта Внутренний цикл от 0 до 14 (В обратном порядке) Для каждого байта в нашем закодированном id Несколько бит fiddeling и арифметический для процесса декодирования 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.Insert($where, $what) Вставить $what в $where Цикл с 0 по 24. Для каждого символа нашего ключа продукта $a XOR $b Вычислить побитовое исключение или по номерам $a и $b Внутренний цикл от 0 до 14 (в обратном порядке) Для каждого байта в нашем закодированном id $array[$i] Возьмите только элемент в позиции $i из массива . Некоторое битное искажение и арифметическое для процесса декодирования Строки - это только массивы символов.

Вы можете увидеть 2 фактических реализации в C # и PowerShell в this

5
ответ дан 24 July 2018 в 18:47

Другие вопросы по тегам:

Похожие вопросы: