Я разрабатываю систему горячих точек с использованием языка PHP,
и теперь я хочу продать эту систему, но как я могу защитить свою систему от перепродажи покупателем, и я хочу убедиться, что лицензионный ключ используется на правильной машине с правильным mac-адресом, что означает, что лицензионный ключ не может использоваться более одного раза.
как я могу это сделать, я понятия не имею
Решение
MAC-адрес не является надежным источником данных для привязки лицензии. В большинстве случаев пользователь может изменить MAC-адрес сетевой карты и таким образом обойти защиту.
Вы можете использовать более сложный алгоритм для привязки лицензии к ПК. Получить тип материнской платы, тип процессора, тип ОЗУ и тип MAC. Вычислить какой-то хэш всех этих данных и сгенерировать лицензию на их основе.
К сожалению, тогда ваш законный пользователь сменит аппаратное обеспечение, ему придется сообщить вам и попросить новый лицензионный код.
Я предполагаю, что ваша система Linux, поэтому вы можете получить всю информацию о системе, вызывая команды оболочки из php.
Как крякнуть практически любую программу (обзор Avenger)
Получить информацию о процессоре:
$cpu = array_filter( array_unique( split(«n», shell_exec(‘cat /proc/cpuinfo | grep «model name|vendor_id»‘) ) ) ); print_r($cpu);
Это выведет что-то вроде:
Чтобы получить информацию о материнской плате, вы можете запустить команду оболочки «sudo dmidecode -t 2» (вы должны предоставить своему php пользователю (www-data) право доступа для запуска sudo dmidecode)
Чтобы получить информацию о памяти, команда должна быть «sudo dmidecode -t 17»
Другие решения
Других решений пока нет …
Источник: web-answers.ru
Как сделать лицензионный ключ для своей программы
Добро пожаловать к нам в гости!
Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Наш дизайнер
Администраторы
Сообщений: 5959
Сейчас всего-лишь хочу показать простой принцип генерации лицензионного ключа и его проверки в приложении. В основе избитый принцип соответствия букв числам (и наоборот), основанный на
получении численного кода символа из таблицы символов ASCII.
Но не все так уж избито. Во первых, у нас своя «таблица» (система соответствий) в виде произвольной строки символов [Pool] (наподобие понятия «приватного ключа»), во вторых проверка ключа тоже не совсем обычна, основана на равенстве контрольных сумм [Range] из позиций символов ключа в контрольной строке, тогда сами символы ключа не имеют особого значения, имеет значение только лишь набор и расположение символов в контрольной строке и как следствие сумма их позиций. [Pool] это исходная общая строка символов для генерации ключа,
Как узнать ключ Windows установленной на компьютере и ноутбуке
[Range] имеет свое значение как показатель прошел ключ проверку или нет, ну и косвенно влияет на длину ключа.
Код прост, прокомментирован с подробными обьяснениями кому интересно (возможно я где-то заговорился и что-то переврал, но суть должны понять, как и преимущества и недостатки такого приема). Поменяйте ключ на неправильный перед проверкой в поле ввода чтобы убедиться в работе алгоритма.

Прикрепления: KeyString.pub (14.6 Kb)
Сообщение Тема защиты, системы лицений зажевана и возможно стоит собрать все материалы по ней в одном месте, но об этом позже.
Сейчас всего-лишь хочу показать простой принцип генерации лицензионного ключа и его проверки в приложении. В основе избитый принцип соответствия букв числам (и наоборот), основанный на
получении численного кода символа из таблицы символов ASCII.
Но не все так уж избито. Во первых, у нас своя «таблица» (система соответствий) в виде произвольной строки символов [Pool] (наподобие понятия «приватного ключа»), во вторых проверка ключа тоже не совсем обычна, основана на равенстве контрольных сумм [Range] из позиций символов ключа в контрольной строке, тогда сами символы ключа не имеют особого значения, имеет значение только лишь набор и расположение символов в контрольной строке и как следствие сумма их позиций. [Pool] это исходная общая строка символов для генерации ключа,
[Range] имеет свое значение как показатель прошел ключ проверку или нет, ну и косвенно влияет на длину ключа.
Код прост, прокомментирован с подробными обьяснениями кому интересно (возможно я где-то заговорился и что-то переврал, но суть должны понять, как и преимущества и недостатки такого приема). Поменяйте ключ на неправильный перед проверкой в поле ввода чтобы убедиться в работе алгоритма.

