2009-12-07 2 views
9

У меня есть одно приложение, написанное на C#, которое используется только одним пользователем. Я предоставляю это программное обеспечение за очень высокую ежемесячную плату (> 10 000 долларов США). Я бы хотел защитить это приложение от использования любым другим пользователем, и я бы хотел, чтобы один пользователь не мог использовать приложение, если они перестали платить лицензионный сбор.Защита приложения с высоким значением C# только с одним пользователем

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

+0

Это настольный компьютер или приложение ASP.NET? –

+2

Не могли бы вы предоставить контекст о уровне «атаки», который вы хотите защитить от, например, вы ожидаете, что они будут активно пытаться взломать вашу схему защиты, если все пойдет плохо, или это более защищает от случайного «не раздавать копии другим людям»? – itowlson

+2

Кроме того, было бы полезно упомянуть, насколько техническая сложность, которую вы ожидаете от своего нападающего (и любого, кого они зачислили). Вы пытаетесь остановить кого-то, желающего запустить инструмент, например рефлектор, против вашего приложения, вырезать защиту и перестроить его? –

ответ

3

Безопасность - это процесс.

Я сомневаюсь, почему кто-то заплатил 10 тыс. В месяц за заявку. Дублирование функциональности этого приложения, вероятно, не будет дорогостоящим. Итак, если объект, использующий его, описывает его другому программисту, могут ли они его дублировать? Вероятно.

В любом случае, если у вас есть доступ к их оборудованию и, вы управляете своим именем/паролем своей ОС, просто заставляйте пароль истекать каждый месяц.

+3

Если приложение выполняет работу, которая будет стоить вам более 10 тыс. В месяц в виде зарплаты, это вполне разумное предложение. – Mathias

+0

@ Матиас - Я согласен, но это кажется слишком хорошим, чтобы быть правдой. Даже если он экономит 10 тыс. В месяц, какой бизнесмен будет платить 10 тыс. В месяц вместо одноразового платежа, особенно для программного обеспечения. Требуется ли такое техническое обслуживание? Хорошо для ОП, что они договорились об этой сделке. Как долго это будет продолжаться? – 2009-12-07 02:40:29

2

Приложение можно привязать к коробке. Вы также можете ограничить использование пользователя, предоставив ему логин. Я не вижу, что вы можете сделать, чтобы ваш пользователь делился своими учетными данными и коробкой с кем-то другим.

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

12

Для 10K/month вы можете позволить себе запускать его на своем оборудовании, которое вы администрируете, а не на своем оборудовании. Вы можете разместить свое оборудование в датацентре, к которому у них нет физического доступа.


Аппаратура должна быть запущена на оборудовании на площадке заказчика.

Итак, я думаю, они чувствительны к тому, где находятся их данные.

Существует много сторонних лицензионных решений (например, Infralution, .Net Reactor, Oreans WinLicense, Armadillo, XHEO DeployLX и, возможно, многие другие). Если вы заинтересованы в собственном решении Microsoft, см. InishTech here и here.

+0

Аппаратное обеспечение должно быть запущено на оборудовании на сайте заказчика. – user226007

+0

Я отредактировал свой ответ для ссылки на различные существующие лицензионные программы. – ChrisW

8

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

  1. запуск приложения на сервере, который вы контролируете, обновление приложения, так что работает только в этой системе, и предоставление им удаленного доступа к рабочему столу
  2. делает контакт программы удаленная система подписки и авторизации, которую вы контролируете (хотя это можно обойти путем обратного проектирования кода)

Боковое примечание: dang, мне нужно найти клиента, который заплатит мне 10 тыс. долларов в месяц за программное обеспечение пакет! ЛОЛ.

+0

Приложение имеет компонент высокой производительности GUI, который требует, чтобы он выполнялся локально. – user226007

3

Я собираюсь принять платформу Windows (т. Е. Не моно).

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

This link может быть хорошим началом для вас проверить это.

9

Наилучшим решением является, вероятно, сочетание популярных тактик, используемых сегодня:

Блокировка приложения вниз

... к MAC-адресу, жесткий диск серийный номер, и окна ключ продукта операционной системы хоста (если доступно). Вы можете жестко записать это в приложение после его сбора на сайте. Если обнаружено неправильное оборудование, выключите его. Кроме того, найдите в реестре элементы, которые предлагают наличие функций интеграции VMware или Virtual PC и отказываются запускаться при поиске.

Затемнение

... так что это будет более сложно декомпилировать, а также удалить лицензирование. CIL чрезвычайно прост в обратном проектировании, поэтому это должно быть фокусом с вашим приложением (как описано) независимо от того, что еще вы делаете. Это может занять много времени, особенно если вы полагаетесь на сериализацию. Если возможно, оберните все ваши сборки в один EXE-файл, который зашифрован и имеет неуправляемый загрузчик.

Разошлите сердцебиение

... на сервер за пределами площадки, с аппаратными или сайта конкретных данных. Если программное обеспечение скопировано и запущено на другом компьютере, вы можете получить подсказку. Это также может предупредить вас, если приложение отключено. Кроме того, вы можете настроить приложение на требуемый базовый зашифрованный ответ с вашего сервера или закрыть его.

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

2

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

аутентификации, как правило, на основе по меньшей мере, в двух аспектах ситуации пользователя:

  1. Что-то вы являются (биометрического)
  2. Что-то вы есть (донгл)
  3. Что вы знать (password)

I Вы хотите пойти на все три, объедините свой аппаратный ключ с помощью считывателя отпечатков пальцев.

+0

Это не относится к OP, которые хотят отключить программное обеспечение, если срок действия лицензии истекает. – ChrisW

+0

В этом случае вставьте дату истечения срока действия ключа (возможно, «мягкую» дату, которая помещает программное обеспечение в режим аннуитета, и «твердую» дату, которая полностью отключает его) и отправляет пользователю новый ключ один раз месяц или что-то еще. И если * это * недостаточно, соедините все вышеперечисленное с функцией «домашний телефон». –

+0

@ChrisW: он может, некоторые ключи (например, ключ Aladdin HASP) поддерживают таймеры истечения срока действия, которые могут быть удаленно удалены поставщиком. – Mathias

1

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

Это требует, конечно, что вы можете обеспечить очень высокую доступность на своих серверах аутентификации и иметь хорошо запутанную базу кода, но она работает очень хорошо.

0

Взгляните на статью Developing for Software Protection and Licensing; он объясняет, как выбрать решение, почему вы должны запутывать ваше приложение и дает несколько советов по структурированию вашего кода, который будет сложнее взломать.

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

Следует помнить, что как только приложение будет запущено на другом компьютере, нет 100% гарантированного способа предотвратить выполнение. Что вы можете сделать, если будете осторожны, поднять планку достаточно высоко, чтобы легче было купить ваше программное обеспечение, чем взломать его.

Обязательная оговорка & plug: компания, которую я учредил, производит OffByZero Cobalt software licensing solution for .NET.

Смежные вопросы