Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Тема защиты, системы лицений зажевана и возможно стоит собрать все материалы по ней в одном месте, но об этом позже...
Сейчас всего-лишь хочу показать простой принцип генерации лицензионного ключа и его проверки в приложении. В основе избитый принцип соответствия букв числам (и наоборот), основанный на получении численного кода символа из таблицы символов ASCII.
Но не все так уж избито. Во первых, у нас своя "таблица" (система соответствий) в виде произвольной строки символов [Pool] (наподобие понятия "приватного ключа"), во вторых проверка ключа тоже не совсем обычна, основана на равенстве контрольных сумм [Range] из позиций символов ключа в контрольной строке, тогда сами символы ключа не имеют особого значения, имеет значение только лишь набор и расположение символов в контрольной строке и как следствие сумма их позиций. [Pool] это исходная общая строка символов для генерации ключа, [Range] имеет свое значение как показатель прошел ключ проверку или нет, ну и косвенно влияет на длину ключа.
Код прост, прокомментирован с подробными обьяснениями кому интересно (возможно я где-то заговорился и что-то переврал, но суть должны понять, как и преимущества и недостатки такого приема). Поменяйте ключ на неправильный перед проверкой в поле ввода чтобы убедиться в работе алгоритма.
Не без изъянов, но в целом работает. А как насчет примера практического применения?
DEMBEL, сказал "А", говори уж и "Б"!
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
ну можно еще наложить ограничения на генератор чтобы например ключи генерировались заданной длины и в привычном виде и диапазоне типа XXXX-XXXX-XXXX. Потом постараюсь сделать и выложить. Пытаться как-то разгадать принцип генерации по имеющимся вариантам ключей, либо подобрать рабочий ключ, т.е. работа основанная на символах ключа лишена смысла (теоретически поможет только брутфорс или взлом самого приложения до исходников), т.к. сами символы ключа не несут никакой информации, они ни с чем не сравниваются. Считается и сравнивается только их контрольная сумма по ключевой строке, а ни то ни другое по символам ключа вычислить никак нельзя. Простой и надежный принцип.
Особенности текущей реализации: - если ключ типа ABCXYZ валидный, то ключи ABCZYX BCAXYZ и т.д. состоящие из набора валидных символов также будут валидны, т.к. повторю имеет значение не сами символы ключа, а их набор, сумма. Ну, недостаток это или нет, решать вам, по мне так это интересный вариант... (а если уж кому то попадет в руки ключ ABCXYZ то будут и юзать его, а не ABCZYX и прочие, так что...) - если в ключ входят символы не указанные в ключевой строке, например тире: AAAA-BBBB-CCCC то они не считаются в сумме, что с ними что без них ключ остается валидным. Что это значит? Можно просто дописать в ключ разного мусора не входящего в ключевую строку и он останется рабочим... Ну или просто можно легко разбить ключ на блоки по тире, не заморачиваясь. Так что как вы видите, ключ свободно модифицируемый ) Как задавать вопросы
Можно сделать хранение ключей на каком то сервере. Для каждой программы например сделать свой ключ,а в программе исключить- например купленные ключи,чтобы они не совпадались у других юзеров. А то одним ключом могут пользоваться все пользователи и не купив в лишний раз у автора программы новый ключ.. Суть урока ясен,но написанный код мне как новичку тяжело освоить.. :mda:
А то одним ключом могут пользоваться все пользователи и не купив в лишний раз у автора программы новый ключ..
ну, так обычно и бывает ) иначе придется в каждую программу жестко зашивать определенный ключ и компилировать ее для каждого пользователя персонально, что конечно имеет место быть но на практике редко встречается. И в этом случае нет необходимости в подобных генераторах и валидаторах, все делает автор вручную. Но смысла в этом тоже немного, т.к. ничто не мешает распространять конкретный дистрибутив программы вместе с конкретным ключом для него. Здесь может помочь двухэтапная схема с генерацией ключа на основе железа, отправкой его автору и генерация на основе полученного ключа лицензионного ключа, который будет валидным только на данном железе. Почитай здесь начиная отсюда. Как задавать вопросы
Я, кажется, обычно просто делаю файлик с ключами, компилирую его вместе с программой, затем программа просит у пользователя ключ, он его вводит, потом она (программа) считывает весь файл с ключами в одну переменную и с помощью searchstr (или strsearch, вечно путаю) ищет в переменной с ключами - ключ, который ввёл пользователь, но при условии, что пользователь ввёл определённое количество символов и ключ не пустой (это всё проверяется). Кажется, моя схема проста. check you reality
Создал пример использования лицензионного ключа в программе. В основе мак адрес. Уважаемые форумчане подскажите, можно ли его как-то упростить, или такая идея не актуальна?
К сожалению у меня не работают функции vbs. Пишет класс не зарегистрирован. И думаю что я не одинок. Поэтому не использую в своих проектах ни vbs ни js.
Ну зачем же сразу выход? Можно оповестить что нужно ввести название школы. А выходить из программы или нет оставить принимать решение пользователю. 99% что такую программу сразу удалят.
NeoStringCipher Что за плагин? Когда выкладываешь пример, указывай сразу какой используется плагин и где он находится. Иначе помощи можешь не дождаться.
Добавлено (09 Декабря 2013, 20:28) ---------------------------------------------
Цитатаmark ()
а по другому определить мак адрес нельзя??
Я только сегодня выложил перевод плагина tmSystemInfo. Там по моему можно определить и не только мак адрес.
Добавлено (09 Декабря 2013, 20:35) --------------------------------------------- Вот еще плагин может определять мак адрес. Utilidades de Internet 1.0
Ну зачем же сразу выход? Просто лень было что либо писать.Плагин NeoCipher. mishem, Спасибо за плагин, будем разбираться, может как-то иначе сделаю.
Добавлено (13 Декабря 2013, 18:23) --------------------------------------------- Попробовал плагин Utilidades de Internet 1.0. На домашнем компьютере (семерка) мак адрес показывает, на работе (семерка) результат ноль, остальные параметры выводит. В чём причина не пойму? Скомпилировал на домашнем, на работе все равно ноль. Можно через командную строку"ipconfig /all" или "getmac", но как в НБ вывести результат для меня большой вопрос.
ponand, очень помог мне. Причина в соединении, поэтому выбрал другой способ защиты, но он очень примитивный. Используя HEX редактор, Nero записываю файл-ключ большого размера (Гб) на CD. Просто скопировать ключ не получится, но образ легко записать. FileExists "[CDRomDrive]\Audio.txt" "[File]"
Код
If "[File]" "=" "True" FileSize "[CDRomDrive]\Audio.txt" "[Размер]" Else EndIf
IfEx "[File]=True and [Размер]=9876543211" Else AlertBox "Внимание!" "Вставьте диск №2|{КЛЮЧ}" Exit "" "" EndIf
Если хочешь действительно непробиваемую (почти) защиту, делай клиент-серверную связку. При том, сервер должен возвращать важные для работы программы данные, а не просто делать "- Пароль? - Бугагга! - Проходи!". До сервера добраться куда сложнее, чем до программы. Данная схема проверена, всё остальное - костыли. Могу описать подробно, при желании. катился колобок по лесу пел песню он закрыв глаза а как с открытыми катиться когда ты катишься лицом
toizy, спасибо за помощь, но мои познания в программировании куда скромней чем вам кажется. NB это моё как бы хобби, увлечение. Всегда мечтал изучить более серъёзные языки программирования, но как говорится лень матушка мешает, поэтому выбрал NB.
Цитата
Если хочешь действительно непробиваемую (почти) защиту, делай клиент-серверную связку.
Примерно такое делал (InternetGet), но в наших условиях интернет не везде хорош, нужна автономная программа с более простой и надёжной защитой.
О каких ключах здесь идёт речь? Название темы: «Генерация и проверка лицензионного ключа» Так ка сгенерировать, к примеру, лицензионный ключ для установки ОС Windows XP?
О каких ключах здесь идёт речь? Название темы: «Генерация и проверка лицензионного ключа» Так ка сгенерировать, к примеру, лицензионный ключ для установки ОС Windows XP?