Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Логические (программные) защиты основываются на том предположении, что код программы не будет изучен и (или) изменен. В этом случае приложение рассматривается как "черный ящик", на вход которого подается некоторая ключевая информация. Это может быть серийный номер, ключевой диск... — да все что придумает автор. Грубо все защиты можно разделить на две категории:
» основанные на знании (пароль, серийный номер); • основанные на обладании (ключевой диск, документация).
Любопытно, что первая категория защит в основном полагается на законодательство и законопослушность пользователей. Действительно, что помешает легальному пользователю "поделиться" паролем или сообщить серийный номер всем желающим? Конечно, подобное действие можно квалифицировать как "пиратство" и наказать нарушителя. Но точно так же можно наказать за распространение любого ПО, охраняемого авторским правом, вне зависимости от наличия/отсутствия на нем защиты.
Общеизвестно, что правоохранительные органы в нашей стране относятся к пиратам очень терпимо. Нелегальное ПО можно свободно купить в любом городе в центральных магазинах и на радиорынках.
В этих условиях "спасение утопающих — дело рук самих утопающих". Разработчики ПО используют специальные методы, препятствующие нелегальному тиражированию своей продукции. Самые распространенные сегодня защиты — это пароли и серийные номера. Как уже было отмечено выше, наивно полагаться на то, что это затруднит копирование. Серийные номера содержатся в файлах read.те на дисках, печатаются на обложках, помещаются на общедоступных серверах в Интернете и публикуются в телеконференциях.
В настоящее время взлом и модификация кода программ для удаления процедуры запроса серийного номера уже не популярны. Гораздо легче сообщить покупателю серийный номер.
Эти взгляды характерны не только для пользователей, но и для хакеров. Действительно, зачем что-то ломать, если серийный номер и так известен! Однако, встречаются недобросовестные пираты (и довольно нередко), которые распространяют программы без сообщения серийных номеров. Вот тут-то и приходится браться за отладчик!
Рассмотрим простейший пример (file://CD:\SOLIRCE\VC\BREAKOO). Это программа под Win32, использующая библиотеку MFC. Под MS-DOS используются в целом те же принципы защиты, но с небольшими расхождениями. Иногда я на них буду обращать внимание, иногда нет. Не то чтобы взлом досовских приложений перестал быть актуальным, но местами различия не настолько значительны, чтобы стоило отвлекать и запутывать читателя.
Запустим break00.exe на выполнение. Программа просит ввести пароль. Чтобы сравнить его с введенным, оригинальный пароль должен как-то храниться в программе. Очевидным способом является простое посимвольное сравнение
if ((s0-ch)!="KPNC") cout << endl << "Password fail" <<endl;
Для того чтобы найти правильный пароль, надо просто просмотреть дамп программы и поискать все текстовые строки, которые могут быть паролем. Едва ли разработчик защиты (если его так можно назвать) окажется наивным парнем, рассчитывающим, что злоумышленник не найдет открыто хранящийся пароль. Однако некоторые программы (в том числе русифицированные игры от Акеллы) защищены именно так.
Можно было бы просто просматривать текст программы в любом hex-вьювере, но это утомительно, особенно для больших файлов. Поэтому воспользуемся утилитой — "текстовым фильтром", которая анализирует файл и записывает все встретившиеся текстовые строки. Рекомендую воспользоваться собственной Ы-ter. corn.
Рассмотрим полученный листинг.
смещение в файле текстовая строка
24FA: Winit
250C: MSVCP
3020: Password OK
3030: Password fail
3040: KPMC
3048: Enter password
305C: CrackMe
3067: Try to path code of found valid password
3094: Fatal Error
З0A0: MFC initialization failed
Обратим внимание на строку, находящуюся по адресу 0х3040. Не правда ли она могла бы быть паролем? Чаще всего (но необязательно) искомая строки располагается близко к тексту "введите пароль". Ниже мы видим еще одного "кандидата".
Давайте проверим, подойдет ли хотя бы один из них?
CrackMeOI: Try to path code of found valid password
Enter password: КРNС
Password OK!
Press any key to continue
Несмотря на простоту, данный метод не лишен недостатков. Самый главный из них — то, что результат не гарантирован. Скорее всего, в открытом виде пароля не окажется.
Более надежным способом (но, увы, и более трудоемким) является дизассем-блирование программы и анализ алгоритма защиты. Это трудоемкая и кропотливая работа, требующая не только знаний ассемблера, но и усидчивости, а также немного интуиции.
Дата публикования: 2014-11-18; Прочитано: 303 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!