Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
 Аватар для maxkoshevoi
74 / 74 / 23
Регистрация: 07.11.2013
Сообщений: 539

Одноразовая офлайн лицензия для программы

25.02.2016, 23:09. Показов 5025. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Во многих программах используется активация. Вот у меня возникла необходимость сделать её для своей. Как сделать так, чтобы одним ключом или файлом лицензии можно было активировать только одну копию программы, которая не обязательно должна быть подключена к интернету. С интернетом всё просто, можно проверить активирована ли она уже, а как без него?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2016, 23:09
Ответы с готовыми решениями:

Не найдена лицензия. Не обнаружен ключ защиты программы или полученная программная лицензия!
Здравствуйте. 1С установлена на сервер терминалов на win 2008 r2. Устанавливалась в режиме "установка на сервер удаленных рабочих...

Лицензия для программы
Здравствуйте, я использую компилятор MinGW 4.7.0 и IDE CodeBlock для написания одной программы которая будет распространятся бесплатно. ...

Не может быть получена лицензия для запуска программы
Добрый день! Есть сервер W2008R2, на него по usb over ip пробрасывается ключ для по PlanTracer Pro 7.0, ключи видятся, но программа выдает...

9
71 / 58 / 31
Регистрация: 05.09.2013
Сообщений: 666
26.02.2016, 09:10
Если только связать ключ с конкретным экземпляром ПО. Но, опять таки, эту программу можно будет активировать на любом компьютере, и много раз...
0
 Аватар для maxkoshevoi
74 / 74 / 23
Регистрация: 07.11.2013
Сообщений: 539
31.03.2016, 11:59  [ТС]
Я нашел на что описаться в плане железа - на UUID. Он меняется только при смене мат. платы. Узнать его можно так:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        static void Main()
        {
            Console.Write("Your UUID: ");
            Console.WriteLine(Identifier("Win32_ComputerSystemProduct", "UUID"));
            Console.ReadLine();
        }
 
        private static string Identifier(string wmiClass, string wmiProperty)
        {
            string result = "";
            System.Management.ManagementClass mc = new System.Management.ManagementClass(wmiClass);
            System.Management.ManagementObjectCollection moc = mc.GetInstances();
            foreach (System.Management.ManagementBaseObject mo in moc)
            {
                //Получаем только первое значение
                if (result != "") continue;
                try
                {
                    result = mo[wmiProperty].ToString();
                    break;
                }
                catch { }
            }
            return result;
        }

И так, у нас есть четыре ситуации:
1) Активация программы, когда есть интернет
2) Активация без интернета
3) Проверка активации с интернетом
4) Проверка без интернета

Недавно я узнал про асимметричное шифрование (на примере RSA). Классная вещь =) Их вроде и так используют для создания лицензионных ключей, осталось только разобраться с некоторыми деталями. И так, ключ - сообщение, зашифрованное с помощью RSA (или другим асимметричным алгоритмом). На счёт того, что он будет длинным, я не беспокоюсь. Мне в этом плане очень понравилось решение аваста: сделать "файл лицензии" (текстовый файл с ключом, который будет открываться моей программой):
Кликните здесь для просмотра всего текста


1) Тут всё вроде несложно. Пользователь оплачивает, затем получает ключ. При активации программа проверяет, есть ли он в базе и если есть и его ещё не активировали (или активировали, но на этом же компьютере), то активация проходит.
2) Тут уже посложнее. Допустим, на основе UUID и email (или ещё какого-то идентификатора пользователя) генерируется какой-то код, который я потом расшифровываю обратно в UUID и email (для этой части RSA идеально подходит), и если этот пользователь оплатил, генерирую ключ, который привязан к его компьютеру (можно активировать только на нём). Далее пользователь просто активирует программу этим ключом.
3) Это не интересно. Зачем постоянно лазить в интернет без необходимости? Думаю, это нужно будет делать где-то раз в месяц (на всякий случай. вдруг ключ забанят или ещё что). После активации любым способом ключ привязывается к компьютеру. И так, сначала проверяется есть ли ключ в базе и привязан ли он к текущему компу, если нет, сообщается об ошибке активации.
4) Здесь проверка состоит только из последнего пункта предыдущей: проверяется привязан ключ к текущему компу, если нет, сообщается об ошибке активации.

