Современное ПО: основные недостатки защиты и общие способы их устранения.Target: защита программного обеспечения.Автор: GoKs [UOFG Crew] Соавторы: aSL! [UOFG Crew]
Жарче тяжести в груди,
Возникает дальний свет, Если сможешь, - помоги мне Поверить в свою смерть! (Ю. Чичерина.)
Итак, на сегодняшний день, представлено довольно большое количество способов защит ПО, но я коснусь в этом материале, только тех, которые пользуются наибольшей популярностью у производителей. 1 тип. Так называемые демо-версии ПО. Проанализировав довольно большое количество таких “демок”, я сделал вывод, что это наиболее хороший способ защиты от несанкционированного использования ПО. 2 тип. Защита ограничением времени работы программы (30 дней или определённое количество запусков). Очень неудачный способ защиты и поддаётся взлому даже начинающему “крэкеру”. 3 тип. Защита на основе генерации серийного номера в зависимости от имени (компании) пользователя . Также довольно слабый способ, хотя иногда и встречаются довольно удачные реализации этого типа защит. В эту же группу я бы включил защиты, основанные на генерации серийного номера в зависимости от отпечатка, созданного программой при первом её запуске. Причём, отпечаток генерируется программой в зависимости от того, какие параметры имеет “железо” компьютера. Здесь намного больше удачных решений, но сам способ не удобен для юзера, купившего такую программу, - ведь при модернизации “железа” ему вновь придётся обращаться к автору, а это не всегда возможно и удобно. 4 тип. Защита, основанная на внешнем “ключевом файле”, так называемые “key-file защиты”. Программа при каждом запуске ищет такой файл в своей директории, и если находит, то считывает зашифрованную информацию из него, расшифровывает её, сравнивает контрольную сумму, полученную при расшифровке и если всё ok, то программа работает как зарегистрированная, если же такого файла нет, или информация при сравнении получается критичной, то программа не запускается вовсе или работает в демо-режиме. Довольно неплохой способ, начинающие “крэкеры”, как правило, не могут сломать подобную защиту, если она грамотно реализована . 5 тип. Навесные защиты типа Vbox, Asprotect, Aspack e.t.c. За этим типом защит я вижу большое будущее. Довольно неплохие решения, но опять же подавляющее большинство подобных защит слабо и в Сети существует огромное количество утилит, снимающих автоматически такие защиты. Но мне представляется наиболее перспективным это направление. Объясню почему. Большинство таких защит, включают все рассмотренные выше типы, сразу, “в одном флаконе”, плюс ко всему используются алгоритмы сжатия исполняемых модулей и шифрование кода программы. Наиболее яркий пример этой группы -Asprotect, и, я думаю, многие любители “пореверсировать”, со мной согласятся, что он - наиболее удачный на сегодняшний день. Хотя продвинутые “крэкеры”, при наличии определённого опыта и наборе определённых средств, успешно справляются и с этим продуктом. 5а тип. Особняком тут стоят весьма известные защиты, применяемые в мире игрушек. Надеюсь, что такие имена, как LaserLock, SecuRom, SafeDisc, StarForce и др. Как правило, они сочетают защиту пятого и третьего типа. Немного поясню: программа как бы “привязывается” к диску, на который она записана, т.е. она зашифрована при помощи отпечатка оригинального диска. Очевидно, что здесь возникают некоторые проблемы при анализе. Наиболее грамотной я хотел бы назвать StarForce. Она Вам, наверное, известна по такой игре, как “Рандеву с незнакомкой” 6 тип. Защиты, осуществлённые при помощи электронных ключей, так называемые “dongle”. Наиболее “трудноломаемые”. Если бы не дороговизна данного типа защит, то, наверное, всё ПО защищалось при помощи “донглов”. Материала по ним в Сети намного меньше, чем по остальным типам защит. Этот тип защит успешно снимают только продвинутые и опытные “крэкеры”. Существует ещё несколько типов защит, но я не буду на них останавливаться, так как они не получили широкого распространения на рынке ПО. Естественно, что все вышеперечисленные типы, последнее время комбинируются, что усложняет их взлом, но всё же не делает это невозможным.
2.Временное ограничение. Довольно “древний” способ защиты, поэтому и наиболее уязвим. “Ломается” новичками, которые вчера прочитали документацию к Soft-Ice и пару статей на reversing.net. J А всё потому, что здесь нет новых решений. Реализуют либо программный счётчик дней (запусков), либо при первом запуске программа прописывает дату своего запуска в реестр Windows и потом при каждом запуске сравнивает сколько прошло дней (запусков), либо делают то же самое, только используют не реестр, а файл, который прячется на жёстком диске. Единственное, утешает то, что этот способ самостоятельно почти не используется, а комбинируется с каким-либо другим. 3.Серийные номера и key-file защиты. Здесь основной ошибкой является, либо использование слишком простых алгоритмов генерации серийного номера, что приводит к написанию “кейгена”, либо наоборот - алгоритм достаточно сложен, но оставлено слишком много лазеек для реализации “битхака”. 4.Навесные защиты. Здесь очень много недостатков, поэтому все их перечислять не буду, а назову лишь те, которые встречаются очень часто:
6.Электронные ключи. С этим типом защит ситуация намного лучше. Тут распространёнными ошибками являются:
4.Навесные защиты. Используйте все возможные антиотладочные приёмы. Старайтесь не использовать реестр Windows для хранения данных о запуске программы. Используйте при шифровании кода программы алгоритмы с большой длиной ключа. Желательно, при запуске программы, чтобы она не расштфровывалась сразу в память компьютера целиком, а это делалось бы “ступенчато”, по мере необходимости. Делайте больше проверок контрольной суммы и целостности кода, интегрируйте их в наиболее важные функции защищаемой программы. 5.Электронные ключи. Здесь самое важное использовать все возможности ключа. Обязательно делать множественную проверку на наличия ключа. Обязательно использование “конверта”. Также, неплохо включать проверку контрольной суммы в наиболее важные функции программы. Используйте для шифрации данных программы данные из ключа (это есть во многих современный ключах). Также, хотелось бы отметить целесообразность применения блочных шифровщиков, всроенных во многие ключи.
2) Комбинируйте несколько типов защит. 3) Если программа использует Internet при выполнении каких-либо функций, обязательно включите в программу процедуру проверки “валидности” регистрационных данных на служебном сервере. 4) Обязательно криптуйте код программы, это если не остановит “взломщика”, но создаст ему дополнительные трудности. Помните! Не существует неломаемой зашиты! Если Вы сделали защиту, то найдется человек, который ее снимет; исключение: Вы - Господь Бог. Запомните! Вы должны сделать такую защиты, чтобы стоимость ее снятия была соизмерима со стоимостью самой программы.
Хочу проинформировать авторов ПО! Наша команда готова протестировать любую вашу защиту, сделать развёрнутый отчёт по обнаруженным недостаткам и дать рекомендации по улучшению защиты (вплоть до написания более сильной защиты). Также, наша группа готовит к выпуску (конец ноября) свой шифровщик исполняемых файлов, в котором мы постараемся реализовать все те пожелания, что были рассмотрены в этом материале. Endnote: © 2001 GoKs [UOFG Crew] goks@uofg.cc Additions © 2001 by aSL! [UOFG Crew] asl@uofg.cc Greets to: everyone in UOFG, TDS , reversing.net and all crackers in da world UOFG Crew Web Site: http://www.uofg.cc |