Получение hardware id материнской платы
От: Unhandled_Exception Россия  
Дата: 30.07.24 16:05
Оценка:
Всем привет,

Получал некоторое время hardware id материнской платы используя WMI, хешировал поля Manufacturer, Model, Name, PartNumber, serialnumber, и все вроде бы хорошо, но почему-то у юзеров hardware id стал менятся, хотя материнку они клянутся, что не меняли. Выяснилось, что некоторые поля (после обновления драйверов? — точно не смог понять) могут начать выдаваться в локали юзера.

Проблема еще в том, что serialnumber может быть пустой строкой.

Чувствую, что как-то не так как следует я получаю hardware id материнки.

Кто как делает, расскажите

Спасибо!
Re: Получение hardware id материнской платы
От: falcoware Россия https://falcoware.com/rus/
Дата: 30.07.24 16:20
Оценка: 3 (1)
Здравствуйте, Unhandled_Exception, Вы писали:


U_E>Спасибо!


Есть у CMOS — Checksum — может его брать за основу?
https://falcoware.com/rus/ — Бесплатные Игры!!!
Re: Получение hardware id материнской платы
От: wantus  
Дата: 30.07.24 16:20
Оценка: 9 (1)
Здравствуйте, Unhandled_Exception, Вы писали:

Во многих BIOS есть опция выключения serial number. Это раз.

Два — кроме серийного номера есть еще и SMBIOS UUID.

Три — можно читать всю эту инфу напрямую, без WMI, получать её в голом виде и парсить по спеку. Это делается через GetSystemFirmwareTable('RSMB', ...). На гитхабе скорее всего есть примеры, но с нуля написать не особо сложно.

Четыре — привязываться можно еще и к MachineGUID. По идее стоит привязываться и к тому, и к другому. Если MachineGUID меняется, а SMBIOS data — нет, то имеем переустановку Windows. Если наоборот, то — OS restore на новую машину. Ну и дальше на это накручиваем лицензионную логику как хочется.
Re[2]: Получение hardware id материнской платы
От: m2user  
Дата: 30.07.24 16:57
Оценка: 3 (1)
W>Три — можно читать всю эту инфу напрямую, без WMI, получать её в голом виде и парсить по спеку. Это делается через GetSystemFirmwareTable('RSMB', ...). На гитхабе скорее всего есть примеры, но с нуля написать не особо сложно.

А будет ли разница с WMI?
Re[2]: Получение hardware id материнской платы
От: Unhandled_Exception Россия  
Дата: 31.07.24 13:28
Оценка:
Здравствуйте, falcoware, Вы писали:

F>Есть у CMOS — Checksum — может его брать за основу?


А как его получить?
Re[2]: Получение hardware id материнской платы
От: Unhandled_Exception Россия  
Дата: 31.07.24 13:31
Оценка:
Здравствуйте, wantus, Вы писали:

W>Два — кроме серийного номера есть еще и SMBIOS UUID.


W>Три — можно читать всю эту инфу напрямую, без WMI, получать её в голом виде и парсить по спеку. Это делается через GetSystemFirmwareTable('RSMB', ...). На гитхабе скорее всего есть примеры, но с нуля написать не особо сложно.


Да, я читал об этом, но вот что мне хотелось узнать у коллег, так это какой способ работает стабильно. Ведь я использовал WMI и до поры до времени все было хорошо
Re[3]: Получение hardware id материнской платы
От: wantus  
Дата: 31.07.24 13:56
Оценка: 4 (2)
Здравствуйте, m2user, Вы писали:

W>>Три — можно читать всю эту инфу напрямую, без WMI, получать её в голом виде и парсить по спеку. Это делается через GetSystemFirmwareTable('RSMB', ...). На гитхабе скорее всего есть примеры, но с нуля написать не особо сложно.


M>А будет ли разница с WMI?


Я не знаю, может быть. Но это чистая инфа из железа, без всяких locale. Её по идее можно считать вообще без API, чисто просканировав 64KB начиная с 0x0F0000.
Re[3]: Получение hardware id материнской платы
От: falcoware Россия https://falcoware.com/rus/
Дата: 31.07.24 14:09
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:


U_E>А как его получить?


BIOS ROM checksum error — System halted
The checksum of ROM address F0000H-FFFFFH is bad.
https://falcoware.com/rus/ — Бесплатные Игры!!!
Re[4]: Получение hardware id материнской платы
От: Unhandled_Exception Россия  
Дата: 31.07.24 14:56
Оценка:
Здравствуйте, falcoware, Вы писали:

F>BIOS ROM checksum error — System halted

F>The checksum of ROM address F0000H-FFFFFH is bad.

Это на PHP?
Re: Получение hardware id материнской платы
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.07.24 15:43
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Получал некоторое время hardware id материнской платы используя WMI, хешировал поля Manufacturer, Model, Name, PartNumber, serialnumber


Вся эта возня с добычей уникального идентификатора, привязкой, проверкой и поддержкой, действительно оправдывает себя по сравнению с генерацией уникального серийника?
Re[2]: Получение hardware id материнской платы
От: Unhandled_Exception Россия  
Дата: 31.07.24 16:13
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Вся эта возня с добычей уникального идентификатора, привязкой, проверкой и поддержкой, действительно оправдывает себя по сравнению с генерацией уникального серийника?


Посмотрим.

Но вот один любопытный схожий кейс. Я для другого продукта ввел floating licenses. Написал сервер лицензий, которому дается ключ с числом одновременных пользователей (причем до этого я просто выдавал один ключ на всех работников, эдакий вариант site license, но один клиент настоял, что ему нужен сервер лицензий, и вообще так положено; я в итоге его за два дня написал на C#, и он до сих пор служит, хотя его поломать ничего не стоит). В итоге стали появляться заказы с бОльшим числом пользователей, чем прежде. И это при том, что нету активации этого ключа через интернет, т.е. можно поднять два (три, четыре, ...) сервера лицензий, а какой-то части работников сказать, что надо использовать другой сервер лицензий

Конечно, "после" не значит "вследствие", но я думаю, что направление верно. Единственное, что компании нынче насчет privacy сильно заморочены, и если прежде было относительно просто заполнять опросники SOC2, то после введения активации, вероятно, будет больше вопросов.
Re[3]: Получение hardware id материнской платы
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.07.24 16:20
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Конечно, "после" не значит "вследствие", но я думаю, что направление верно.


Мне думается, что здесь должно работать правило "80/20". Самая кондовая защита должна снижать нелицензированное использование очень сильно, а дальнейшее ее усложнение уже должно давать значительно более пологое снижение. Ну и область перехода крутого снижения в пологое должна как-то зависеть от цены лицензии.
Re[3]: Получение hardware id материнской платы
От: rudzuk  
Дата: 31.07.24 18:47
Оценка: 3 (1) +1
Здравствуйте, Unhandled_Exception, Вы писали:

UE> F>Есть у CMOS — Checksum — может его брать за основу?


UE> А как его получить?


Не нужно ее получать. Поменяет пользователь настройку bios/uefi и все.
avalon/3.0.2
Re: Получение hardware id материнской платы
От: _AND Российская Империя За Русский мир! За Русь святую!
Дата: 01.08.24 03:34
Оценка: 9 (1)
U_E>Получал некоторое время hardware id материнской платы используя WMI, хешировал поля Manufacturer, Model, Name, PartNumber, serialnumber, и все вроде бы хорошо, но почему-то у юзеров hardware id стал менятся, хотя материнку они клянутся, что не меняли. Выяснилось, что некоторые поля (после обновления драйверов? — точно не смог понять) могут начать выдаваться в локали юзера.
U_E>Проблема еще в том, что serialnumber может быть пустой строкой.
U_E>Чувствую, что как-то не так как следует я получаю hardware id материнки.


Устанавливай английскую локаль (MS_409) при подключении к WMI

hres = pLoc->ConnectServer(
    _bstr_t("\\\\") + _bstr_t(hostName) + _bstr_t("\\root\\cimv2"),
    _bstr_t(username), // User name
    _bstr_t(password), // User password
    _bstr_t("MS_409"), // Locale
    NULL, // Security flags
    _bstr_t(L"ntlmdomain:"), // Authority
    0, // Context object
    &pSvc // IWbemServices proxy
);
Re[2]: Получение hardware id материнской платы
От: Unhandled_Exception Россия  
Дата: 01.08.24 16:49
Оценка:
Здравствуйте, _AND, Вы писали:

_AN>Устанавливай английскую локаль (MS_409) при подключении к WMI


Супер, буду пробовать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.