Ну как вам? =)

Теперь пара вопросов:
Как привязать ключ к компьютеру после активации через интернет, чтобы этот процесс нельзя было подделать? Ведь эту модификацию, как и её проверку, должна осуществлять сама программа => это можно взломать..
RSA подходит, если пользователь передаёт что-то мне, а какой алгоритм использовать для передачи ключа пользователю?
0
9 / 9 / 7
Регистрация: 15.03.2015
Сообщений: 34
31.03.2016, 12:15
Еще можно проверять на одновременно включенные программы, как Касперский. А вообще без хорошего обфускатора на c# это будет очень легко все взломать.
0
 Аватар для maxkoshevoi
74 / 74 / 23
Регистрация: 07.11.2013
Сообщений: 539
31.03.2016, 12:32  [ТС]
Цитата Сообщение от Mifort Посмотреть сообщение
Еще можно проверять на одновременно включенные программы
Зачем?

Цитата Сообщение от Mifort Посмотреть сообщение
без хорошего обфускатора на c# это будет очень легко все взломать
Только если пересобрать программу с вырезаной проверкой лицензии. Иначе, не получится сгенерировать ключ, не зная закрытого ключа RSA
0
9 / 9 / 7
Регистрация: 15.03.2015
Сообщений: 34
31.03.2016, 12:44
Цитата Сообщение от maxkoshevoi Посмотреть сообщение
Только если пересобрать программу с вырезаной проверкой лицензии. Иначе, не получится сгенерировать ключ, не зная закрытого ключа RSA
+- так и работают все патч кряки на программы и на не обфусцированном c# это не сложно.
0
 Аватар для maxkoshevoi
74 / 74 / 23
Регистрация: 07.11.2013
Сообщений: 539
31.03.2016, 13:09  [ТС]
Mifort, можешь посоветовать какой-нибудь (желательно бесплатный)?
0
9 / 9 / 7
Регистрация: 15.03.2015
Сообщений: 34
31.03.2016, 13:22
Вот неплохой обзор, а из не перечисленных мне больше всего понравился ILProtector. Бесплатные же в большинстве своем просто усложняют чтение кода, но не препятствуют ему.

P.S. Вот еще говорят неплохой.
1
 Аватар для maxkoshevoi
74 / 74 / 23
Регистрация: 07.11.2013
Сообщений: 539
31.03.2016, 14:57  [ТС]
Mifort, спасибо =) Но об этом потом. Сейчас мне больше интересно реализовать лицензию к которой нельзя будет сделать генератор ключей. Есть предложения по изложенному выше?
0
 Аватар для batonn
0 / 0 / 0
Регистрация: 04.04.2016
Сообщений: 7
22.12.2017, 13:05
Mifort прав. Я так и делал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2017, 13:05
Помогаю со студенческими работами здесь

Лицензия программы
Нужно сделать ключ-лицензии. Ключи лежат например на сервере. Расширения файла txt. Пользователь вводит текст в Edit, ну например если...

Распространение программы, лицензия
Здравствуйте, много прочитал и тут, и в интернете о распространении программ, написанных на Qt. Но везде противоречивая информация:...

Лицензия программы на ограниченный срок
Хочу сделать лицензию на программу по неделе. Как это лучше всего реализовать?

Лицензия программы и определенный срок действия
Как можно сделать лицензию для программы ? Там нужно проводить запись в рестре ? Вот к примеру как антивирус - работающий 1 год при покупке...

Создание древа на html и css. Для офлайн отчета
Привет всем. Собственно пытаюсь сделать древо электросети в отчете. Элементами ul и li. Задача максимум - сделать выдающие пункты. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru