Я не инженер-программист, как вы увидите, если вы продолжите чтение, однако мне удалось написать очень ценное приложение, которое сэкономит нашей компании много денег. Мне не платят за написание программного обеспечения, мне не платили за написание этого приложения, и я не являюсь инженером по программному обеспечению моей должности, поэтому я хотел бы иметь полный контроль над тем, кто использует это приложение, если мне когда-либо придется уйти, поскольку, насколько я могу судить, это не по закону (тоже не писал в рабочее время).
Это может звучать по-детски, но я потратил много времени на это, и я поддерживаю это почти ежедневно, поэтому я чувствую, что должен иметь некоторый контроль над этим, или, по крайней мере, мог бы продать его своей компании если они когда-нибудь отпустят меня, или я хотел идти дальше.
Моя текущая схема защиты в этом приложении выглядит примерно так:
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
Это было все, что потребовалось, чтобы компенсировать загрузку приложения до сбоя во время проверки сервера, что позволило мне нажать «продолжить» и полностью обойти всю мою «безопасность» и продолжать использовать программу без истечения срока ее действия.
Теперь нормальный человек пойдет на это (редактирование в шестнадцатеричном формате), чтобы попытаться преодолеть мою схему защиты? Маловероятно, однако, как опыт обучения, что я мог бы сделать в качестве дополнительного шага, чтобы заставить редактирование в шестнадцатеричном формате или любые другие обычные обходные пути не работать, если это не было сделано "профессиональным" взломщиком?
Опять же, я не параноик, я просто хочу узнать больше о безопасности приложений. Я одновременно гордился собой и стыдился того, что создал и сломал свою собственную защиту.
Если комментируете, пожалуйста, будьте добры, поскольку я знаю, что это, вероятно, публикация плечевой кости для тех, кто более информирован, чем я, поскольку у меня действительно мало опыта в написании программного обеспечения и я никогда не проходил никаких курсов и т. Д. Спасибо за чтение!