Что нового

Привязка скрипта к одному компьютеру (железу)

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Garrett

Garrett [?]
У вас на ПК лицензионный Windows?! А вы о масштабах думаете! Дай бог, если скажут спасибо!Я полагаю, что когда у вас будет как минимум пользователей 3000, можно будет задуматься о коммерческой составляющей, поверьте.Нет, конечно же, я не против защиты, было бы что защищать!
Правду говорите - идем на посадку ;D А то с такими темпами к нам Билл Гейтс на работу устраиваться придет, а мы будем ворочать носами и интересоваться опытом работы. :laugh:
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Мне представляется это так:

  • Юзеру дается программа и некий серийный номер. Одновременно с этим, этот серийный номер заноситься в базу данных на сервере.
  • При первом запуске или установке, программа требует ввести серийный номер и отсылает его + ID компьютера на сервер. Если в базе на сервере этот серийник отсутствует, то следовательно он левый. Если номер найден, то проверяется ID компьютера. Тут самое интересное. Если на сервере ID отсутствует, это означает, что программа с этим серийником устанавливается в первый раз. В этом случае ID заносится в базу и дается "добро" на установку. В случае, если какой-то ID в базе присутствует, он сравнивается с ID, который передала программа. Если этот ID отличается от того, что в базе, то следовательно программу пытаются установить на другой компьютер, и сервер отказывает в установке. Если оба ID идентичны, то это означает, что юзер повторно устанавливает программу на тот же самый компьютер (переустановил Windows и т.д.). В этом случае так же дается "добро".
  • Информацию о том, что активация была сделана (что бы больше не спрашивать юзера об этом) можно хранить где-нибудь в реестре. Если эта информация пропала из реестра, то будет сделан новый запрос на сервер (если активация делается при первом запуске) или потребуется переустановка программы (если активация происходит на стадии установки).
  • Но изменения в реестре легко проследить. Поэтому, информацию об активации лучше будет хранить в самом файле по предложенному мной в первом посте способу.

Теперь, вроде бы, все логически сходится. Программу с новым серийным номером можно установить на любой компьютер и в последствии переустанавливать на нем сколько угодно раз. После первой установки, программу под таким же серийным номером на другой машине уже не установить, т.к. на сервере присутствует ID компьютера на который была установлена программа. Копирование файлов не даст результата, это не позволит мой способ. Подбор серийника тоже не прокатит, т.к. серийник выдается только при "покупке" программы и сразу же заноситься в базу на сервере с пустым полем под ID компьютера (ждем первой установки).

Вообщем, здесь поможет только "таблетка".

:smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yashied
Отлично написано! :ok:
Но только вот ещё одна проблема Upgrade MB к примеру! ;D
Без объяснений по телефону, что, как, зачем, не обойтись! Проверил на собственном опыте обладателя лицензионной версии Windows XP SP2 ;)
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Я понятия не имею как в этом случае быть. Телефон...

:smile:

Кстати, серийный номер можно генерить так:

Код:
Func _CreateSerialNumber()

	Local $ID = StringTrimLeft(StringTrimRight(StringReplace(_WinAPI_CreateGUID(), '-', ''), 3), 1)

	If $ID Then
		Return StringMid($ID, 1, 5) & '-' & StringMid($ID, 6, 5) & '-' & StringMid($ID, 11, 5) & '-' & StringMid($ID, 16, 5) & '-' & StringMid($ID, 21, 5) & '-' & StringMid($ID, 26, 5)
	Else
		Return ''
	EndIf
EndFunc   ;==>_CreateSerialNumber
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Garrett сказал(а):
Yashied
Отлично написано! :ok:
Но только вот ещё одна проблема Upgrade MB к примеру! ;D
Без объяснений по телефону, что, как, зачем, не обойтись! Проверил на собственном опыте обладателя лицензионной версии Windows XP SP2 ;)
Берем ID материнской платы, жесткого диска, с чего еще ID считать можно? Видеокарта? Т.е. набираем как можно больше ID со всего железа. Они заносятся в базу. В случае если один из них изменяется, но все другие будут соответствовать ранее занесенным в базу, то это сигнал для серверной программы, что был абгрейд оборудования клиента. Новый ID записывается поверх старого и сохраняется. Для большей безопасности, можно сделать ограниченное количество абгрейдов. Манипуляции с оборудованием, в этом случае, ни какого выигрыша клиенту не дадут, поскольку если он даже и сделает возможным использование программы на компьютере "друга", то потеряет возможность использовать ее на собственном ПК. :smile:
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
IMHO, для того, чтобы делать такую защиту, нужно эту программу продавать и иметь средства на поддержание "нормального" стабильного сервера. Естественно, это должен быть не Home Server, собранный на сдачу и на динамическом IP СТРИМ'а через DynDNS. А чтобы продавать, нужно для начала что-нибудь толковое написать. Лично я никогда ничего не покупал (ну, кроме Windows..., лучше промолчу :sick:smile: и надеюсь никогда не буду продавать свои программы, несмотря на то, что большинство из них намного лучше их платных аналогов, которые мне удалось найти в сети. Более того, я почти всегда предоставляю исходники...

