Як створити та перевірити ліцензійний ключ на програмне забезпечення?


236

Зараз я беру участь у розробці продукту (розробленого в C #), який буде доступний для завантаження та встановлення безкоштовно, але в дуже обмеженій версії. Щоб отримати доступ до всіх функцій, користувач повинен сплатити ліцензійну плату та отримати ключ. Потім цей ключ буде введено в додаток, щоб "розблокувати" повну версію.

Що стосується використання ліцензійного ключа, як це звичайно, мені цікаво:

  1. Як це зазвичай вирішується?
  2. Як я можу створити ключ і як його можна перевірити програмою?
  3. Як я можу також уникнути опублікування ключа в Інтернеті та його використання іншими особами, які не сплатили ліцензію (ключ, який в основному не є "їхнім").

Напевно, я також повинен якось прив’язати ключ до версії програми, щоб можна було стягувати плату за нові клавіші у функціональних версіях.

Що ще я повинен думати в цьому сценарії?

Відповіді:


126

Caveat: ви не можете перешкодити користувачам піратства, а лише полегшите чесним користувачам робити правильно.

Припустимо, що ви не хочете робити спеціальну збірку для кожного користувача, тоді:

  • Створіть собі секретний ключ для продукту
  • Візьміть ім’я користувача
  • Зменшіть ім'я користувачів та секретний ключ та хеш-пам'ять (наприклад, SHA1)
  • Розпакуйте хеш SHA1 як буквено-цифровий рядок. Це "Ключ продукту" індивідуального користувача
  • У програмі зробіть той самий хеш і порівняйте його з ключем продукту. Якщо дорівнює, добре.

Але, повторюю: це не завадить піратству


Нещодавно я читав, що такий підхід криптографічно не дуже здоровий. Але це рішення вже слабке ( оскільки саме програмне забезпечення має десь містити секретний ключ ), тому я не думаю, що це відкриття недійсне для рішення, наскільки воно йде.

Я просто подумав, що я справді повинен згадати це, хоча; якщо ви плануєте отримати щось інше з цього, будьте обережні.


13
якщо програма включає секретний ключ (як маються на увазі вищезазначені кроки), розтріскування його тривіально
Стівен А. Лоу

2
редагувати, щоб бути більш очевидним; не можу перекреслити щось важливе ;-)
Стівен А. Лоу

23
Використовуйте асиметричний криптографічний метод (наприклад, RSA) для генерування та декодування ключа продукту, щоб уникнути вбудови секрету в код.
Амір Могімі

6
Я думаю, що до того моменту, коли хтось зламає ваш код (можливо, на рівні складання), щоб знайти ваш секретний ключ, вони, ймовірно, також знаходяться на тому рівні, що вони можуть просто обійти ваші чеки. Я не думаю, що метод реєстрації є настільки надійним, що він може пережити хороший хакер, який запускає програму локально. Як сказано в першому коментарі, це дійсно все, що робить його на крок важче, ніж просто копіювання файлу. В наші дні багато ігор відмовилися від захисту від копіювання і просто переносять ігровий контент в Інтернеті, і в такому випадку код знаходиться в руках хакера.
JamieB

1
Чи загально включати обмеження в ліцензійний ключ? Наприклад, обмеження часу, кількість одночасних користувачів, модулі для встановлення тощо?
Карло

97

Існує багато способів генерації ліцензійних ключів, але дуже мало таких способів є справді безпечними. І шкода, адже для компаній ліцензійні ключі мають майже те саме значення, що і реальні готівкові гроші.

В ідеалі вам потрібно, щоб ваші ліцензійні ключі мали такі властивості:

  1. Лише ваша компанія повинна мати можливість генерувати ліцензійні ключі для вашої продукції, навіть якщо хтось повністю інженерує ваші продукти (що буде, я кажу з досвіду). Обмивання алгоритму або приховування ключа шифрування у вашому програмному забезпеченні не викликає сумнівів, якщо ви серйозно ставитесь до контролю над ліцензуванням. Якщо ваш продукт буде успішним, хтось зробить генератор ключів за кілька днів з моменту виходу.

  2. Ліцензійний ключ повинен використовуватися лише на одному комп’ютері (або принаймні ви повинні мати можливість дуже жорстко керувати цим)

  3. Ліцензійний ключ повинен бути коротким і легким набирати або диктувати по телефону. Ви не хочете, щоб кожен клієнт телефонував у службу технічної підтримки, оскільки він не розуміє, чи ключ містить "l" чи "1". Ваш відділ підтримки буде вдячний вам за це, і ви матимете менші витрати в цій галузі.

То як ти вирішуєш ці завдання?

  1. Відповідь проста, але технічно складна: цифрові підписи з використанням криптографії відкритого ключа. Насправді у ваших ліцензійних ключах повинні бути "документи", що містять корисні дані, підписані приватним ключем вашої компанії. Підписи повинні бути частиною ліцензійного ключа. Продукт повинен підтвердити ліцензійні ключі відповідним відкритим ключем. Таким чином, навіть якщо хтось має повний доступ до логіки вашого продукту, він не може генерувати ліцензійні ключі, оскільки у них немає приватного ключа. Ліцензійний ключ виглядатиме так: BASE32 (CONCAT (DATA, PRIVATE_KEY_ENCRYPTED (HASH (DATA)))))) Найбільша проблема тут полягає в тому, що класичні алгоритми відкритого ключа мають великі розміри підпису. RSA512 має 1024-бітний підпис. Ви не хочете, щоб у ваших ліцензійних ключах було сотні символів. Один з найпотужніших підходів - використання криптографії еліптичної кривої (з ретельними реалізаціями, щоб уникнути існуючих патентів). Ключі ECC схожі на 6 разів коротші, ніж клавіші RSA, за однакову міцність. Ви також можете зменшити розміри підписів за допомогою таких алгоритмів, як алгоритм цифрового підпису Schnorr (термін дії патенту закінчився в 2008 році - добре :))

  2. Цього можна досягти завдяки активації продукту (Windows - хороший приклад). В основному, для клієнта з дійсним ліцензійним ключем вам потрібно генерувати деякі "дані активації", що є підписаним повідомленням, що вбудовує ідентифікатор обладнання комп'ютера як підписані дані. Зазвичай це робиться через Інтернет, але лише НАДОМО: продукт надсилає ліцензійний ключ та ідентифікатор комп'ютерного обладнання на сервер активації, а сервер активації повертає назад підписане повідомлення (яке також може бути коротким та легким для продиктування через телефон). З цього моменту продукт не перевіряє ліцензійний ключ при запуску, а дані активації, для того щоб комп'ютер був однаковим для перевірки (інакше DATA буде іншим, а цифровий підпис не перевірятиме).

  3. Ну, просто усуньте зайві символи типу "1", "l", "0", "o" зі своїх клавіш. Розділіть рядок ліцензійного ключа на групи символів.


8
Чи не могли вони просто відредагувати додавання / видалення програмного коду таким чином, щоб перевірка пропускалася повністю?
Pacerier

Чи потрібна відповідь на номер 1 онлайн-сервісу активації / деактивації?
Dan W

2
Я хотів би зазначити, наскільки надзвичайно переважна ця відповідь на іншу хеш-річ.
Ерік Аронесті

1
@Pacerier Є багато речей, які ліцензійні ключі захищають програмні компанії від. Модифікація exe - це не одна з них.
Ерік Аронесті

1
Варто зауважити, що навіть за допомогою асиметричної криптографії приватних / відкритих ключів все-таки можливо генерувати підроблені ліцензії, просто замінивши відкритий ключ, що постачається в програмному забезпеченні, іншим відкритим ключем і використовувати відповідний приватний ключ для підписання підробленої ліцензії. Ось чому ми маємо та потребуємо довірених органів сертифікації BTW, які прив'язують відкриті ключі до ідентифікацій. Тож, хоча це може додати ще один обруч, щоб перестрибнути, він сам по собі не гарантує №1.
Саеб Аміні

76

Проста відповідь - Незалежно від того, якою схемою ви користуєтесь, її можна зламати.

Не карайте добросовісних клієнтів системою, призначеною для запобігання хакерам, оскільки хакери зламають її незалежно.

Простий хешований код, прив’язаний до їх електронної пошти чи подібного, мабуть, досить хороший. Ідентифікатори на основі обладнання завжди стають проблемою, коли людям потрібно перевстановити або оновити обладнання.

Хороша тема в питанні: http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34


2
погоджено, ви не хочете засмучувати користувачів, які фактично купують ваш товар! (зверніть увагу на $, яблуко тощо)
Джейсон

2
MS, Apple і т. Д. Можуть уникнути цього, оскільки вони великі і надають основні продукти, які важко дістати в іншому місці або мають велику ринкову тінь, яку вони можуть використовувати для примушування людей. Маленький диявол не може.
шхуна

1
схему підпису ключів pub / priv не можна «зламати», щоб створити нові дійсні ключі для користувачів, які хочуть запустити підписаний код, завантажений із сайту видавців, замість тріщин. тоді як хеш-симетрична схема може бути розбита, щоб створити нові дійсні ліцензійні ключі, відмінні від недійсних. Величезна різниця.
Ерік Аронесті


56

При створенні ключа не забудьте з'єднати номер версії та номер збірки з рядком, на якому обчислюєте хеш. Таким чином, не буде жодного ключа, який розблокує все, що ви коли-небудь випустили.

Після того, як ви знайдете якісь ключі або патчі, що плавають у astalavista.box.sk, ви дізнаєтесь, що вам вдалося зробити щось досить популярне, що хтось намагався зламати. Радуйся!


8
"не забудьте об'єднати номер версії та номер збірки в рядок, на який ви обчислюєте хеш", але чи не зробить це ключовим розривом, коли користувач оновлює незначний випуск патча?
thomthom

1
@thomthom А як тоді пов’язати максимальну версію з ключем? Сама ідея версії є правдоподібною та додає більшої безпеки
Marvin Thobejane

@MarvinThobejane, щоб приєднати max ver, ви можете підписати дозволену макс. Версію і трохи поправити код. але ні> = ops дозволено в знаках.
Ерік Аронесті

22

Крім того, що вже було заявлено ....

Будь-яке використання .NET-програм по суті є порушенням через проблеми з проміжними мовами. Проста розбирання коду .NET відкриє ваш продукт будь-кому. У цей момент вони можуть легко обійти ваш ліцензійний код.

Ви навіть не можете використовувати апаратні значення для створення ключа. Тепер віртуальні машини дозволяють комусь створити образ «ліцензованої» машини та запустити її на будь-якій платформі, яку вони обрали.

Якщо це дороге програмне забезпечення, є й інші рішення. Якщо це не так, просто зробіть це досить важким для випадкового хакера. І прийміть той факт, що з часом там з’являться неліцензійні копії.

Якщо ваш продукт складний, проблеми, пов'язані з підтримкою, створить для вас певний захист.


9
+1 для запобігання слабкості значень апаратних засобів через віртуальні машини.
Рубенс Маріуццо

3
Ось для чого розроблено найменування для .NET та Authenticode для підписання PE. Якщо хтось декомпілював, модифікував та відновив вашу бібліотеку, вона не буде підписана, і програма просто не запуститься. Віртуальна машина .NET цього не дозволить.
Стівен Тунні

2
Підпис призначений для перевірки походження програми, яку ви будете запускати. Якщо користувач не піклується про походження, оскільки він знає, що воно модифіковане і розтріскане, зломщик видалить підпис або навіть підпише його власним підписом. Підписання припиняє змішувати надійні збірки з ненадійними складами.
jesusduarte

мобільний додаток може бути використаний як фальсифікований апаратний ключ для дорогого програмного забезпечення .... просто оплатіть програму та вставте ключ підпису в захищений елемент програми. тоді ви можете активувати за допомогою програми desktop + програма ... деактивація іншого робочого столу. Забарвлення деяких критичних областей коду розділу в додатку та / або в онлайнових службах гомоморфних обчислень може допомогти запобігти тривіальній декомпіляції.
Ерік Аронесті

12

Двигун C # / .NET, який ми використовуємо для генерації ліцензійних ключів, тепер підтримується як відкритий код:

https://github.com/appsoftware/.NET-Licence-Key-Generator .

Він заснований на системі "Часткова перевірка ключа", яка означає, що лише підмножина ключа, який ви використовуєте для створення ключа, має бути зібрана у ваш розповсюджуваний файл. Ви створюєте ключі самостійно, тому реалізація ліцензії є унікальною для вашого програмного забезпечення.

