Используйте WebRequest, чтобы проверить, действительна ли лицензия - PullRequest
1 голос
/ 12 декабря 2011

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

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

Моя текущая схема защиты в этом приложении выглядит примерно так:

string version;
WebRequest request = WebRequest.Create("http://MyWebSiteURL/Licence text file that either says 'expired' or "not expired'");
WebResponse response = request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream());
version = stream.ReadToEnd();
stream.Close();
response.Close();

if (version == ("not expired") == false)
{
    MessageBox.Show(Environment.NewLine + "application expired etc etc", "Version Control");
}

Он проверяет мой сервер на "не истек" (в виде обычного текста), и если веб-запрос возвращается как что-то, кроме "не просрочено", в конечном итоге появляется другая форма, сообщающая, что он истек, и позволяет вам ввести пароль для дня, который умножается на несколько заранее определенных чисел, умноженных на текущую дату, чтобы создать «дневные пропуски», если это необходимо (я думаю, что Алан Тьюринг только что перевернулся в своей могиле).

Не самая лучшая схема безопасности, но я подумал, что она довольно умна, не имея опыта в безопасности программного обеспечения. Однако я слышал о шестнадцатеричном редактировании, чтобы обойти безопасность, поэтому я провел небольшой тест для науки и нашел эту область моего скомпилированного EXE:

"System.Net.WebRequest." Которые я заполнил нулями, чтобы выглядеть так: System.Net000000000

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

Теперь нормальный человек пойдет на это (редактирование в шестнадцатеричном формате), чтобы попытаться преодолеть мою схему защиты? Маловероятно, однако, как опыт обучения, что я мог бы сделать в качестве дополнительного шага, чтобы заставить редактирование в шестнадцатеричном формате или любые другие обычные обходные пути не работать, если это не было сделано "профессиональным" взломщиком?

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

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

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Еще один способ обойти проверку лицензии - перенаправить контрольный URL на localhost, возвращая всегда нужный текст ...
Лучшим способом является вызов функции, выполняющей ту же функцию, но сделав ответ сервера подписанным XML, включая отметку времени ответа сервера, которую вы можете проверить на добавление с помощью системной даты и времени (используйте даты UTC с обеих сторон). Также рекомендуется генерировать исключения, когда что-то не так, как вы ожидаете, и контролировать поток вашей программы с помощью обработки исключений.
Чтобы узнать, как это сделать, проверьте следующее:
Как: подписывать XML-документы с помощью цифровых подписей
Как: проверить цифровые подписи документов XML

0 голосов
/ 12 декабря 2011

Теперь нормальный человек пойдет на это (редактирование в шестнадцатеричном формате), чтобы попытаться обойти мою схему защиты?

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

Большинство приложений .net, если они не запутаны, могут быть легко декомпилированы в исходный код с помощью таких инструментов, как ( Telerik JustDecompile ) или они могут просто использовать ildasm, чтобы увидеть код IL, я слышал, что есть инструменты даже для декомпиляции запутанных библиотек .net, хотя я не использовал и не нашел ни одной.

С моим маленькимопыт, я могу предложить два подхода

  1. Обеспечение лицензирования и взлома его в приложении, которое работает на пользовательском компьютере - это игра в кошки-мышки , вы можете добавить дополнительную защитук вашему коду, перенеся некоторую часть функциональности приложений на сервер и представив его как веб-сервис, который может использовать ваш клиент; часть, которую вы перемещаете на сервер, должнабыть важной частью работы приложения и должно быть чем-то, что трудно смоделировать.
  2. Другой подход заключается в добавлении в приложение функции автоматического обновления, которая будет проверять сервер на наличие последних обновлений и, когда это когда-либоон находит новую версию, перезаписывает более старую, таким образом переопределяет любую взломанную версию, это можно легко отключить, но если отключить, это также остановит исправления ошибок, которые вы могли бы выпустить

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...