Войти
NeoBooker.ru
Добро пожаловать к нам в гости!
Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
  • Страница 1 из 1
  • 1
Модератор форума: Peter, DEMBEL  
Генерация и проверка лицензионного ключа
DEMBELДата: Сб, 04 Февраля 2012, 17:53 | Сообщение # 1
Наш дизайнер
Тема защиты, системы лицений зажевана и возможно стоит собрать все материалы по ней в одном месте, но об этом позже...

Сейчас всего-лишь хочу показать простой принцип генерации лицензионного ключа и его проверки в приложении. В основе избитый принцип соответствия букв числам (и наоборот), основанный на
получении численного кода символа из таблицы символов ASCII.

Но не все так уж избито. Во первых, у нас своя "таблица" (система соответствий) в виде произвольной строки символов [Pool] (наподобие понятия "приватного ключа"), во вторых проверка ключа тоже не совсем обычна, основана на равенстве контрольных сумм [Range] из позиций символов ключа в контрольной строке, тогда сами символы ключа не имеют особого значения, имеет значение только лишь набор и расположение символов в контрольной строке и как следствие сумма их позиций. [Pool] это исходная общая строка символов для генерации ключа,
[Range] имеет свое значение как показатель прошел ключ проверку или нет, ну и косвенно влияет на длину ключа.

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

Прикрепления: KeyString.pub (14.6 Kb)


Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
СообщениеТема защиты, системы лицений зажевана и возможно стоит собрать все материалы по ней в одном месте, но об этом позже...

Сейчас всего-лишь хочу показать простой принцип генерации лицензионного ключа и его проверки в приложении. В основе избитый принцип соответствия букв числам (и наоборот), основанный на
получении численного кода символа из таблицы символов ASCII.

Но не все так уж избито. Во первых, у нас своя "таблица" (система соответствий) в виде произвольной строки символов [Pool] (наподобие понятия "приватного ключа"), во вторых проверка ключа тоже не совсем обычна, основана на равенстве контрольных сумм [Range] из позиций символов ключа в контрольной строке, тогда сами символы ключа не имеют особого значения, имеет значение только лишь набор и расположение символов в контрольной строке и как следствие сумма их позиций. [Pool] это исходная общая строка символов для генерации ключа,
[Range] имеет свое значение как показатель прошел ключ проверку или нет, ну и косвенно влияет на длину ключа.

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


Автор - DEMBEL
Дата добавления - 04 Февраля 2012 в 17:53
PeterДата: Сб, 04 Февраля 2012, 21:22 | Сообщение # 2
Админ NeoBook
Не без изъянов, но в целом работает. thumbs_up
А как насчет примера практического применения?
;)
DEMBEL, сказал "А", говори уж и "Б"!
:)


- А вам какую операционку поставить - экспи, семерку или висту?
- Это ты сейчас о чем?
- Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный?
- Ну, конечно, надежный!
- Вот, значит - экспи, без вопросов! Сейчас сделаем...

(Улицы разбитых фонарей, сезон 10, серия 17)

Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!


При модном втюхе модоподдающимся начинает нравиться
 
СообщениеНе без изъянов, но в целом работает. thumbs_up
А как насчет примера практического применения?
;)
DEMBEL, сказал "А", говори уж и "Б"!
:)

Автор - Peter
Дата добавления - 04 Февраля 2012 в 21:22
DEMBELДата: Вс, 05 Февраля 2012, 09:33 | Сообщение # 3
Наш дизайнер


Особенности текущей реализации:
- если ключ типа ABCXYZ валидный, то ключи ABCZYX BCAXYZ и т.д. состоящие из набора валидных символов также будут валидны, т.к. повторю имеет значение не сами символы ключа, а их набор, сумма. Ну, недостаток это или нет, решать вам, по мне так это интересный вариант... (а если уж кому то попадет в руки ключ ABCXYZ то будут и юзать его, а не ABCZYX и прочие, так что...)
- если в ключ входят символы не указанные в ключевой строке, например тире:
AAAA-BBBB-CCCC то они не считаются в сумме, что с ними что без них ключ остается валидным. Что это значит? Можно просто дописать в ключ разного мусора не входящего в ключевую строку и он останется рабочим... Ну или просто можно легко разбить ключ на блоки по тире, не заморачиваясь.
Так что как вы видите, ключ свободно модифицируемый )


Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62


