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