Защита программного обеспечения для мелких поставщиков

StackOverflow https://stackoverflow.com/questions/343586

Вопрос

Это проблема, которую мы все должны рассмотреть в какой-то момент.

После многих лет и многих подходов я склонен в целом согласиться с формулировкой: " для любого защищенного программного обеспечения, используемого более чем несколькими сотнями человек, вы можете найти взломанную версию. Пока что любая схема защиты может быть подделана. & Quot; Обеспечивает ли ваш работодатель использование антипиратского программного обеспечения?

Далее, каждый раз, когда я пишу на эту тему, кто-то напоминает мне; " Во-первых, независимо от того, какую защиту вы будете использовать, действительно преданный взломщик, в конце концов, преодолеет все защитные барьеры. " Что такое лучшее соотношение цены и качества c # защита кода для одного разработчика

Итак, не выдерживая этих двух общих истинных заявлений об отказе, давайте поговорим о " защите "!

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

Кажется очевидным, что независимо от того, что вы делаете, если взломщик может переключить результат оператора IF (jmp) путем исправления приложения, то все пароли и ключи в мире не помогут.

Итак, мой подход заключался в том, чтобы запутать код виртуализацией с использованием таких продуктов, как: http://www.oreans.com/codevirtualizer.php Я был очень счастлив с этим продуктом. Насколько мне известно, он никогда не был побежден. Я даже могу сжать исполняемый файл с PEcompact У кого-нибудь еще есть опыт?

Не было ничего, кроме проблем с EXEcryptor http://www.strongbit.com/news.asp Даже сайт является головной болью для использования. Скомпилированные приложения будут зависать при выполнении любых вызовов WMI.

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

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

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

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

Поскольку все статические строки четко видны в файле .exe, я стараюсь использовать общие сообщения об ошибках и так далее. Вы не найдете строку & Quot; авторизация не удалась & Quot; в любом месте.

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

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

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

Я склонен использовать оператор switch, а не условный оператор. Затем я создаю вторую функцию, которая является в основном тупиком, а не функцией, которая фактически выполняетжелаемое задание.

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

Какие методы вы используете?

(это НЕ поток, обсуждающий достоинства реализации чего-либо. Он предназначен для тех, кто решил заняться ЧТО-ТО)

Это было полезно?

Решение

Я не согласен xsl.

Мы защищаем наш код не потому, что хотим защитить наш доход - мы принимаем, что те, кто будет использовать его без лицензии, вероятно, никогда не заплатят за него.

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

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

Другие советы

Вам не нужно несколько сотен пользователей, чтобы взломать ваше программное обеспечение. Меня раздражало, что мои условно-бесплатные программы взламывались так много раз, что в качестве эксперимента я создал программу под названием Magic Textbox (это была просто форма с текстовым полем на ней) и выпустил ее на условно-бесплатных сайтах (у нее был свой собственный файл PAD и все остальное). ). Через день появилась взломанная версия Magic Textbox.

Этот опыт заставил меня отказаться от попыток защитить свое программное обеспечение чем-то большим, чем элементарная защита от копирования.

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

Но более интересный вопрос - не "!", а "!", а "!". Прежде чем поставщик программного обеспечения приступит к этому виду упражнений, очень важно создать модель угроз. Например, угрозы для недорогой игры B2C полностью отличаются от угроз для дорогостоящего приложения B2B.

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

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

Мне очень, очень не нравится слово " protect " используется здесь. Единственное, что вы пытаетесь защитить, это ваш контроль . Вы не защищаете программное обеспечение. Программное обеспечение в любом случае прекрасно, как и ваши пользователи.

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

Я, как и большинство профессиональных разработчиков программного обеспечения, работаю на полную ставку в компании, которая нуждается в программном обеспечении, разработанном для того, чтобы оно могло заниматься своим делом, а не для того, чтобы иметь & "программный продукт &" ; с искусственным дефицитом до & "продать"! " пользователям. Если я напишу что-то в целом полезное (это не считается «!», Здесь), мы можем выпустить его как Свободное программное обеспечение. Нет & Quot; защита & Quot; необходимо.

Из некоторых ссылок:

Понятие, которое я пытался объяснить, это то, что я называю & # 8220; распространение трещин & # 8221 ;. & # 8217; не имеет значения, что для вашего приложения существует трещина (или кейген, или пиратский сериал, или что-то еще). Важно то, сколько людей имеют доступ к трещине.

Где / когда проверять серийный номер: я проверяю один раз при запуске. Многие люди говорят, что & # 8220; проверять в самых разных местах & # 8221; Если вы хотите быть особенно противным взломщику, проверьте все виды мест, используя встроенный код (например, DON & # 8217; T перенесите все это в SerialNumberVerifier.class) и, если это вообще возможно, сделайте его многопоточным и сложным распознавать, когда это не удается, тоже. Но это только усложняет процесс взлома, а не делает невозможным, и помните, что ваша цель - не победить взломщика. Победа над взломщиком не принесет вам ощутимых денег. Вам просто нужно победить случайного пользователя в большинстве случаев, и случайный пользователь не имеет доступа к отладчику и не знает, как его использовать.

Если вы & # 8217; собираетесь позвонить домой, вам следует позвонить домой с их информацией о пользователе и принять серийный номер в качестве вывода вашего сервера & # 8217; сценарий, а не звонить домой с серийный номер и принятие логического значения и т. д. в качестве вывода. то есть вы должны делать инъекцию ключа, а не проверку ключа. В конечном итоге проверка ключа должна происходить внутри приложения, поэтому криптография с открытым ключом - лучший способ сделать это. Причина в том, что подключение к Интернету также находится в руках злоумышленника :) Вы & # 8217; файл хоста переходит от использования безубыточного, безостановочного использования, если ваша программа просто ожидает чтения логического значения выключен интернет.

Не делайте & # 8220; интересного & # 8221; или & # 8220; вызов & # 8221; защита. Многие взломщики взломают только интеллектуальный вызов. Сделать вашу защиту трудно взломать, но как можно скучнее.

Существуют некоторые трещины, которые ищут шаблоны байтов в поисках места для исправления. Они обычно не & # 8217; t побеждены перекомпиляцией, но если ваш .EXE запакован (ASProtect, Armadillo и т. Д.), То эти виды взломов должны сначала распаковать .EXE .. и если вы используете хороший упаковщик, такой как ASProtect, взломщик сможет распаковать EXE-файл вручную с помощью отладчика уровня сборки, такого как SoftICE, но не сможет & # 8217; не сможет создать инструмент, который автоматически распаковывает .EXE (чтобы впоследствии применить байтовые патчи) ).

xsl, это очень узкая точка зрения с МНОГИМИ встроенными предположениями.

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

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

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

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

scroll top