C#: Как сделать так, чтобы хакеру / взломщику было сложнее обойти или обойти проверку лицензирования?

Прежде всего, я понимаю, что почти все приложения могут быть взломаны (особенно написанные на C#). Мой вопрос здесь состоит в том, чтобы сделать его немного труднее взломать.

Предположим, что пользователь сохранил файл лицензии в Application.StartupPath, где все пользователи могут читать.

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

Если приложение может найти и проверить, мы даем пользователю возможность продолжить работу с полной функциональностью.

Если нет, мы предлагаем MessageBox с надписью "Нелицензированный, продолжайте использовать с пробной версией, функциональность ограничена".

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

Итак, где мы должны поставить проверку лицензии?

PS: а также, безопасно ли ставить глобальную переменную IsLicensed (true / false) для ограничения функциональности? Легко ли хакеру изменить IsLicensed = true?

4 ответа

Решение

Закон № 1 о лицензировании программного обеспечения: вы не контролируете свое программное обеспечение, если вы разрешаете его установку на компьютер, который вы не контролируете.

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

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

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

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

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

Я думаю, что проверка должна быть сделана в нескольких разных местах исходного кода; гораздо сложнее поймать их всех, чем одного. Кроме того, если вы хотите защитить программу, написанную на C# (или любом другом языке.NET), следует рассмотреть возможность использования некоторого обфускатора. С другой стороны, взломщик или даже ламер сможет взломать программу с помощью некоторого программного обеспечения, например .NET Reflector

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

Что мешает людям напрямую копировать лицензии? Если у вас есть лицензия, которая подписана, то она будет подписана в двух местах - что вы сделали, чтобы остановить это? Не берите в голову, будет ли глобальная переменная еще больше ослабить вашу защиту без учета тривиальных "взломов".

На это действительно нет хорошего ответа, как указал Бен Фойгт. Если вам нужно что-то не копируемое, сделайте это веб-приложением с закрытым исходным кодом. Astalavista покажет вам, что большинство вещей были взломаны. Продукты Adobe, которые стоят тысячи долларов, были взломаны, и я уверен, что их сотрудники достаточно хорошо разбираются в методах защиты от копирования.

Другие вопросы по тегам