защита Java-приложения по лицензии или ключу [закрыто]

Я хочу сделать настольное приложение, которое работает только на машинах с ключом или лицензией. Как этого можно достичь?

3 ответов


это полностью зависит от того, насколько безопасно вы хотите сделать это...

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

это только проблема, если вы планируете идти на массовый рынок и продавать его, и пиратство на самом деле будет проблемой.

если вы не обеспокоены об этом, то вы можете либо пойти на онлайн, либо в автономном режиме проверки.

компания, с которой я работаю, использует онлайн-метод; есть несколько шагов:

EDIT: с тех пор я изменил, как это работает, так как старый способ был кошмаром обслуживания.

  1. файл лицензии
    • (это может содержать все, что вы хотите на самом деле, это просто должно быть уникальным для каждого пользователя. Большинство людей обычно идут с общими одеяние;
    • name
    • company
    • email
    • и key. то есть JDU8-AJS9-88DF-SASF-ASF9 вид вещи, которую вы часто видите.
  2. программа генерирует хэш из файла лицензии.
    1. поместите все данные из файла лицензии в строку
    2. передайте строку в функцию хэширования на этой странице могу показать вам, как.
  3. проверьте программу онлайн (на сервере). Данные кодируются в HTML-запросе (post/get/json / whatever you want) и отправляются на страницу проверки лицензии, которая затем проверяет данные. В данные включена случайно сгенерированная строка, которая используется страницей проверки для генерации другого пароля. Затем он возвращается в программу, которая также использовала случайную строку для создания собственного пароля. Если два совпадают, программа запускается.

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

если вы хотите, чтобы он был в автономном режиме, вы можете включить хэши в код, я думаю, и проверить их там.

Я должен отметить, однако, что я никоим образом не эксперт по безопасности, я просто разрабатываю для компании как часть PhD, и именно так я это сделал.

Edit: это изображение может быть полезно:

enter image description here

второй Edit:

теперь я включил "автономную проверку" в процесс. Это не совсем Автономная проверка, она просто использует пользователя в качестве прокси - сервера-им нужно получить доступ к интернету другим способом.

он работает следующим образом:

  1. подключение к интернету не найдено: предоставьте пользователю 4-значный код
  2. пользователь переходит на страницу автономной проверки (оптимизирована для мобильного использования тоже)
  3. пользователь выбирает, какое программное обеспечение они используют из выпадающего список
  4. пользователь вводит свое имя пользователя (это поле запоминает записи)
  5. пользователь вводит код, который дала им программа, и отправляет
  6. веб-страница предоставляет 4-значный код, который они затем вводят в программу, и она запускается.
  7. программа добавляет некоторые специальные данные в файл лицензии, что означает, что этот процесс не нужно будет повторять в течение следующей недели / месяца / как долго.

каждый раз, когда программа успешно проверяет онлайн, он также добавляет пароль автономного доступа к файлу лицензии, что означает, что он надежен против временного простоя в интернете и перестанет работать, только если интернет не работает более недели/месяца/сколько бы времени он ни был настроен для работы.


Это зависит от того, сколько клиентов вы планируете, что и в режиме рассылки. Вы можете использовать сервер лицензий, но для этого требуется подключение к интернету для клиента. Вы также можете использовать USB-ключи для управления лицензирования.

нет идеальной системы, вам нужно сделать comproise между простотой, усилием и ценой.


вы можете отслеживать лицензирование машины с macIP в интернете . Даже в windows вы можете написать в реестре нет api, но все же вы можете это сделать. Найти фрагмент ниже, чтобы прочитать реестр -

public static final String readRegistry(String location, String key){
        try {
            // Run reg query, then read output with StreamReader (internal class)
            Process process = Runtime.getRuntime().exec("reg query " + 
                    '"'+ location + "\" /v " + key);

            StreamReader reader = new StreamReader(process.getInputStream());
            reader.start();
            process.waitFor();
            reader.join();
            String output = reader.getResult();

            // Output has the following format:
            // \n<Version information>\n\n<key>\t<registry type>\t<value>
            if( ! output.contains("\t")){
                    return null;
            }

            // Parse out the value
            String[] parsed = output.split("\t");
            return parsed[parsed.length-1];
        }
        catch (Exception e) {
            return null;
        }

    }

и на уровне класса, если вы хотите запутать использование должны быть .