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