Обнуление триала. Собственно, это даже не взлом, а полулегальный способ продлить срок использования неактивированной программы. Заключается он в том, что находится место, где хранится дата первого запуска и меняется/уничтожается. После этого всё можно пользоваться программой до следующего срока. Посмотрим на нашего подопытного рефлектором: Немного погуляв по коду, находим интересную строчку в конструкторе Main. Form. Открываем редактор реестра, идём в HKEY.
Написание keygen'а. Самый ужасный для разработчика вариант, и самый приятный для конечного злобного пользователя. Программа считает себя лицензионной, никаких страшных телодвижений не нужно делать.
А C# приложения, построенные с тем же Silverlight или HTML 5 (кстати, когда. Здравствуйте!
Открываем рефлектор и ищем код на предмет классов содержащих License или Registration, видим: При вводе имени и кода по имени вычисляется некий хеш, который и сравнивается с кодом. Данный хеш использует DES и всякие префиксы.
Байты конвертятся в строку с помощью данного метода. Теперь всё выяснилось, открываем IDE и копируем все необходимые куски кода (или сами реализовываем). Осталось только выяснить, какие значения у Prefix, Suffix и параметры реализации My. DES. Я их приводить не буду, это уже технические детали. В результате генерируем ключ на любое имя и видим: Бинго! Защита от кейгенов проста и очевида: использовать в каком либо виде ассиметричное шифрование.
Использование враппера. Проверка корректности лицензии, достаточно хлопотное дело, и небыстрое. Поэтому разработчики программ обычно проверяют лицензию один раз, и дальше используют полученный флажок — валидна/невалидна (как вариант насколько валидна, если допускается несколько типов лицензии, отличающихся возможностями). Тут можно на этом сыграть, использовав следующий алгоритм: Указать программе, что лицензия уже проверена Указать программе, что лицензия корректна. Как это сделать? Я уже упоминал о наличии метаданных в исполняемых файлах в начале, этим и воспользуемся.
Посмотрим как запускается программа и как проверяется лицензия: С запуском ничего интересного, а в проверке видно, что если уже программа зарегистрирована, то она считает, что всё хорошо и не делает дальнейшую работы по выяснению корректности лицензии. Воспользуемся этим: Сделаем новый проект, добавим Reference на Expresso. Джон Брэдшоу Книги Pdf. Смотрим, что получилось: Ну кто бы сомневался. В данном случае всё оказалось просто, но если бы автор программы заменил публичные свойства на приватные, то всего- лишь пришлось бы использовать Reflection для доступа и всё бы свелось к исходной задаче. Думаю понятно, как можно пробовать защититься от этого — проверять лицензию периодически, смотреть окружение из которого запущена программа, сделать невозможным установку нужной переменной.
Но все эти защиты приведут к тому, что злоумышленник будет использовать. Физический взлом программы. Тут уже всё серьёзно. Программа целиком декомилируется в MSIL а из него уже собирается обратно (помните, я писал, что MSIL это такой же язык как и C#?). Для декомпиляции нам понадобится утилита из SDK под названием ildasm, а для компиляции компилятор из .
NET Framework ilasm. Запускаем ildasm, открываем Expresso.
Находим уже рассмотренный метод Is. Registered и добавляем немножко своего кода (без меток): Потом берём ilasm и собираем всё назад (не забыв подключить ресурсы).
Что делает данный код: устанавливает нужное имя для регистрации (не обязательно), и возвращает статус, что всё хорошо. Чтобы было понятнее, так это выглядит в рефлекторе, в C#Т. Ну и обратно: установить значение переменной тем, что лежит в стеке. Чтобы лучше понять работу всего этого рекомендую простой приём: пишите маленькую программу на привычном языке, компилируете, смотрите что получилось в MSILe и разбираетесь в конструкциях языка.
При этом некоторые вещи в MSIL можно сделать очень красиво, например поменять две переменные местами — 4 симпатичных строчки (на C# меньше, но некрасиво). Чем жертвует злоумышленник: подписью программы, теперь она уже не автора, а его. В некоторых случаях это проблема, если в программе используется множество библиотек. Тогда злобному хакеру придётся разбирать их все и собирать их заново, но если он с этим справится, то у него будет «своя» версия программы подписанная его ключом.
Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб- сайты, веб- приложения, веб- службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Windows, Windows Mobile, Windows CE, . NET Framework, Xbox, Windows Phone . NET Compact Framework и Silverlight.
Создавайте многоплатформенные приложения для Windows, i. OS, Android и других платформ, используя одну интегрированную среду разработки.