Автор — DEMBEL
Дата добавления — 04 Февраля 2012 в 17:53
Админ NeoBook
Администраторы
Сообщений: 7425
DEMBEL, сказал «А», говори уж и «Б»!
— А вам какую операционку поставить — экспи, семерку или висту?
— Это ты сейчас о чем?
— Олег Георгиевич, вам какой компьютер хотелось бы — молодежный или надежный?
— Ну, конечно, надежный!
— Вот, значит — экспи, без вопросов! Сейчас сделаем.
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это — Metro, чтобы дебилы по иконкам не промахивались!
Сообщение Не без изъянов, но в целом работает.
А как насчет примера практического применения?
DEMBEL, сказал «А», говори уж и «Б»!
Автор — Peter
Дата добавления — 04 Февраля 2012 в 21:22
Наш дизайнер
Администраторы
Сообщений: 5959
ну можно еще наложить ограничения на генератор чтобы например ключи генерировались заданной длины и в привычном виде и диапазоне типа XXXX-XXXX-XXXX. Потом постараюсь сделать и выложить.
Пытаться как-то разгадать принцип генерации по имеющимся вариантам ключей, либо подобрать рабочий ключ, т.е. работа основанная на символах ключа лишена смысла (теоретически поможет только брутфорс или взлом самого приложения до исходников), т.к. сами символы ключа не несут никакой информации, они ни с чем не сравниваются. Считается и сравнивается только их контрольная сумма по ключевой строке, а ни то ни другое по символам ключа вычислить никак нельзя. Простой и надежный принцип.
Особенности текущей реализации:
— если ключ типа ABCXYZ валидный, то ключи ABCZYX BCAXYZ и т.д. состоящие из набора валидных символов также будут валидны, т.к. повторю имеет значение не сами символы ключа, а их набор, сумма. Ну, недостаток это или нет, решать вам, по мне так это интересный вариант. (а если уж кому то попадет в руки ключ ABCXYZ то будут и юзать его, а не ABCZYX и прочие, так что. )
— если в ключ входят символы не указанные в ключевой строке, например тире:
AAAA-BBBB-CCCC то они не считаются в сумме, что с ними что без них ключ остается валидным. Что это значит? Можно просто дописать в ключ разного мусора не входящего в ключевую строку и он останется рабочим. Ну или просто можно легко разбить ключ на блоки по тире, не заморачиваясь.
Так что как вы видите, ключ свободно модифицируемый )
Как задавать вопросы
Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
ну можно еще наложить ограничения на генератор чтобы например ключи генерировались заданной длины и в привычном виде и диапазоне типа XXXX-XXXX-XXXX. Потом постараюсь сделать и выложить.
Пытаться как-то разгадать принцип генерации по имеющимся вариантам ключей, либо подобрать рабочий ключ, т.е. работа основанная на символах ключа лишена смысла (теоретически поможет только брутфорс или взлом самого приложения до исходников), т.к. сами символы ключа не несут никакой информации, они ни с чем не сравниваются. Считается и сравнивается только их контрольная сумма по ключевой строке, а ни то ни другое по символам ключа вычислить никак нельзя. Простой и надежный принцип.
Особенности текущей реализации:
— если ключ типа ABCXYZ валидный, то ключи ABCZYX BCAXYZ и т.д. состоящие из набора валидных символов также будут валидны, т.к. повторю имеет значение не сами символы ключа, а их набор, сумма. Ну, недостаток это или нет, решать вам, по мне так это интересный вариант. (а если уж кому то попадет в руки ключ ABCXYZ то будут и юзать его, а не ABCZYX и прочие, так что. )
— если в ключ входят символы не указанные в ключевой строке, например тире:
AAAA-BBBB-CCCC то они не считаются в сумме, что с ними что без них ключ остается валидным. Что это значит? Можно просто дописать в ключ разного мусора не входящего в ключевую строку и он останется рабочим. Ну или просто можно легко разбить ключ на блоки по тире, не заморачиваясь.
Так что как вы видите, ключ свободно модифицируемый ) Автор — DEMBEL
Дата добавления — 05 Февраля 2012 в 09:33
Источник: neobooker.ru
Как создать лицензионный ключ для своего приложения? — Visual Basic .NET
Здравствуйте. как составить лицензионный ключ для своей программы? Как и куда сохраняется ключ для активации? Откуда программа понимает соответствующий ключ? Заранее спасибо.
Код к задаче: «Как создать лицензионный ключ для своего приложения?»
Листинг программы
Public Function CheckKey(KeyString As String) As Boolean If KeyString Is Nothing Or Not KeyString.Contains(«-«) Then Return Nothing Dim KeyParts() As String = KeyString.Split(«-«) If Strings.Mid(KeyParts(0), 2, 1) = «Y» Then If Strings.Mid(KeyParts(1), 2, 1) = «U» Then If Strings.Mid(KeyParts(2), 2, 1) = «R» Then If Strings.Mid(KeyParts(3), 2, 1) = «I» Then If Strings.Mid(KeyParts(4), 2, 1) = «Y» Then Return True End If End If End If End If End If Return False End Function
Источник: studassistent.ru