Як було сказано вище, якщо ваш код можна декомпілювати, обхід більшості ліцензійних систем порівняно просто.


Чи готові ви зробити підручник для використання цього продукту? Я виявив, що їхніх вікі трохи не вистачає.
Ентоні Руффіно

Зараз проект відкритий на GitHub, якщо це допомагає (відповідь відредаговано за посиланням).
gb2d

10

Я один із розробників платформи ліцензування програмного забезпечення Cryptolens і працюю над системами ліцензування з 14 років. У цій відповіді я включив кілька порад, заснованих на досвіді, набутому роками.

Найкращий спосіб вирішити це - встановити сервер ліцензійних ключів, який буде викликати кожен екземпляр програми для перевірки ліцензійного ключа.

Переваги сервера ліцензійних ключів

Перевагами сервера ліцензійних ключів є те, що:

  1. Ви завжди можете оновити або заблокувати ліцензійний ключ з негайним ефектом.
  2. кожен ліцензійний ключ може бути заблокований на певній кількості машин (це допомагає запобігти публікації ліцензійного ключа в Інтернеті для інших користувачів).

Міркування

Хоча перевірка ліцензій в Інтернеті дає вам більше контролю над кожним примірником програми, підключення до Інтернету не завжди присутнє (особливо якщо ви орієнтовані на більші підприємства), тому нам потрібен інший спосіб проведення перевірки ліцензійних ключів.

Рішення полягає в тому, щоб завжди підписувати відповідь ліцензійного ключа з сервера, використовуючи криптосистему з відкритим ключем, таку як RSA або ECC (можливо, краще, якщо ви плануєте працювати на вбудованих системах). У вашій заяві має бути відкритий ключ лише для підтвердження відповіді ліцензійного ключа.

Тож у випадку відсутності підключення до Інтернету можна скористатися попередньою відповіддю ліцензійного ключа. Переконайтеся, що у відповіді зберігаються і дата, і ідентифікатор машини та переконайтеся, що вона не надто стара (наприклад, ви дозволяєте користувачам перебувати в офлайні не більше 30 днів тощо) та відповідь ліцензійного ключа належить правильному пристрою.

Зауважте, що ви завжди повинні перевіряти відповідь сертифікату ліцензійного ключа, навіть якщо ви підключені до Інтернету), щоб переконатися, що він не був змінений після виходу з сервера (це все одно потрібно зробити, навіть якщо ваш API до сервер ліцензійних ключів використовує https)

Захист секретних алгоритмів

