Это проблема, которую мы все должны рассмотреть в какой-то момент.
После многих лет и многих подходов я склонен в целом согласиться с утверждением: «Для любого защищенного программного обеспечения, которое используется более чем несколькими сотнями человек, вы можете найти взломанную версию. Пока что любая схема защиты может быть взломана». Принуждает ли ваш работодатель к использованию антипиратского программного обеспечения?
Далее, каждый раз, когда я пишу на эту тему, мне будут напоминать; «Прежде всего, независимо от того, какую защиту вы будете использовать, действительно преданный взломщик, в конце концов, преодолеет все защитные барьеры». Какое лучшее соотношение цены и качества Защита кода C# для одного разработчика
Итак, несмотря на эти два в целом верных заявления об отказе от ответственности, давайте поговорим о «защите»!
Я по-прежнему считаю, что для небольших приложений, которые вряд ли потратят время и внимание опытного взломщика, защита - это стоящее занятие.
Кажется очевидным, что независимо от того, что вы делаете, если взломщик может переключить результат оператора IF (jmp), исправив приложение, тогда все пароли и ключи в мире не помогут.
Итак, мой подход заключался в том, чтобы запутать код с помощью виртуализации, используя такие продукты, как: http://www.oreans.com/codevirtualizer.php Я очень доволен этим продуктом. Насколько мне известно, это никогда не было побеждено. Я даже могу сжать исполняемый файл с помощью PEcompact У кого-нибудь еще есть опыт работы с этим?
Не было ничего, кроме проблем с EXEcryptor http://www.strongbit.com/news.asp Даже сайт - это головная боль. Скомпилированные приложения будут аварийно завершать работу при выполнении любых вызовов WMI.
Этот подход позволяет вам окружать меньшие участки кода обфускацией и, таким образом, защитить проверку безопасности и т. д.
Я использую подход онлайн-авторизации, поскольку приложению требуются данные с сервера регулярно, поэтому пользователю не имеет смысла использовать их в автономном режиме в течение длительного времени. По определению, в этот момент приложение бесполезно, даже если оно взломано.
Так что простое зашифрованное рукопожатие вполне подойдет. Я просто время от времени проверяю это в рамках защиты от обфускации. Если пользователь устанавливает приложение на другой компьютер, при запуске загружается новый идентификатор, а сервер отключает старый идентификатор и возвращает новую авторизацию.
Я также использую хэш скомпилированного приложения и проверяю его при запуске, чтобы увидеть, не изменился ли хоть один бит, затем открываю приложение как файл (с БЛОКИРОВКОЙ для чтения) из приложения, чтобы никто не изменил его после запуска.
Поскольку все статические строки четко видны в файле .exe, я стараюсь использовать общие сообщения об ошибках и так далее. Вы нигде не найдете строку «Авторизация не удалась».
Для защиты от дампов памяти я использую простую технику обфускации текста (например, XOR для каждого символа). Это затрудняет различение простых текстовых данных в памяти от переменных и т. д.
Затем, конечно, есть AES для любых действительно конфиденциальных данных. Мне нравится режим счетчика для текста, поскольку в нем нет повторяющихся последовательностей, раскрывающих базовые данные, такие как последовательность пробелов.
Но со всеми этими методами, если ключ или вектор инициализации можно выгрузить из памяти или пропустить оператор IF, все будет потрачено впустую.
Я предпочитаю использовать оператор switch, а не условный. Затем я создаю вторую функцию, которая по сути является тупиком, вместо функции, которая фактически выполняет желаемую задачу.
Другая идея - закодировать указатели с добавленной переменной. Переменная - результат авторизации (обычно нулевой). В какой-то момент это неизбежно приведет к GPF. Я использую это только в крайнем случае после того, как несколько авторизаций более низкого уровня не удались, иначе реальные пользователи могут столкнуться с этим. Тогда репутация вашего ПО снижается.
Какие техники вы используете?
(это НЕ дискуссия о достоинствах реализации чего-либо. Она предназначена для тех, кто решил сделать ЧТО-ТО)





