Впервые с механизмом активации от Microsoft мы столкнулись ещё в Windows 2000 Server, где требовалось активировать Terminal Server, без чего он работал только 90 дней. Придуман механизм активации с одной единственной целью - чтобы предотвратить нелегальное копирование программных продуктов. Принцип, который лежит в основе механизма активации, исключительно прост - на стороне пользователя генерируется специальный ключ, который отсылается в Microsoft. Там на основе этого ключа генерируется другой, который отсылается обратно. Пользователь вводит этот ключ у себя, и если они оба (тот что отослал, и тот что пришёл обратно) соответствуют друг другу, то активация считается завершённой. Если нет - то через некоторое время всё, кроме апплета отвечающего за активацию, перестаёт работать. Эксперимент с активацией Terminal Server в Windows 2000 прошёл успешно, поэтому сегодня она всё шире и шире внедряется в новые продукты Microsoft. Например, активация является обязательной для OC от Microsoft начиная с Windows XP. Об этом свидетельствует и то название, которое получил этот механизм применительно к ОС - Microsoft Windows Product Activation (WPA).
Однако та информация, которая доступна от Microsoft об WPA, оставляет больше вопросов, чем даёт ответов. Самые важные из них:
1. Что именно за информацию о компьютере собирает система?
2. Как именно реагирует WPA на изменения в аппаратной составляющей компьютера?
Чтобы ответить на них, придётся рассмотреть работу Windows Product Activation более детально. Информация основывается на данных с www.licenturion.com/xp/. Она никогда не подтверждалась Microsoft, тем не менее я считаю, что её достоверность достаточно высока.
Всё, что отсылается в Microsoft в процессе регистрации, это 50-значный номер (назовём его Installation ID). Таким образом, зная как формируется этот номер, мы будем знать, что именно за информация собирается о компьютере.
Номер разбит на 8 групп по 6 цифр, и одна группа из 2. В группах из 6 цифр, последняя цифра служит для контроля правильности группы. Например, мы имеем группу:
1 1 4 5 7 3
Прежде всего складываются первые пять чисел: 1+1+4+5+7=18
Потом к полученной цифре добавляются чётные по порядковому номеру (2 и 4), 18+1+5=24
Полученное число делится на 7, и берётся целое 24/7 - целая часть 3.
Вычитаем одно из другого 24-(7*3)=3. Это и есть последняя цифра в группе.
В итоге, у нас остаётся всего 41 десятичная цифра. Что соответствует 136 битному multi-precision integer. Таким образом, Installation ID может быть представлен в виде набора из 17 байт:
0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0x94 0xAA 0x46 0xD6 0x0F 0xBD 0x2C 0xC8 0x00
Примечание: некоторые цифры из реального номера заменены на XX.
Содержимое номера кроме последнего байта зашифровано, поэтому если какой-либо злоумышленник и перехватит этот номер, ничего полезного он не узнает. Алгоритм, используемый Microsoft для шифрования номера, основан на патентованном четырёх-проходном шифре Фейстеля (Feistel cipher), и ничего другого про него не известно. В результате расшифровки получается четыре двойных слова (double word), каждое из которых содержит по 4 байта, и ещё один байт. Первые два слова (байты от 0 до 7) мы назовём H1 и H2. Они привязаны к аппаратному обеспечению компьютера (H - hardware). Следующие два слова (байты от 8 до 15) назовём их P1 и P2, привязаны к серийному номеру Windows. Последний байт, назовём его P3, также привязан к серийному номеру (P - program).
25-значный номер, который вбивается при установке XP, после установки участвует в формировании группы из 20 десятичных цифр под названием Product ID, найти которую можно либо на закладке General окна System Properties, либо в реестре по адресу:
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurentVersion, ключ ProductID
Product ID разбит на группы цифр:
AAAAA-BBB-CCCCCCC-DDDDD,
Где первые 5 цифр указывают на версию ОС (всегда одинаковые для одного и того же типа), а остальные формируются из серийного номера системы, вбиваемого при инсталляции (именно из этих цифр вычисляют серийный номер системы различные утилитки, например эта: /files/pub/tweak/ViewKeyXP.zip). Как уже говорилось, эти 20 цифр формируют P1, P2 и P3 части Installation ID. Делается это элементарно.
AAAAA - составляют 17 бит, которые становятся битами от 0 до 16 для P1.
BBB - составляют 10 бит, которые становятся битами от 17 до 26 для P1.
CCCCCCC - составляют 28 бит, которые становятся битами от 27 до 31 для P1 и битами от 0 до 22 для P2.
DDDDD - составляют 17 бит, которые становятся битами от 23 до 31 для P2 и битами от 0 до 7 для P3.
Таким образом видно, что Installation ID содержит в себе полную информацию о типе операционной системы, и целиком серийный ключ, который вбивается при инсталляции (как уже говорилось, его можно вычислить из Product ID). В принципе это ожидаемо (ведь должен же Microsoft точно идентифицировать проданную копию при активации), и никакой критичной информации для пользователя не составляет. Гораздо больший интерес представляют первые два слова, H1 и H2, составляемые на основе данных об аппаратном обеспечении компьютера. Рассмотрим и их.
Как читателю, безусловно, известно, каждое двойное слово состоит из 32 бит. Для H1 и H2 они распределяются так:
H1.
Биты 1-9. Серийный номер и название системного раздела диска.
Биты 10-19. MAC адрес сетевой карты.
Биты 20-26. CD-ROM hardware ID.
Биты 27-31. Hardware ID видеокарты.
H2.
Биты 0-2. Не используются, всегда 001.
Биты 3-8. Серийный номер центрального процессора.
Биты 9-15. Hardware ID жёсткого диска.
Биты 16-20. SCSI host adapter hardware ID.
Биты 21-24. Модель центрального процессора.
Биты 28-30. Размер RAM.
Бит 31. Указывает, становится ли компьютер в док-станцию. 1 - становится, 0 - не становится.
Если какое-либо из устройств отсутствует (например сетевая карта или SCSI контроллёр), то поле предназначенное для него заполняется нулями.
Невооружённым взглядом видно, что многие из значений, собираемых системой для генерации Installation ID, никакими силами нельзя "втиснуть" в те биты, которые для них предназначены. Именно поэтому Microsoft не сможет вычислить, что именно за железо стоит у пользователя только по одному Installation ID, так что за неприкосновенность критичной или личной информации при активации действительно можно быть спокойным.
Как же это всё работает?
Вся информация об активации в зашифрованном виде хранится в маленьком файлике, под названием wpa.dbl, который находится в WindowsSystem32. В момент активации в этот файл записывается информация, собранная для генерации Installation ID. Кроме этой информации, которая записывается один раз, и никогда больше не меняется, каждый раз при загрузке системы обновляется копия этих данных, собираемая непосредственно из реестра. После этого полученные значения сравниваются, и если не совпадают более трёх позиций, то система требует повторной активации. Из этого следует, что широко распространенное мнение что после активации Windows можно апгрейдится только три раза - неверно. Апгредиться можно сколько угодно, только апгрейду должны подвергаться не более трёх железок. То есть, если вы 10 раз будете менять видеокарту, и 5 раз центральный процессор, но не будете трогать ничего другого, то проблем с активацией возникнуть не должно. Если в дополнение к этому вы нарастите объём оперативной памяти, то тоже всё пройдёт гладко. Но стоит после этого поменять HDD, как система попросит вас активировать её заново.
Немного особняком в этом ряду стоят пользователи ноутбуков. Для механизма активации они отличаются 31 битом в H2, который свидетельствует о том, что компьютер может устанавливаться в док станцию. Если он равен 1, то на идентичность железа проверяется только 7 значений из 10. Исключаются видеокарта, IDE контролёр и SCSI host adapter.
Таким образом, wpa.dbl подходит только для одного единственного компьютера (ведь на другом, даже полностью повторяющем его по конфигурации, hardware ID различных устройств будут другими). Но для одного компьютера подходит этот файл всегда, вне зависимости от того, сколько раз и какое программное обеспечение ставилось на эту машину. Этот файлик никогда не перезаписывается (за исключением, конечно же, информации которая обновляется при каждой загрузке), кроме как при полной переустановке системы. В этом случае, если вам неохота вновь проходить процедуру активации, сохраните wpa.dbl, и просто запишите его обратно, когда система будет переустановлена. Это вновь активирует вашу систему (но только вашу, для соседа ВАШ файл будет абсолютно бесполезен).
С выходом Service Pack 1 для WindowsXP технология активации получила дальнейшее развитие. Не секрет, что на пиратском рынке программного обеспечения появились копии Windows XP с серийными номерами от корпоративных релизов, не требующие активации. Для борьбы с этим в SP1 есть список серийных номеров про которые доподлинно известно, что они используются пиратами. Что именно за номера вошли в этот список точно не известно. Да это и не важно. Ведь, без сомнения, этот список будет расширяться. Обнаружив инсталляцию с серийным номером из "чёрного списка", SP1 просто отказывается устанавливаться, выводя следующее сообщение:
Service Pack 1 Setup Error-
The product key used to install Windows is invalid. Please contact your system administrator or retailer immediately to obtain a valid product key. You may also contact Microsoft Corporation's Anti-Piracy Team by emailing piracy@microsoft.com if you think you have purchased pirated Microsoft software. Please be assured that any personal information you send to the Microsoft Anti-Piracy team will be kept in strict confidence.
Кроме этого, подобная практика, скорее всего, будет использоваться и для механизма Windows Update. Когда Windows Update обнаружит пиратскую инсталляцию, он просто откажется обслуживать эту машину. Никаких других мер воздействия по отношению к нечестным пользователям (или пользователям обманутым нечестными продавцами), по уверениям Microsoft применяться не будет. Они просто будут лишены технической поддержки во всех видах.
Вместе с тем, несмотря на такое ужесточение мер, у пользователей пиратских версий всё ещё остаётся теоретическая возможность обойти защиту WPA. Для этого достаточно поменять серийный номер системы на какой-либо из не находящихся в "чёрном списке".
Для этого в реестре по адресу [HKey_Local_MachineSoftwareMicrosoftWindowsNTCurrentVersionWPAEvents]
Требуется поменять хотя бы одну цифру (любую) в ключе oobetimer, и это "испортит" активацию. Работать это будет только до первой перезагрузки, после чего система считает текущий статус активации из wpa.dbl, и всё будет восстановлено в первоначальном виде.
После этого запускается апплет активации (%systemroot%system32oobemsoobe.exe /a). Выбрав активировать по телефону, появляется возможность сменить установленный ключ на любой другой, кнопкой Change Product Key. Остаётся только перезагрузиться.
Но для того что бы поменять номер, надо его знать. Самый надёжный способ - это купить легальную версию Windows XP. Таким образом, эта методика больше подходит для пользователей которые хотят легализовать свою версию ОС купив официальную версию, но не хотят переставлять всё заново.
Для полноты информации стоит упомянуть об различных генераторах ключей для Windows XP, которые можно встретить на просторах сети и которые, на первый взгляд, способны решить проблемы нечестных пользователей ворованных копий Windows XP. Но это только на первый взгляд. Подавляющее большинство этих генераторов на самом деле ничего не генерят, а просто берут один из номеров, список которых хранится внутри программы. Стоит ли и говорить, что даже если удастся что-либо сделать с таким номером, то рано или поздно он попадёт в "чёрный список", и все проблемы начнутся сначала. Реже (хоть и возможно) можно встретить генераторы, которые действительно генерируют ключи. Но даже из этих программ только единицы способны создавать ключи, которые не хуже того что делает Microsoft, и могут использоваться для инсталляции и активации ОС. Однако, даже такой "качественный" продукт пиратской мысли не способен решить всех проблем. Дело в том, что для разных версий Windows XP ключи генерируются разные, и если вы найдёте генератор который делает абсолютно правильные ключи для, например, Windows XP Home, английской версии, то он ничем не поможет пользователю версии Windows XP Home на другом языке.
Примечание. Автор НЕ ОТВЕЧАЕТ ни на какие вопросы связанные с нелегальным использованием Microsoft Windows, как то: какой KeyGen самый лучший, где взять работающий ключ, и им подобные.
Дополнительные материалы:
Win XP FAQWin 2000 FAQ
W2k/WinXP Encrypting
Организация IP брандмауэра встроенными средствами Windows 2000 и XP
Windows XP - ломать или покупать?
Краткий обзор клиентских версий Windows XP