Russian Qt Forum

Qt => Вопросы новичков => Тема начата: rudireg от Апрель 30, 2013, 22:33



Название: Как уникально идентифицировать компьютеры по железу
Отправлено: rudireg от Апрель 30, 2013, 22:33
Привет уважаемые.
Хочу написать защиту для своей программы.
Для этого мне нужно как-то идентифицировать каждый компьютер уникальным идентификатором,
для дальнейшей его проверки на моем сервере на валидность, если сервер ответил TRUE  моя прога запуститься.
Уникальный идентификатор компьютера нужно взять из параметров какого нить железа, например видео-карты
Как можно получить подобные данные методом QT ?
Может нужно рыть в сторону IODevice ?
Нужно это сделать кросс-платформенно.
Ранее програмируя в среде Borland Builder C++ я получал идентификатор так:
Код:
    unsigned long sn = 0;
    AnsiString ID;
    if(!GetVolumeInformation("c:/",NULL,NULL,&sn,NULL,NULL,NULL,NULL))
        ShowMessage("Error");
    else
         ID = IntToHex((int)sn,8);


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Old от Апрель 30, 2013, 22:37
ID нужно взять из параметров какого нить железа, например видео-карты
Т.е. пользователю видео-карту поменять будет уже нельзя? Или винчестер? Или мать? :)
Для чего привязываться к железу?


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: rudireg от Апрель 30, 2013, 22:39
ID нужно взять из параметров какого нить железа, например видео-карты
Т.е. пользователю видео-карту поменять будет уже нельзя? Или винчестер? Или мать? :)
Для чего привязываться к железу?
Ну я считаю привязку к железу наиболее приемлемой защитой ПО...
Мать или видео карту редко меняют...
Может есть еще варианты?
Поделитесь буду рад.


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Old от Апрель 30, 2013, 22:48
Ну я считаю привязку к железу наиболее приемлемой защитой ПО...
Ну я вам привел доводы. Человек купил у вас программу, вы его машинку запомнили по видео-карте, через неделю этот клиент поменял видео-карту, ваша программа отказалась запускаться у добросовестного клиента (для защит от копирования/использования это самая важная беда).

Может есть еще варианты?
Поделитесь буду рад.
Конечно есть, оглянитесь вокруг. :)
Это логин и пароль (хэш пароля). Ваша программа отправила его на сервер, если все нормально (и оплачено), то возвращаем ок. А еще лучше весь сервис (или его часть) держать на сервере и предоставлять к нему доступ по api (json).


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: rudireg от Апрель 30, 2013, 23:05
=)


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: rudireg от Апрель 30, 2013, 23:19


Но тем не менее вопрос остается открытым, как получить данные железа...

У логина и пароля есть недостаток !!!
Один чел может купить прогу, а ползоваться ею он будет не один а со всеми теми , кому он скажет по секрету свой пароль и логин.
Получается 1 человек купил программу, а пользоваться ею могут еще и все его друзья.
Так дело не пойдет...


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: kuzulis от Апрель 30, 2013, 23:39
+ если я хочу поменять логин и пароль, то что?  :)

Пароли ведь надо периодически менять!

Сделай привязку по нескольким железкам:

* по CPU серийнику
* по MAC адресу
* по биосу
* по еще чему нить

* по UID - у винды наконец (по ключу), она то должна быть
уникальна в не зависимости от того какое железо менялось (по крайней мере лицензионная винда)

Если к тебе пришла инфа о том, что не сходится какой-то один параметр - то все ОК,
значит пользователь проапгрейдил что-то

Если к тебе пришла инфа о том, что вообще ничего не сходится - значит прогу запустили на новом PC.

Как-то так.

ЗЫ: Ох уж эти проприетарщики..


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: tester64 от Май 01, 2013, 00:13

У логина и пароля есть недостаток !!!
Один чел может купить прогу, а ползоваться ею он будет не один а со всеми теми , кому он скажет по секрету свой пароль и логин.
Получается 1 человек купил программу, а пользоваться ею могут еще и все его друзья.

Комбинировать.
Установить запрет на смену аппаратной привязки чаще раза в сутки. Пусть распространители ключей и их паства работают посменно ;)
Для смягчения ситуации можно разрешать двойную или тройную привязку - для ситуаций типа: домашний комп + планшетник для поездок + рабочий комп. Хотя лучше установить небольшую дополнительную плату для второй-третьей привязки, так сказать, "проверка на вшивость". Для большинства этого будет достаточно - одно дело широким жестом презентовать своему приятелю халявный ключ или уступить психологически ("ну тебе что, жалко для своих друзей..."), другое - платить за чьи-то хотелки.
И лучше использовать привязку к системной плате, поскольку их меняют обычно только с полным апгрейдом компьютера. Например к MAC адресу встроенной сетевой карты. Хотя обычно он не зашит аппаратно, но регулярно менять его и перенастраивать систему - это занятие для мазохиста. Кстати, привязка по MAC не такая уж редкость у интернет-провайдеров.


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: __Heaven__ от Май 01, 2013, 06:50
Может поможет...
http://www.prog.org.ru/topic_18762_15.html


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Bepec от Май 01, 2013, 09:44
Я б проклял такого писателя. У меня 3 компа дома + 2 на работе + ещё малина на линуксе :D
Каким фигом я, заплативший за прогу, должен буду мучаться каждый раз включая её? :P