Я лично использую код техники обсуждается здесь. Эти уловки приносят неудобства пиратам, не усложняя жизнь вашим законным конечным пользователям.
Но более интересный вопрос не «что», а «почему». Прежде чем поставщик программного обеспечения приступит к этому типу упражнений, действительно важно построить модель угроз. Например, угрозы для недорогой B2C-игры полностью отличаются от угроз для полноценного B2B-приложения.
У Патрика Маккензи есть хорошее эссе, где он обсуждает некоторые из угроз, включая анализ 4 типов потенциальных клиентов. Я рекомендую провести этот анализ угроз для вашего собственного приложения, прежде чем делать выбор в отношении защиты своей бизнес-модели.
Я не согласен xsl.
Мы защищаем наш код не потому, что хотим защитить наши доходы - мы согласны с тем, что те, кто будет использовать его без лицензии, вероятно, никогда не будут за него платить.
Вместо этого мы делаем это, чтобы защитить вложения клиентов наш в программное обеспечение наш. Мы считаем, что использование нашего программного обеспечения делает их более конкурентоспособными на своем рынке и что, если другие компании имеют доступ к нему без оплаты, у них есть несправедливое преимущество, т. Е. Они становятся такими же конкурентоспособными, не неся накладных расходов на лицензирование.
Мы очень внимательно следим за тем, чтобы средства защиты, разработанные на собственном производстве, были как можно более ненавязчивыми для действительных пользователей, и с этой целью мы никогда не будем рассматривать возможность «покупки» готового решения, которое может повлиять на это.
Это просто рационализация. Если вас действительно беспокоит невыгодное конкурентное положение, связанное с высокой стоимостью вашего программного обеспечения, которое ложится на ваших клиентов, вам будет легче решить проблему, снизив стоимость.
Я не согласен, тед. Наше программное обеспечение очень нишевое, компания не смогла бы поддерживать себя, если бы мы взимали меньшую плату. С менее чем сотней посадочных мест и близким к насыщению снижением затрат продукт полностью исчезнет с рынка.
Вам не нужно несколько сотен пользователей, чтобы взломать ваше программное обеспечение. Меня раздражало, что моя условно-бесплатная программа взламывалась так много раз, поэтому в качестве эксперимента я создал программу под названием Magic Textbox (которая представляла собой просто форму с текстовым полем) и опубликовал ее для условно-бесплатных сайтов (у нее был собственный файл PAD и все остальное. ). Днем позже была доступна взломанная версия Magic Textbox.
Этот опыт заставил меня в значительной степени отказаться от попыток защитить свое программное обеспечение чем-либо, кроме элементарной защиты от копирования.
Бьюсь об заклад, где-то есть торрент оригинального Magic Textbox :)
Если нет, то его будет несложно переписать, возможно, на этот раз в .NET. :)
Раньше я использовал .NET Reactor с хорошими результатами - http://www.eziriz.com/
Что мне понравилось в этом продукте, так это то, что он не требовал обфускации кода для обеспечения хорошей защиты.
.NET Reactor часто распаковывается взломщиками
Их поддержки от этой компании нет, все письма поддержки остаются без ответа.
Я реализовал аппаратные ключи (ключи) раньше себя, поэтому я не совсем не знаком с проблемами. Фактически, я много думал об этом. Я не согласен ни с одним нарушителем закона об авторском праве, как это делают ваши взломщики. Любой, кто не хочет законно приобретать копию вашего программного обеспечения, должен обойтись без него. Сам я никогда не нарушаю авторские права на программы. Что, как говорится...
Мне очень-очень не нравится слово «защищать», которое здесь использовано. Единственное, что вы пытаетесь защитить, - это ваш контроль. Вы являетесь нет, защищающим программное обеспечение. Программное обеспечение в любом случае в порядке, как и ваши пользователи.
Причина, по которой удержание людей от копирования и распространения вашего программного обеспечения является такой нечестивой PITA, заключается в том, что предотвращение таких действий неестественно. Вся концепция компьютера вращается вокруг копирования данных, и человеческая природа просто хочет делиться полезными вещами. Вы можете бороться с этими фактами, если действительно настаиваете, но это будет борьба на всю жизнь. Бог не делает людей иначе, и я не покупаю компьютер, который не может копировать вещи. Может, лучше было бы найти способ работать с компьютерам и людям, чем постоянно с ними бороться?
Я, как и большинство профессиональных разработчиков программного обеспечения, работаю на постоянной основе в компании, которой необходимо программное обеспечение, разработанное для ведения своего бизнеса, а не для того, чтобы иметь «программный продукт» с искусственным дефицитом для «продажи» пользователям. Если я напишу что-то в целом полезное (что здесь не считается «конкурентным преимуществом»), мы можем выпустить это как бесплатное программное обеспечение. Никакой «защиты» не нужно.
xsl, это очень узкая точка зрения с МНОГИМИ встроенными предположениями.
Мне кажется очевидным, что любое приложение, которое полагается на доставку чего-либо с сервера, находящегося под вашим контролем, должно уметь довольно хорошо определять, у кого есть действующая учетная запись!
Я также считаю, что регулярные обновления (то есть недавно скомпилированное приложение с кодом в разных местах) быстро сделают взломанные версии устаревшими. Если ваше приложение взаимодействует с сервером, запуск вторичного процесса для замены основного исполняемого файла каждую неделю - это проще простого.
Так что да, ничего нельзя взломать, но с некоторым умным внутренним дизайном это становится спорным вопросом. Единственный фактор, который имеет значение, - это то, сколько времени взломщики готовы потратить на это, и сколько усилий готовы приложить ваши потенциальные клиенты, пытаясь найти продукт своих усилий на еженедельной или даже ежедневной основе!
Я подозреваю, что если ваше приложение предоставляет полезную и ценную функцию, они будут готовы заплатить за это справедливую цену. В противном случае на рынок выйдут конкурентоспособные продукты, и ваша проблема решится сама собой.
По некоторым ссылкам:
Концепция, которую я пытался объяснить, - это то, что я называю «распространение трещин». Не имеет значения, что для вашего приложения существует кряк (или генерация ключей, или пиратский серийный номер, или что-то еще). Важно то, сколько людей имеют доступ к крэку.
Где и когда проверять серийный номер: проверяю один раз при запуске. Многие люди говорят: «Проверяйте в самых разных местах», чтобы кому-то было труднее взломать чек, сняв чек. Если вы хотите быть особенно неприятным для взломщика, проверяйте всевозможные места, используя встроенный код (то есть НЕ выносите все это в SerialNumberVerifier.class) и, если это вообще возможно, сделайте его многопоточным и трудно распознать, когда он выходит из строя , тоже. Но это только усложняет взлом, а не делает невозможным, и помните, что ваша цель - не победить взломщика. Победа над взломщиком не принесет вам заметных денег. Вам просто нужно победить случайного пользователя в большинстве случаев, а случайный пользователь не имеет доступа к отладчику и не знает, как его использовать.
Если вы собираетесь вызвать домой, вам следует вызвать домой и сообщить информацию об их пользователе и принять серийный номер в качестве выходных данных сценария вашего сервера, а не звонить домой с серийным номером и принимать логическое значение и т. д. В качестве выходных данных. то есть вы должны вводить ключ, а не проверять его. Проверка ключа должна в конечном итоге происходить в приложении, поэтому шифрование с открытым ключом - лучший способ сделать это. Причина в том, что подключение к Интернету также находится в руках злоумышленника :) Если ваше программное обеспечение просто ожидает считывать логическое значение из Интернета, вы изменяете файл hosts, а не взламываете его.
Не делайте «интересной» или «сложной» защиты. Многие взломщики взламывают одни только интеллектуальные вызовы. Сделайте вашу защиту трудной для взлома, но как можно более скучной.
Есть некоторые трещины, которые ищут байтовые шаблоны в поисках места для исправления. Обычно они не уничтожаются перекомпиляцией, но если ваш .EXE упакован (ASProtect, Armadillo и т. д.), Такие взломы должны сначала распаковать .EXE .. и если вы используете хороший упаковщик, такой как ASProtect, взломщик сможет распаковать EXE вручную с помощью отладчика уровня сборки, такого как SoftICE, но не сможет создать инструмент, который автоматически распаковывает .EXE (для последующего применения байтовых патчей).
Тот факт, что вы называете своих пользователей «противником», должен указывать на то, насколько далеко вы сбились с пути. :-(
На самом деле, когда я задал на хакерском форуме вопрос о некоторых доступных в настоящее время инструментах защиты программного обеспечения, один из них сказал: «Что касается Code Virtualizer, я сделал CodeUnvirtualizer для полного преобразования виртуальных кодов операций в язык ассемблера». Итак, Code Virtualizer действительно потерпел поражение. Но, сказав это, я выберу этот инструмент для замены ASProtect. Большинство других программ просто добавляют много чего к exe и делают ложные срабатывания антивируса и антишпионского ПО гораздо более вероятными.