Сообщение отредактировано
DEMBEL - Вс, 05 Февраля 2012, 10:24
 
Сообщение


Особенности текущей реализации:
- если ключ типа ABCXYZ валидный, то ключи ABCZYX BCAXYZ и т.д. состоящие из набора валидных символов также будут валидны, т.к. повторю имеет значение не сами символы ключа, а их набор, сумма. Ну, недостаток это или нет, решать вам, по мне так это интересный вариант... (а если уж кому то попадет в руки ключ ABCXYZ то будут и юзать его, а не ABCZYX и прочие, так что...)
- если в ключ входят символы не указанные в ключевой строке, например тире:
AAAA-BBBB-CCCC то они не считаются в сумме, что с ними что без них ключ остается валидным. Что это значит? Можно просто дописать в ключ разного мусора не входящего в ключевую строку и он останется рабочим... Ну или просто можно легко разбить ключ на блоки по тире, не заморачиваясь.
Так что как вы видите, ключ свободно модифицируемый )

Автор - DEMBEL
Дата добавления - 05 Февраля 2012 в 09:33
DeveloperДата: Пт, 17 Февраля 2012, 16:57 | Сообщение # 4
Любопытный
Можно сделать хранение ключей на каком то сервере. Для каждой программы например сделать свой ключ,а в программе исключить- например купленные ключи,чтобы они не совпадались у других юзеров. А то одним ключом могут пользоваться все пользователи и не купив в лишний раз у автора программы новый ключ..
Суть урока ясен,но написанный код мне как новичку тяжело освоить..


:mda:
 
СообщениеМожно сделать хранение ключей на каком то сервере. Для каждой программы например сделать свой ключ,а в программе исключить- например купленные ключи,чтобы они не совпадались у других юзеров. А то одним ключом могут пользоваться все пользователи и не купив в лишний раз у автора программы новый ключ..
Суть урока ясен,но написанный код мне как новичку тяжело освоить..

Автор - Developer
Дата добавления - 17 Февраля 2012 в 16:57
DEMBELДата: Пт, 17 Февраля 2012, 17:32 | Сообщение # 5
Наш дизайнер
Quote (Developer)
А то одним ключом могут пользоваться все пользователи и не купив в лишний раз у автора программы новый ключ..
ну, так обычно и бывает ) иначе придется в каждую программу жестко зашивать определенный ключ и компилировать ее для каждого пользователя персонально, что конечно имеет место быть но на практике редко встречается. И в этом случае нет необходимости в подобных генераторах и валидаторах, все делает автор вручную. Но смысла в этом тоже немного, т.к. ничто не мешает распространять конкретный дистрибутив программы вместе с конкретным ключом для него. Здесь может помочь двухэтапная схема с генерацией ключа на основе железа, отправкой его автору и генерация на основе полученного ключа лицензионного ключа, который будет валидным только на данном железе. Почитай здесь начиная отсюда.


Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
Сообщение
Quote (Developer)
А то одним ключом могут пользоваться все пользователи и не купив в лишний раз у автора программы новый ключ..
ну, так обычно и бывает ) иначе придется в каждую программу жестко зашивать определенный ключ и компилировать ее для каждого пользователя персонально, что конечно имеет место быть но на практике редко встречается. И в этом случае нет необходимости в подобных генераторах и валидаторах, все делает автор вручную. Но смысла в этом тоже немного, т.к. ничто не мешает распространять конкретный дистрибутив программы вместе с конкретным ключом для него. Здесь может помочь двухэтапная схема с генерацией ключа на основе железа, отправкой его автору и генерация на основе полученного ключа лицензионного ключа, который будет валидным только на данном железе. Почитай здесь начиная отсюда.

