вторник, февраля 20, 2007

Столкнулись с пиратством

Мы завершаем разделение направлений. Теперь корзин будет три. Чисто на всякий случай. К государственной кормушке будет прикреплена только одна. Хватит из нас кровь сосать. Последний гвоздь в стену решимости забил один деятель, не будем его называть, ни к чему это, но деятель крупный. Я думаю, что в сотню чиновников нашей прекрасной страны - войдёт легко. Ну так вот. Деятель этот занялся (как они все и делают) активным путанием своей и государственной шерсти. И сделал он это так. Некое ПО было роздано (точнее, продано. типа.) неопределённому количеству лиц, каждое из которых представляет собой самостоятельное юридическое лицо и должно внести пожертвование в сумме X0000 рублей на наш счёт. Разумеется, никакие деньги никуда не пошли (пока что, по крайней мере). Тем не менее, мониторинг активностей показывает, что количество дорвавшихся до кормушки - плодится как минимум в арифметической прогрессии. Мы сочли, что это безобразие и решили действовать. Действия включают в себя внесение таких изменений в процедуру инсталляции, чтобы было невозможно передать пакет с данными, не получив на нашем сервере предварительной авторизации для такого безобразия. Делается это так:

Они самые.

При установке


Алгоритм установки:
  1. 1. Пользователь вводит при установке ключ
  2. 2. Программа установки формирует RSA-ключ, связывая его с пользователем, устанавливая в некое хранилище

  3. Программа установки связывается с сервером, передавая:


    • Ключ, указанный пользователем

    • Public-часть ключа, сформированного на шаге 2

    • Подписанные хэши следующих ключей реестра Windows:
    • i. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LicenseInfo
      ii. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate
      iii. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId

  4. Сервер проверяет ключ. Если переданный ключ ещё не был активирован и является действительным, происходит активация приложения. Активация включает в себя следующие шаги:
    • Выдача программе установки на клиенте последовательного номера установки, подписанного для клиента ключом
    • Сохранение на сервере ключей установки клиента (public-часть ключа RSA клиента, хэши ключей реестра, привязывающие ключ RSA к инсталляции)

При формировании пакета

  1. Формирование пакета для обмена, который должен оплачиваться, выполняется в точности так же, как и для бесплатныхЪ, но в заголовок пакета вносятся следующие изменения:
    • Передаётся идентификатор установки
    • Передаются хэши из п.3с предыдущего подраздела
    • Кроме этого, весь пакет подписывается ключом, выданным классом инсталлятора при установке клиенту для исключения фальсификации или случайных искажений при передаче.

При обработке пакета

Следующие действия должны быть выполнены:
  1. Проверена подпись и извлечён объект данных

  2. Проведена проверка аутентичности пакета (проверены ключи установки и ID Windows из пакета)

Если первый и второй пункты выполняются, то выполняется загрузка пакета.


Забавно, что нас волнует вопрос о том, насколько этично отправлять на наш сервер для привязки LicenseInfo и ProductId. Если мы когда-то проиграем, то только потому, что слишком много внимания уделяем такому по сути абстрактному или даже метафизическому понятию, как совесть, в то время как прочие - даже не знают, как это слово пишется.

Комментариев нет: