Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Открыта карта ВТБ для материальной поддержки сайта: 4893470220568296.

Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
" title="Написать письмо">Написать письмо

Статистика

Пользователи : 1
Статьи : 1238
Просмотры материалов : 4493992
 
Уникальный ID материнской платы или компьютера (04.07.2014). Печать E-mail
2014 - Июль
04.07.2014 15:52
Save & Share

Сколько копий было сломано, форумов перелажено, кода понаписано, информации перелопачено, людей зае... задействовано. А казалось бы, такая простая проблема: получить уникальный ID материнской платы, чтобы в случае ее замены сказать пользователю: "да иди ты...".

Исходные данные: добавить в программу посыл пользователя в случае, если он ее перенес на другой компьютер. При этом он должен сохранить право переносить ее на другие жесткие диски (в случае их отказа, подыхают чаще всего). При этом нельзя использовать инсталляторы с уникальными серийными номерами как средства интеграции программы внутрь одной конкретной ОС.

Используемое ПО:
- VB6 (Borland C++ Builder опять оказался сложным и извращенным в плане реализации: 150 строк и куча "include" - против 10 строчек в VB6);
- инструментарий Windows Management Instrumentation (WMI). Очень сильная штука от Microsoft: работает не только со всем железом в ПК, но и с прочими настройками, вроде серийного кода активации. WMI работает и в Windows 2000, несмотря на заявление на сайте производителя. WMI берет информацию именно из железа, обновляя параллельно информацию по нему в реестре (а не наоборот, как может казаться);
- WMI Code Creator: очень сильная программа, позволяющая работать с очень сильным WMI: содержит весь список классов и их свойств, а также генерирует уже готовый код для VB6. Скачивается с сайта Microsoft. Без его использования задача анализируется намного сложнее. Некоторые свойства представлены в виде массива объектов.

Материнская плата: нужно забыть об уникальном ID материнской платы (свойства SerialNumber, SKU класса Win32_BaseBoard). Беда России: очень много "левака", в том числе и материнских плат. Такие левые материнские платы (и прочее железо) не имеют ни уникального идентификатора, ни времени изготовления - становится не к чему привязаться. В итоге либо заполняются исправно (в легальном железе), либо пустотой или "To be filled by O.E.M" (что означает "будет заполнено производителем". Ага, конечно). Максимум, что можно сделать - стопроцентную защиту от плат другой модели (свойство Product класса Win32_BaseBoard) и/или другой версии BIOS (свойства ReleaseDate, SMBIOSBIOSVersion, SMBIOSMajorVersion, SMBIOSMinorVersion класса Win32_BIOS). Не рекомендуется свойство Manufacturer класса Win32_BaseBoard: может оказаться пустым.

Рассматривая USB-ключи (типа eToken) и им подобные - пришел к выводу, что стопроцентной защиты ими создать не удастся (присутствуют программы, которые вообще убиваются через диспетчер задач и становятся деактивированными). Плюс в процесс взлома защиты вовлекутся как продвинутые пользователи с сисадминами, так и великая программа Acronis, копирующая информацию с любого накопителя байт в байт. Из этого следует: привязка должна быть именно к внутреннему железу, а не к виртуальным вещам (вроде пароля на учетную запись). Привязка к серийному номеру Windows также несерьезна (хотя и доступна в свойстве SerialNumber класса Win32_OperatingSystem). Можно между учетными записями привязать программу к одной из них (свойство SID класса Win32_UserAccount или свойство Setting класса Win32_AccountSID).

Самая простая привязка - к MAC-адресам сетевых карт (свойство MACAddress класса Win32_NetworkAdapter). И все было бы прекрасно, если бы не тот факт, что много лет назад его научились менять и подделывать. Защита уникальная - но слабенько.

Пытался привязаться к процессору - выяснилось, что со времен Pentium-4 уникальный идентификатор процессора не уникален. Защита не уникальная и слабая (свойство ProcessorId класса Win32_Processor). Однако можно привязаться к наименованию процессора (свойства Caption, Name класса Win32_Processor), а также (для примера) поменять в BIOS параметр CPU Host Frequency на 1 (чтобы обеспечить неравенство при новом процессоре свойства ExtClock класса Win32_Processor).

Жесткий диск и CD-ROM имеют название модели и код экземпляра (свойства Name, DeviceID, PNPDeviceID классов Win32_DiskDrive, Win32_CDROMDrive). В левой части кода экземпляра этих устройств присутствуют параметры VEN, DEV, SubSys и Rev, необходимые для получения в интернете названия устройства и успешного скачивания драйверов. В правой же части присутствует ещё ряд неизвестных мне цифр. Есть вероятность, что эти числа уникальны для каждого устройства, нужно проверять.

Кстати, предпринял попытку поменять SerialNumber (огромный риск!) при помощи сторонней утилиты DMI Tools (не универсальная). Очень опасная работа: ПК после этого может просто не включиться. В моем случае утилита просто не сработала, и я свободно вздохнул.

Комплексная защита средней силы:
- модель материнской платы;
- основные параметры BIOS (дата релиза, 2 типа версий);
- измененные дополнительные параметры BIOS (Onboard Parallel Mode, Onboard Serial Mode, CPU Host Frequency и т.д.);
- пароль на BIOS (в связи с этим, правильно настроить BIOS: первоначальную загрузку с CD-ROM/USB и т.д.). В совокупности с пунктом 3 это дает преимущество: в случае сброса BIOS перемычкой на плате - параметры сбросятся в Default, и защита сработает;
- MAC-адреса сетевых карт (опционально);
- серийный номер Windows и SID учетной записи (опционально, для кучи).

Усиление КЗСС, увеличивающее вероятность ложного срабатывания защиты:
- модель и код экземпляра HDD и CD-ROM. Ложное срабатывание произойдет в случае отказа HDD и замене его пользователем на новый (хотя кому ложное, а кому истинное).

Обновлено ( 05.07.2014 15:00 )
 
 

Последние новости


©2008-2019. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).