Автор - DEMBEL
Дата добавления - 17 Февраля 2012 в 17:32
SagleftДата: Сб, 26 Мая 2012, 17:54 | Сообщение # 6
Новичок
Я, кажется, обычно просто делаю файлик с ключами, компилирую его вместе с программой, затем программа просит у пользователя ключ, он его вводит, потом она (программа) считывает весь файл с ключами в одну переменную и с помощью searchstr (или strsearch, вечно путаю) ищет в переменной с ключами - ключ, который ввёл пользователь, но при условии, что пользователь ввёл определённое количество символов и ключ не пустой (это всё проверяется). Кажется, моя схема проста.

check you reality
 
СообщениеЯ, кажется, обычно просто делаю файлик с ключами, компилирую его вместе с программой, затем программа просит у пользователя ключ, он его вводит, потом она (программа) считывает весь файл с ключами в одну переменную и с помощью searchstr (или strsearch, вечно путаю) ищет в переменной с ключами - ключ, который ввёл пользователь, но при условии, что пользователь ввёл определённое количество символов и ключ не пустой (это всё проверяется). Кажется, моя схема проста.

Автор - Sagleft
Дата добавления - 26 Мая 2012 в 17:54
markДата: Пн, 09 Декабря 2013, 19:56 | Сообщение # 7
Любопытный
Создал пример использования лицензионного ключа в программе. В основе мак адрес. Уважаемые форумчане подскажите, можно ли его как-то упростить, или такая идея не актуальна?
 
СообщениеСоздал пример использования лицензионного ключа в программе. В основе мак адрес. Уважаемые форумчане подскажите, можно ли его как-то упростить, или такая идея не актуальна?

Автор - mark
Дата добавления - 09 Декабря 2013 в 19:56
mishemДата: Пн, 09 Декабря 2013, 19:58 | Сообщение # 8
Эксперт форума
А где пример?

Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
СообщениеА где пример?

Автор - mishem
Дата добавления - 09 Декабря 2013 в 19:58
markДата: Пн, 09 Декабря 2013, 19:59 | Сообщение # 9
Любопытный
Извиняюсь
Прикрепления: Liz.rar (2.7 Kb)
 
СообщениеИзвиняюсь

Автор - mark
Дата добавления - 09 Декабря 2013 в 19:59
mishemДата: Пн, 09 Декабря 2013, 20:21 | Сообщение # 10
Эксперт форума
К сожалению у меня не работают функции vbs. Пишет класс не зарегистрирован.
И думаю что я не одинок. :)
Поэтому не использую в своих проектах ни vbs ни js.
;)


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
СообщениеК сожалению у меня не работают функции vbs. Пишет класс не зарегистрирован.
И думаю что я не одинок. :)
Поэтому не использую в своих проектах ни vbs ни js.
;)

Автор - mishem
Дата добавления - 09 Декабря 2013 в 20:21
markДата: Пн, 09 Декабря 2013, 20:24 | Сообщение # 11
Любопытный
mishem, Спасибо за оперативный ответ,а по другому определить мак адрес нельзя??
 
Сообщениеmishem, Спасибо за оперативный ответ,а по другому определить мак адрес нельзя??

Автор - mark
Дата добавления - 09 Декабря 2013 в 20:24
mishemДата: Пн, 09 Декабря 2013, 20:35 | Сообщение # 12
Эксперт форума
Код
If "[Schkola]" "=" ""
Exit "" ""

Ну зачем же сразу выход?
Можно оповестить что нужно ввести название школы. А выходить из программы или нет оставить принимать решение пользователю. 99% что такую программу сразу удалят. ;)

NeoStringCipher
Что за плагин?
Когда выкладываешь пример, указывай сразу какой используется плагин и где он находится. Иначе помощи можешь не дождаться.
:)

Добавлено (09 Декабря 2013, 20:28)
---------------------------------------------

Цитата mark ()
а по другому определить мак адрес нельзя??

Я только сегодня выложил перевод плагина tmSystemInfo. Там по моему можно определить и не только мак адрес.