А если честно, то иногда смотришь на какую-нибудь утилиту, за которую хотят $40, а она настолько глючная и неудобная :Censored:, что в голове не укладывается, за что здесь вообще платить. Большинство пользователей нашего форума напишут такую же софтину за несколько часов и в 100 раз лучше. Так что, прежде чем просить деньги за свою программу, оцените экономическую эффективность такого решения, иначе (скорее всего) может случиться так, что количество записей на вашем сервере будет в районе 0. Ну не любит у нас народ платить за то, за что можно и не платить.

:smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yashied
Как всегда в десятку! ;D


Добавлено:
Сообщение автоматически объединено:

Однако если задача поставлена, то рано или поздно она будет решена!!! ;D
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Garrett сказал(а):
Однако если задача поставлена, то рано или поздно она будет решена!!! ;D

Да, лучше поздно, чем никогда.

:D


Добавлено:
Сообщение автоматически объединено:

Kalisnik сказал(а):
Берем ID материнской платы, жесткого диска, с чего еще ID считать можно? Видеокарта? Т.е. набираем как можно больше ID со всего железа. Они заносятся в базу. В случае если один из них изменяется, но все другие будут соответствовать ранее занесенным в базу, то это сигнал для серверной программы, что был абгрейд оборудования клиента. Новый ID записывается поверх старого и сохраняется. Для большей безопасности, можно сделать ограниченное количество абгрейдов...

И получается еще одна Windows Vista...

:smile:
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Yashied
Уважаемый Yashied, я не знаю к кому Вы обращались в последнем посте - если ко мне, то на данный момент у меня нет таких целей как реализация своей продукции, по причине отсутствия самой продукции. И по этому для меня совершенно не понятно, почему меня пытаются убедить в полной практической неактуальности данного метода защиты. :smile: Я в эту тему зашел провести время в приятном мне общении (а может даже принести кому-то пользу). Раз уж был сам факт открытия данной темы и поднятие соответствующего вопроса - думаю не грех раскрыть его как можно с больших сторон. :smile: А вдруг кто и заинтересуется данным направлением в защите. :blink:

П/С: Я совершенно не покушаюсь на порядки, правила и иерархический строй данного форума. :-\ По сему, если что не так, передерните за плече и направьте в правильном направлении. :smile:
П.П.С: Уже не в последнем посте )


Добавлено:
Сообщение автоматически объединено:

Yashied
Если не секрет, а в 7-ке как сделано? И что имелось в виду под словами "И получается еще одна Windows Vista..."? :shok:
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Kalisnik, ни к кому конкретно, это просто мои мысли (я же написал IMHO). А то, что Вы высказываетесь по этому вопросу, так это хорошо, для этого и существуют форумы.

Kalisnik сказал(а):
...что имелось в виду под словами "И получается еще одна Windows Vista..."?

Насколько мне известно, в Vist'е реализован похожий принцип, т.е. можно обновить несколько (вроде бы до 3, но могу и ошибаться) компонентов компьютера без потери лицензии.
 

art279

Новичок
Сообщения
20
Репутация
3
Может моя мысль покажется Вам странной, но зачем использовать библиотеку WinAPIEx.au3 для привязки скрипта ко всему железу, ну мне кажется что достаточно привязать к серийнику "харда" он индивидуальный и неповторимый для каждого, да и в качестве проверки использовать функцию DriveGetSerial, если я неправ может объясните в чём.....
 

hikki

Продвинутый
Сообщения
233
Репутация
99
Пару раз переносил установленную систему на новый винт с помощью акронис чтототамещё, остальное железо не менял вообще. Вот и уникальность и индивидуальность. Нужен все таки набор признаков, а не один.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
art279 сказал(а):
Может моя мысль покажется Вам странной, но зачем использовать библиотеку WinAPIEx.au3 для привязки скрипта ко всему железу, ну мне кажется что достаточно привязать к серийнику "харда" он индивидуальный и неповторимый для каждого, да и в качестве проверки использовать функцию DriveGetSerial, если я неправ может объясните в чём.....

DriveGetSerial() не выдает серийный номер HDD, она выдает серийный номер тома, который изменится при следующей разметки (форматировании) диска. А именно серийник HDD, как раз берет _WinAPI_UniqueHardwareID(), опционально.
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Ну допустим с реализацией индентификации железа с ПК разобрались, а как быть со скрытой отправкой данных о железе на сервер. Да и вообще, что должно быть на сервере? как вообще сделать на сервере проверку номеров, выдавание разрешения на запуск приложения или отказ на запуск - без понятия... :wacko:
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Здесь я не помощник. Может быть Garrett?

:whistle:
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
подождем) может он заглянет в тему) может есть пример скрипта какого нибудь, на языке веб программирования, српециально для этого дела.... :-\
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yashied
Bloodrinker
Ребята, регистрация на сервере сложностей не представляет! Вариантов достаточно! :smile:
Как вариант, ваша программа, собрав все данные и сформировав запрос, просто отошлёт их на заранее указанный в программе адрес сервера, по любому удобному для вас протоколу (HTTP, HTTPS) и любым методом GET или POST.
На сервере скрипт примет их и закинет в базу, опять же сформированную как вам угодно, к примеру, UID – вашей машины, ваш Mail (куда вам придёт ключ), Name и т. д.

Меня куда больше гложет вопрос, как сложить три составляющие:
1. Машину (ПК)
2. Пользователя (который честно, купил программу)
3. Лицензионный ключ

Притом что:
А. Пользователя (который честно, купил программу) захочет переустановить программу, или поставить её себе на работе (он ведь честно её купил).
В. Идентифицировать пользователя как честно купившего программу (в случае утери ключа), и выдать ему новый ключ.

Ну, с UID машины я вроде разобрался! Это будет просто как бы одна из составляющих при генерации ключа. Другие составляющие это Name, Mail и т. д. Кстати, по имени, почте и другим составляющим будет идти идентификация пользователя как купившего программу.

В общем, я пока остановился на RSA варианте! Вот теперь думаю как сие чудо воплотить в Autoit`е.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Это уже становится интересно. Хорошо бы сделать какой-нибудь тестовый сервер для проверки этой теории.

Garrett сказал(а):
Ну, с UID машины я вроде разобрался! Это будет просто как бы одна из составляющих при генерации ключа.

Нет, ключ, он сам по себе. Это просто уникальный ID, от балды. Главое, что бы он не повторялся. Я думаю генерация обычного GUID подойдет. Этот ключ генерится в момент покупки программы и теоретически отсылается на e-mail честного пользователя. Имя пользователя в данном случае не обязательно, но пусть будет для порядка. Если я буду устанавливать программу с произвольным ключем, то это не пройдет, т.к. он не был сгенерен и его нет в базе на сервере. Сразу отказ с сообщением "Неверный серийный номер". Т.е. первое, что установщик делает, это проверяет, есть ли на сервере такой ключ.

Поехали дальше. Ключ есть. Сервер требует от установщика ID компьютера (UID), на котором он (установщик) запущен. Установщик высылает на сервер UID (16 байт или строковое представление). Если UID на сервере отсутствует (пустое место, 0 и т.д.), то этот присланный UID заносится в базу на сервер и установщику возвращается "OK". Если UID на сервере присутствует и соответствует присланному UID, то тоже "OK". Если UID на сервере присутствует, но отличается от того, который был передан установщиком, то можно либо отказать в установке ("ABORT"), либо обновить в базе UID и увеличить счетчик установок на новую машину на 1. Когда счетчик дойдет до 3, то все, это будет последняя установка.

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

  • Имя пользователя (не обязательно)
  • E-mail (не обязательно)
  • Серийный номер
  • UID
  • Счетчик установок на новый компьютер с данным серийным номером

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

Что делать, если юзер потерял серийный номер? По имени и e-mail всегда можно восстановить серийник.

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

Как-то так.

:smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Это всё хорошо, но вы забываете что любопытный юзер (и “знаток” AutoIt'а) сможет декомпилировать программу, и устранить все эти проверки. Или я плохо читал тему, или...
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Ну это само собой) Взять любого знатока Assembler'a и он точно также вскроет любую программу и выкинет из нее лишнее :whistle:
 
Верх