Більшість додатків .NET можна легко інженерно реверсувати (є як діасемблер, наданий Microsoft для отримання коду IL, так і деякі комерційні продукти можуть навіть отримати вихідний код, наприклад, C #). Звичайно, ви завжди можете придушити код, але він ніколи не є 100% захищеним.

У більшості випадків мета будь-якого рішення щодо ліцензування програмного забезпечення - допомогти чесним людям бути чесними (тобто чесні користувачі, які готові платити, не забувають платити після закінчення терміну пробного періоду тощо).

Однак у вас все ще може бути якийсь код, який ви жодним чином не хочете просочувати до публіки (наприклад, алгоритм прогнозування цін на акції тощо). У цьому випадку єдиний шлях - створити кінцеву точку API, яку ваша програма буде викликати щоразу, коли метод повинен бути виконаний. Він вимагає підключення до Інтернету, але це забезпечує, щоб ваш секретний код ніколи не виконувався клієнтською машиною.

Впровадження

Якщо ви не хочете все реалізовувати самостійно, рекомендую ознайомитись із цим підручником (частина криптоленів )


Одне питання щодо обмеження збереженого ліцензійного ключа не надто старим: оскільки ПК може бути не підключений до Інтернету, їх дату та час завжди можна змінити назад, щоб залишитися на ту саму дійсну дату?
Амір Махді Нассірі

Чи не можуть користувачі обійти Інтернет-сервер ліцензій, визначивши хост зворотного циклу в Windows? Я бачив, як багато програм піратів подібних, Решарпер і Матлаб - це ті, кого я пам'ятаю.
Амір Махді Нассірі

1
@AmirMahdiNassiri Запитання 1: Якщо ПК постійно працює в режимі офлайн, ви можете використовувати годинник реального часу (RTC) в якості надійного джерела часу. Запитання 2: Оскільки відповідь підписана приватним ключем продавця (і підтверджено відкритим ключем всередині програми), супротивнику потрібно буде повторно підписати файл, не знаючи приватного ключа, який на момент написання є неможливо з 2048-бітними ключами RSA.
Артем

7

Раніше я використовував Crypkey . Це одна з багатьох доступних.

Захищати програмне забезпечення можна лише до будь-якої схеми ліцензування.


6

Я не знаю, наскільки складно ви хочете отримати

але я вважаю, що .net може отримати доступ до серійного номера жорсткого диска.

у вас може бути програма, яка надішле вам та щось eles (наприклад, ім’я користувача та mac-адреса nic)

ви обчислюєте код, виходячи з цього, і відправте їм ключ назад.

вони не дозволять їм перемикати машини після того, як вони матимуть ключ.


4
І не дозволяйте їм замінювати мертвий HD серед інших, що призводить до розладу. На жаль, немає простої відповіді, вам потрібно збалансувати довіру з основними механізмами ліцензування.
шхуна

Багато років працював інженером-програмістом із продуктом, який використовував серійний номер за межами hd, він був абсолютно незахищеним для тих, хто знав, як оновити його.
Оден

Я мав на увазі використовувати цей номер з іншими речами (mac address, FQDN), можливо, киньте їх у хеш. Сенс полягає в тому, щоб трохи важче підробити всі ці дані, ніж в першу чергу повернути інженерне програмне забезпечення та зняти перевірку, оскільки це завжди є варіантом.
Crash893

4

Єдиний спосіб зробити все, про що ви просили, - це вимагати доступу до Інтернету та підтвердження з сервером. Програмі потрібно увійти на сервер за допомогою ключа, і тоді вам потрібно зберегти дані сеансу, як-от IP-адресу. Це запобіжить використанню ключа на кількох різних машинах. Зазвичай це не дуже популярно серед користувачів програми, і якщо це не дуже дороге і складне додаток, не варто.

Ви можете просто мати ліцензійний ключ для програми, а потім перевірити клієнт, чи ключ хороший, але його легко поширювати на інших користувачів, і за допомогою декомпілятора можна створити нові ключі.


5
Я працював у компанії, яка використовувала Інтернет-схему ліцензування. кожного разу, коли програма запускалася, вона виходила в Інтернет, щоб перевірити, я думаю, що компанія витрачала більше $ $ на інфраструктуру та розробників на їх ліцензійне рішення, ніж вони втратили б від піратства (вони були нішевим продуктом).
Джейсон

3
Крім того, витрати на технічну підтримку були величезними. багато разів МНОГО разів користувач легітимно використовував інший комп'ютер, щоб спробувати запустити програмне забезпечення, але хеш був іншим, що призвело до величезної кількості технічної підтримки. коротше, що сказав шхуна - не карайте чесних користувачів.
Джейсон

1
Здається, ваша компанія була трохи завищена, вимагаючи перевірки під час запуску кожен раз.
jugg1es

@Jason, ну, вони повинні подорожчати продукт.
Pacerier

1
@Pacerier: неправильна відповідь.
Гонки легкості по орбіті

4

Я реалізував одноразову активацію на базі Інтернету на програмному забезпеченні моєї компанії (C # .net), для якого потрібен ліцензійний ключ, що стосується ліцензії, що зберігається в базі даних сервера. Програмне забезпечення натискає на сервер ключ і надається інформація про ліцензію, яка потім шифрується локально за допомогою ключа RSA, згенерованого з деяких змінних (комбінація CPUID та інших речей, які не змінюються часто) на клієнтському комп'ютері, а потім зберігає його в реєстр.

Для цього потрібне деяке кодування на сервері, але воно працювало дуже добре для нас, і я мав можливість використовувати ту саму систему, коли ми розширилися на програмне забезпечення на базі браузера. Він також надає вашим торговим особам велику інформацію про те, хто, де і коли використовується програмне забезпечення. Будь-яка система ліцензування, що використовується лише локально, повністю вразлива для експлуатації, особливо з відображенням у .NET . Але, як і всі інші сказали, жодна система не є повністю захищеною.

На мою думку, якщо ви не використовуєте веб-ліцензування, то взагалі немає сенсу захищати програмне забезпечення. Оскільки головний біль може викликати DRM, це нечесно щодо тих користувачів, які насправді заплатили за це.


1
Але головна проблема веб-ліцензування полягає в тому, що сервіс ліцензування стає головною ціллю для DDoS-атак. Що або паралізує послугу, або завищить хмарні витрати.
afk5min

4
Це як би сказати, що немає сенсу мати веб-сайт, оскільки він уразливий для DDoS-атак ...
jugg1es

@ jugg1es Ніде у своєму коментарі він не сказав "немає сенсу". Він просто вказав на той факт, що це вразливість, яку слід враховувати.
Ден Бешард

А чеки ще можна зняти у клієнта. Ні перевірки, ні ліцензування на
базі веб-сайтів

1
Ви маєте на увазі фактичний код програми з "необхідною інформацією"? Код, необхідний для запуску програми? Інакше я думаю, що це все одно призведе до виклику методів перевірки isLicensed в одному коді.
азарай

4

Я твердо переконаний, що правильним підходом тут є лише система ліцензування на основі криптографії, що базується на відкритому ключі, тому що вам не потрібно включати важливу інформацію, необхідну для генерації ліцензій, у свій вихідний код.

У минулому я багато разів використовував бібліотеку ліцензування Treek , тому що вона виконує ці вимоги і пропонує дуже хорошу ціну. Він використовує той самий захист ліцензій для кінцевих користувачів і себе, і ніхто не зламав, що дотепер. Ви також можете знайти хороші поради на веб-сайті, щоб уникнути піратства та розлому.


Чи потребує криптографії відкритого ключа використання сервісу онлайн-активації? Я маю на увазі, якщо його немає у вихідному коді (я припускаю, що ви маєте на увазі також виконуваний файл), де ще це могло бути?
Dan W

Ні, вам не доведеться користуватися послугою онлайн-активації. Ви можете генерувати ліцензійні файли повністю офлайн.
panpernicek

Ключ полягає в тому, що ви розміщуєте лише відкритий ключ для коду, який не можна використовувати для генерації ліцензій. Тільки для його перевірки.
panpernicek

3

Як і кілька інших згаданих, я є величезним противником ворожості до клієнтів за замовчуванням - те, для чого ліцензійна галузь є горезвісною. Тож я розкрию гарне рішення вашої проблеми, яке також пропонує хороший клієнт UX .

Для початку ви згадали, що у вас є "обмежена" версія свого програмного забезпечення, яку ви використовуєте для того, щоб спробувати перетворити клієнтів на "оновлення" для додаткових функцій. Тож ви шукаєте ліцензії на функції для вашого продукту, наприклад, клієнт може придбати ліцензію на функцію-X або функцію-Y .

Я створив Кеген з таким ліцензуванням на увазі. Keygen - це ліцензійний API REST, який дозволяє керувати обліковими записами користувачів, ліцензіями, а також відстежувати використання машини / асоціації.

Що я б робив, це створити два типи ліцензій ( політика в межах Keygen), де одна є базовою політикою для обмеженої безкоштовної версії, а інша - це політика для платної версії.

Я не впевнений, що ви використовуєте для платежів, але припустимо, що ви використовуєте щось на зразок Stripe (досить стандартний на сьогоднішній день), який пропонує веб-камери . У Keygen також є веб-ручки (ви користуєтесь ним чи ні, все це все ще застосовується). Ви можете інтегрувати Keygen для спілкування зі своїм постачальником платежів, використовуючи веб-каси з обох сторін (подумайте: customer.created-> створити базову ліцензію для клієнта, license.created-> стягувати клієнта з нової ліцензії).

Таким чином, використовуючи веб-каси, ми можемо автоматизувати створення ліцензій для нових клієнтів. То як щодо перевірки ліцензії в самій програмі? Це можна зробити різними способами, але найпопулярніший спосіб - вимагаючи від вашого клієнта ввести довгий ліцензійний ключ у поле введення, яке ви зможете потім перевірити; Я думаю, що це жахливий спосіб вирішити процедуру перевірки ліцензії у вашій заявці.

Чому я вважаю це? Ну, по-перше, ви вимагаєте від свого клієнта ввести нудно довгий ліцензійний ключ, призначений для споживання машини, а по-друге, вам потрібно, щоб ви та ваш клієнт відслідковували зазначений нудно довгий ліцензійний ключ .

Гаразд, то яка альтернатива? Я думаю, що найкраща альтернатива - це щось, до чого звикли всі ваші клієнти: дозволяючи їм створити обліковий запис для вашого продукту за допомогою електронної пошти / пароля . Потім ви можете пов’язати всі їхні ліцензії та їх машини з цим обліковим записом. Тож тепер замість введення ліцензійного ключа вони можуть просто увійти за допомогою своїх облікових даних.

Яку перевагу це дає тобі? По-перше, це позбавляється від необхідності вам і вашим клієнтам відслідковувати ліцензійні ключі, оскільки все це обробляється поза кадром всередині їх облікового запису користувача і найголовніше: тепер ви можете запропонувати своїм клієнтам ліцензію та автономне обслуговування активація! тобто оскільки всі їхні ліцензії та машини пов'язані з їх обліковим записом користувача, ви можете запропонувати їм придбати ліцензію, коли вони подають заявку на нерозпізнану машину.

Тепер на підтвердження ліцензії : щоразу, коли ваш клієнт увійде до вашої програми за допомогою своєї електронної пошти / пароля, ви можете запитати у свого облікового запису користувача про наявні у нього ліцензії, щоб визначити, чи можуть вони використовувати функцію-X або особливість-Y . А оскільки ваша програма тепер самообслуговується , ви можете дозволити своїм клієнтам купувати додаткові функції безпосередньо з вашої програми!

Таким чином, ми внесли тонну автоматизацію в нашу систему ліцензування, ми можемо ліцензувати окремі функції (тобто обмежена порівняно з повною версією), ми запропонували для наших клієнтів приголомшливий UX, і ми також усунули одну з найбільших причин для запитів підтримки: відновлення ліцензійного ключа.

У будь-якому випадку, це довго, але, сподіваємось, це допомагає комусь!


Не уявляю, що DLL має таку ліцензію в будь-якій ситуації розвитку підприємства. Придумайте, наприклад, автоматизовані сценарії побудови та розгортання. Або просто додати цей крок до багатьох, які зазвичай потрібні для налаштування машини розробника. Для мене ліцензійні ключі потрібно попередньо видавати, а не базуватись на окремих машинах, щоб бути практичним
DvS

2

Не можна повністю запобігти піратству програмного забезпечення. Ви можете запобігти випадковому піратству, і саме це роблять усі ліцензійні рішення.

Ліцензування із заблокованими вузлами (машинним) найкраще, якщо ви хочете запобігти повторному використанню ліцензійних ключів. Я використовую Cryptlex вже близько року для свого програмного забезпечення. У нього також є безкоштовний план , тому якщо ви не сподіваєтеся на занадто багато клієнтів, ви можете користуватися ним безкоштовно.


2

Ви можете використовувати безкоштовне рішення третьої сторони для вирішення цього питання, наприклад Quantum-Key.Net Це безкоштовно та обробляє платежі через Paypal через створену для вас сторінку веб-продажів, видачу ключів по електронній пошті та блокує використання ключа на певному комп’ютері, щоб запобігати піратству.

Вам також слід подбати про те, щоб придушити / зашифрувати ваш код, інакше він може бути легко розроблений за допомогою зворотного програмного забезпечення, таких як De4dot і .NetReflector. Хороший обфускатор безкоштовного коду - це ConfuserEx, який швидкий і простий у використанні та більш ефективний, ніж дорогі альтернативи.

Вам слід запустити готове програмне забезпечення через De4Dot та .NetReflector, щоб реінжиніринг його і побачив, що бачив би зломщик, чи зробили це те саме, і щоб переконатися, що ви не залишили будь-якого важливого коду, що не піддавався чи не маскувався.

Ваше програмне забезпечення все ще буде складним, але для випадкових зломщиків його цілком може вистачити, і ці прості кроки також запобігають вилученню та повторному використанню коду.

https://quantum-key.net

Як користуватися ConfuserEx?

https://github.com/0xd4d/de4dot

https://www.red-gate.com/dynamic/products/dotnet-development/reflector/download

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.