Добавлено (09 Декабря 2013, 20:35)
---------------------------------------------
Вот еще плагин может определять мак адрес. Utilidades de Internet 1.0


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Код
If "[Schkola]" "=" ""
Exit "" ""

Ну зачем же сразу выход?
Можно оповестить что нужно ввести название школы. А выходить из программы или нет оставить принимать решение пользователю. 99% что такую программу сразу удалят. ;)

NeoStringCipher
Что за плагин?
Когда выкладываешь пример, указывай сразу какой используется плагин и где он находится. Иначе помощи можешь не дождаться.
:)

Добавлено (09 Декабря 2013, 20:28)
---------------------------------------------

Цитата mark ()
а по другому определить мак адрес нельзя??

Я только сегодня выложил перевод плагина tmSystemInfo. Там по моему можно определить и не только мак адрес.

Добавлено (09 Декабря 2013, 20:35)
---------------------------------------------
Вот еще плагин может определять мак адрес. Utilidades de Internet 1.0


Автор - mishem
Дата добавления - 09 Декабря 2013 в 20:35
markДата: Пт, 13 Декабря 2013, 18:23 | Сообщение # 13
Любопытный
Ну зачем же сразу выход?
Просто лень было что либо писать.Плагин NeoCipher. mishem, Спасибо за плагин, будем разбираться, может как-то иначе сделаю.

Добавлено (13 Декабря 2013, 18:23)
---------------------------------------------
Попробовал плагин Utilidades de Internet 1.0. На домашнем компьютере (семерка) мак адрес показывает, на работе (семерка) результат ноль, остальные параметры выводит. В чём причина не пойму? Скомпилировал на домашнем, на работе все равно ноль. Можно через командную строку"ipconfig /all" или "getmac", но как в НБ вывести результат для меня большой вопрос.

 
СообщениеНу зачем же сразу выход?
Просто лень было что либо писать.Плагин NeoCipher. mishem, Спасибо за плагин, будем разбираться, может как-то иначе сделаю.

Добавлено (13 Декабря 2013, 18:23)
---------------------------------------------
Попробовал плагин Utilidades de Internet 1.0. На домашнем компьютере (семерка) мак адрес показывает, на работе (семерка) результат ноль, остальные параметры выводит. В чём причина не пойму? Скомпилировал на домашнем, на работе все равно ноль. Можно через командную строку"ipconfig /all" или "getmac", но как в НБ вывести результат для меня большой вопрос.


Автор - mark
Дата добавления - 13 Декабря 2013 в 18:23
ponandДата: Пт, 13 Декабря 2013, 18:53 | Сообщение # 14
Участник
мак адрес может и не определится если нет активного подключения к сети
 
Сообщениемак адрес может и не определится если нет активного подключения к сети

Автор - ponand
Дата добавления - 13 Декабря 2013 в 18:53
markДата: Сб, 14 Декабря 2013, 12:14 | Сообщение # 15
Любопытный
ponand, Спасибо за помощь

 
Сообщениеponand, Спасибо за помощь


Автор - mark
Дата добавления - 14 Декабря 2013 в 12:14
toizyДата: Сб, 21 Декабря 2013, 17:28 | Сообщение # 16
Студийная субстанция
Цитата mark ()
Можно через командную строку"ipconfig /all" или "getmac", но как в НБ вывести результат для меня большой вопрос.


Код
setlocal
for /f "tokens=1" %%i in ('getmac /nh') do (set mac=%%i && goto:next)
   
:next
echo  %mac% - %COMPUTERNAME% >> D:\readme.txt
pause


катился колобок по лесу
пел песню он закрыв глаза
а как с открытыми катиться
когда ты катишься лицом
 
Сообщение
Цитата mark ()
Можно через командную строку"ipconfig /all" или "getmac", но как в НБ вывести результат для меня большой вопрос.


Код
setlocal
for /f "tokens=1" %%i in ('getmac /nh') do (set mac=%%i && goto:next)
   