Купил программу - делай что хошь. У меня горел южный мост на компе 3 раза - дефектная партия материнок. Так что ж мне 3 программы покупать? По гарантии то платы меняют :)

И да, заметьте, даже самые крупные корпорации отказались от привязки к железу. Потому что невыгодно, неэффективно и очень неудобно для пользователя.

PS возьмите в пример касперыча. Тупо лицензионник. При подключении к инету он шлёт что-то типо "ключ такой то +1 работающий". Если одновременное количество работающих по данному ключу больше, чем разрешено по лицензии - ключ попадает в категорию черного списка. Никаких особых проблем и заморочек. Тогда куплю я на пять компов и буду счастлив :D


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Alex Custov от Май 01, 2013, 11:19
У логина и пароля есть недостаток !!!
Один чел может купить прогу, а ползоваться ею он будет не один а со всеми теми , кому он скажет по секрету свой пароль и логин.

Это решается элементарной защитой опять же на стороне сервера, который будет разрешать только одну сессию с данным логином, и если кто-то ещё захочет залогиниться, то он обломится.

ответ по железу - никак, только писать свой код для каждой платформы. Некоторые вещи типа QNetworkInterface есть в Qt, но этого мало. Но за проблемы с заменой железа вас проклянут до 12-го колена. Потому что если делать правильно, пользователь должен будет обращаться к вам за новым бесплатным логином, а старый вам нужно будет блокировать.


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Alex Custov от Май 01, 2013, 11:25
И лучше использовать привязку к системной плате, поскольку их меняют обычно только с полным апгрейдом компьютера. Например к MAC адресу встроенной сетевой карты. Хотя обычно он не зашит аппаратно, но регулярно менять его и перенастраивать систему - это занятие для мазохиста.

MAC зашит в ROM контроллера, но поменять его в рантайме через диспетчер устройств (или ifconfig) - раз плюнуть.


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Bepec от Май 01, 2013, 11:29
И аппаратные ключи вас не спасут к сожалению.


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Igors от Май 01, 2013, 12:16


Но тем не менее вопрос остается открытым, как получить данные железа...
...
Так дело не пойдет...
Чтобы воздух не гонять, просто скажу - этот этап пройден еще в начале 90-х. Поверьте, сейчас Вы занимаетесь изобретением ну очень старого велосипеда  :)   


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: rudireg от Май 01, 2013, 14:43
PS возьмите в пример касперыча. Тупо лицензионник. При подключении к инету он шлёт что-то типо "ключ такой то +1 работающий". Если одновременное количество работающих по данному ключу больше, чем разрешено по лицензии - ключ попадает в категорию черного списка. Никаких особых проблем и заморочек. Тогда куплю я на пять компов и буду счастлив :D

А если юзер запустит на 1 компе несколько копий программы... то сервер получит уведомление о том, что ключ используется несколько раз, и он не будет знать что это запустил один и тот же юзер


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Bepec от Май 01, 2013, 15:42
Нет. Ибо сервер умный млиа ) он с 1 апишника принимает 1 ключ. Не более и не менее :D

Если вы не в курсе, то в каспере на сервер передаётся ВСЁ. Начиная от твоих программ и заканчивая последней открытой вкладкой :D И заметьте - лицензия даётся на комп :D 1 комп - 2 компа - 5 компов. Не пользователей, не запущенных копий :D

PS не ищите дырок в защите, которой занимаются более квалифицированные специалисты :D


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Serr500 от Май 02, 2013, 08:49
Нет. Ибо сервер умный млиа ) он с 1 апишника принимает 1 ключ. Не более и не менее :D
Тут тоже есть подводный камень под названием NAT. За одним IP могут скрываться огромные внутренние сети. У меня в городе парочка провайдеров выпускает в интернет почти всех своих клиентов через один белый IP. А для организаций это вообще норма.


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Bepec от Май 02, 2013, 17:43
Я повторюсь.

Quote- читайте моё сообщение выше. не буду загромождать

На сервер передаётся комплексная информация, позволяющая с 99% вероятностью определить тот это компьютер или не тот.

И это единственный вариант действительно работающей лицензии, правда необходим доступ к инету для её использования.


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Serr500 от Май 02, 2013, 18:11
Так я с этим и не спорю. Я имел в виду, что проверка лицензии по паре "ключ+IP" может давать ошибку.


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Странник от Май 02, 2013, 20:43
И это единственный вариант действительно работающей лицензии, правда необходим доступ к инету для её использования.
помимо доступа в интернет у клиента и надежных серверов у разработчика нужна еще и защита соединения, иначе сниффер + локальный сервер лицензий = халява.


Название: Re: Как уникально идентифицировать компьютеры по железу
Отправлено: Bepec от Май 02, 2013, 21:52
тю. Никакой сниффер не должен пробить защищённое соединение + закодированный пакет. Тут уже нужна работа специалистов... И тут возникает всем известная дилемма взлома.

Взлом должен быть выгоднее, чем приобретение лицензии ;)

PS взламывать криптостойкие контейнеры из-за 200 рублей не у всяких людей желание будет. 

PPS не спорю, есть вундеркинды, но тут уже закавыка. Я приводил пример каспера :D А каспер является сам себе троянским конём - имеет более полные привилегии чем любая другая программа и полностью контролит систему :D