:next
echo  %mac% - %COMPUTERNAME% >> D:\readme.txt
pause

Автор - toizy
Дата добавления - 21 Декабря 2013 в 17:28
markДата: Вс, 22 Декабря 2013, 16:34 | Сообщение # 17
Любопытный
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
 
Сообщение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

Автор - mark
Дата добавления - 22 Декабря 2013 в 16:34
toizyДата: Вс, 22 Декабря 2013, 18:20 | Сообщение # 18
Студийная субстанция
Если хочешь действительно непробиваемую (почти) защиту, делай клиент-серверную связку. При том, сервер должен возвращать важные для работы программы данные, а не просто делать "- Пароль? - Бугагга! - Проходи!". До сервера добраться куда сложнее, чем до программы. Данная схема проверена, всё остальное - костыли. Могу описать подробно, при желании.

катился колобок по лесу
пел песню он закрыв глаза
а как с открытыми катиться
когда ты катишься лицом
 
СообщениеЕсли хочешь действительно непробиваемую (почти) защиту, делай клиент-серверную связку. При том, сервер должен возвращать важные для работы программы данные, а не просто делать "- Пароль? - Бугагга! - Проходи!". До сервера добраться куда сложнее, чем до программы. Данная схема проверена, всё остальное - костыли. Могу описать подробно, при желании.

Автор - toizy
Дата добавления - 22 Декабря 2013 в 18:20
markДата: Вс, 22 Декабря 2013, 19:58 | Сообщение # 19
Любопытный
toizy, спасибо за помощь, но мои познания в программировании куда скромней чем вам кажется. NB это моё как бы хобби, увлечение. Всегда мечтал изучить более серъёзные языки программирования, но как говорится лень матушка мешает, поэтому выбрал NB.
Цитата
Если хочешь действительно непробиваемую (почти) защиту, делай клиент-серверную связку.
Примерно такое делал (InternetGet), но в наших условиях интернет не везде хорош, нужна автономная программа с более простой и надёжной защитой.
 
Сообщениеtoizy, спасибо за помощь, но мои познания в программировании куда скромней чем вам кажется. NB это моё как бы хобби, увлечение. Всегда мечтал изучить более серъёзные языки программирования, но как говорится лень матушка мешает, поэтому выбрал NB.
Цитата
Если хочешь действительно непробиваемую (почти) защиту, делай клиент-серверную связку.
Примерно такое делал (InternetGet), но в наших условиях интернет не везде хорош, нужна автономная программа с более простой и надёжной защитой.

Автор - mark
Дата добавления - 22 Декабря 2013 в 19:58
driver29Дата: Пт, 03 Июля 2015, 15:07 | Сообщение # 20
Прохожий
О каких ключах здесь идёт речь?
Название темы: «Генерация и проверка лицензионного ключа»
Так ка сгенерировать, к примеру, лицензионный ключ для установки ОС Windows XP?
 
СообщениеО каких ключах здесь идёт речь?
Название темы: «Генерация и проверка лицензионного ключа»
Так ка сгенерировать, к примеру, лицензионный ключ для установки ОС Windows XP?

Автор - driver29
Дата добавления - 03 Июля 2015 в 15:07
Damien89Дата: Пт, 03 Июля 2015, 18:13 | Сообщение # 21
Любопытный
Цитата driver29 ()
О каких ключах здесь идёт речь?
Название темы: «Генерация и проверка лицензионного ключа»
Так ка сгенерировать, к примеру, лицензионный ключ для установки ОС Windows XP?


Узнали бы для начала, чему посвящен данный форум! %)
 
Сообщение
Цитата driver29 ()
О каких ключах здесь идёт речь?
Название темы: «Генерация и проверка лицензионного ключа»
Так ка сгенерировать, к примеру, лицензионный ключ для установки ОС Windows XP?


Узнали бы для начала, чему посвящен данный форум! %)

Автор - Damien89
Дата добавления - 03 Июля 2015 в 18:13
  • Страница 1 из 1
  • 1
Поиск: