13.6. Что плохого в протекторах | Телекоммуникации вчера, сегодня, завтра

Последовательность действий при создании объекта радиосвязи

Бланк формы №1 ТАКТИКО-ТЕХНИЧЕСКИЕ ДАННЫЕ РЭС

Поставка оборудования обеспеченного радиочастотами

Витрина



13.6. Что плохого в протекторах

Протекторы призваны обеспечить защиту содержимого исполняемого файла от исследования и модификации. Но часто получается, что защищенная программа по некоторым характеристикам оказывается для пользователя хуже, чем та же программа, но без защиты.

13.6.1. Расход памяти

Прежде всего, протектор — это дополнительный объем кода. Если протектор не поддерживает упаковку защищаемых данных, размер файла на диске в процессе защиты увеличится на размер самого протектора. Правда, стоит отметить, что при использовании сжатия защищенный файл может оказаться меньше оригинального в несколько раз.

Также код протектора требует и некоторого количества оперативной памяти. Но основной перерасход ресурсов оперативной памяти происходит по другой причине, связанной с особенностью загрузки исполняемых файлов в Win32.

Практически все современные операционные системы имеют встроенную поддержку так называемых файлов страничной подкачки (Page File или Swap File). Вся логическая память, доступная выполняемым программам, разбивается на страницы, и некоторые редко используемые страницы могут оказаться не в оперативной памяти, а на диске в файле подкачки. При любом обращении к такой странице менеджер памяти выполняет операцию чтения данных с диска в оперативную память (подкачку). Если в оперативной памяти нет свободных страниц, одна из наиболее редко используемых страниц вытесняется из оперативной памяти на диск. В Win32 также существует механизм файлов, отображаемых в память (Memory Mapped Files), который позволяет отобразить в адресное пространство любой дисковый файл.

Для ускорения загрузки и выполнения программ как раз и используется отображение файлов в память. Вместо того чтобы читать с диска весь файл программы, необходимые области просто отображаются в оперативную память нового процесса, а реальный перенос данных с диска производится непосредственно в тот момент, когда происходит обращение к каждой конкретной странице.

Более того, если загружается несколько копий одной программы, то те страницы памяти, которые не меняются в процессе работы, размещаются в оперативной памяти только один раз, независимо от числа процессов, которые эту память используют.  Но как только один из процессов изменяет содержимое страницы, для него создается персональная копия измененной страницы, под которую выделяется дополнительная память, а остальные процессы продолжают совместно использовать оригинальную страницу.

Как уже говорилось раньше, в обычных программах существуют области, не изменяемые в процессе работы программы. Это, например, секции кода и ресурсов. Таким образом, эти области будут подгружаться с диска по мере использования, и если запустить несколько копий программы, то оперативная память под неизменяемые области будет израсходована только один раз.

Если же программа обрабатывается протектором, то это влечет за собой определенные последствия. Во-первых, замедляется запуск программы, т. к. протектор вынужден прочитать с диска весь код программы до начала выполнения, чтобы правильно настроить программу в памяти. Для небольших программ это, возможно, будет почти незаметно, но с увеличением размера файла задержки при старте защищенной программы могут стать весьма ощутимыми. А во-вторых, при расшифровке тела программы протектор вынужден модифицировать содержимое страниц памяти, а значит, для каждого процесса будет создаваться локальная копия. И если программа должна присутствовать в памяти в нескольких экземплярах, то области кода и ресурсов будут занимать во столько раз больше памяти, сколько процессов запущено.

13.6.2. Безопасность

Разработчики протекторов стремятся использовать все доступные им возможности для повышения стойкости. Однако иногда они забывают, что, повышая защиту конкретной программы, они могут случайно ослабить некоторые элементы защиты.

Драйвер ядра в StarForce
Для обеспечения функционирования некоторых элементов защиты и затруднения анализа защитных механизмов разработчики системы защиты StarForce создали специальный драйвер, который устанавливается вместе с защищаемой программой и без которого функционирование этой программы невозможно.
Станислав Винокуров, являющийся сотрудником компании SmartLine, Inc., обнаружил, что некоторые версии драйвера StarForce содержат ошибку, позволяющую программе сформировать правильные структуры данных и, воспользовавшись установленным драйвером, выполнить любую последовательность команд в режиме ядра.
Фактически, наличие данной ошибки позволяет получить неограниченный доступ к ресурсам компьютера, на котором установлен драйвер StarForce, полностью нейтрализовав защитные механизмы операционных систем семейства Windows NT.
Правда по утверждению представителя компании Protection Technology, являющейся разработчиком StarForce, в последних версиях драйвера эта ошибка уже устранена.

13.6.3. Нестабильность

Для того чтобы усложнить работу исследователя программ, разработчики протектора вынуждены идти на использование нестандартных и/или недокументированных особенностей операционных систем и оборудования. Как правило, эти особенности обнаруживаются путем исследования внутренностей самой операционной системы, а их наличие подтверждается путем многократного тестирования.

Но разнообразие версий программного обеспечения и оборудования настолько велико, что небольшой компании просто физически не удастся проверить обнаруженную особенность на всех конфигурациях, которые могут встретиться у пользователя. Но и крупным корпорациям это далеко не всегда под силу.

Кроме того, с некоторой периодичностью появляются новые версии операционных систем. И очевидно, что любая недокументированная особенность, существовавшая ранее, может отсутствовать в новой версии операционной системы.

Все это приводит к тому, что защищенная программа с некоторой вероятностью может просто не заработать на машине у конкретного пользователя (или у всех пользователей, использующих новую операционную систему или установивших у себя какую-то особенную программу).

Иногда разработчики протекторов излишне усердствуют, стараясь воспрепятствовать анализу защищенных программ. Как уже упоминалось ранее, многие протекторы запрещают выполнять программу под отладчиком. Но не всегда делают это достаточно разумными средствами.

Нелепая защита от отладчика
При запуске, например, исполняемых файлов, входящих в состав программного продукта PHOTOMOD, защищенного с помощью HASP Envelope, нередко можно получить сообщение об ошибке, гласящее, что программа не будет работать, т. к. в памяти обнаружен отладчик. И подобное сообщение, скорее всего, немало удивит пользователя, совершено уверенного в том, что он не запускал никакого отладчика.
Оказывается, защищенная программа так реагирует, в частности, на наличие в памяти процесса с именем MSDEV.EXE. Для справки, MSDEV.EXE — это имя основного файла Microsoft Developers Studio — набора средств разработки программного обеспечения, выпускаемого корпорацией Microsoft. Действительно, MSDEV.EXE может использоваться и для отладки программ, но основное его предназначение — именно разработка. То есть авторы PHOTOMOD считают, что пользователи их продукта ни в коем случае не должны пользоваться средствами разработки, предоставляемыми компанией Microsoft.
Самое забавное в этом примере то, что после переименования MSDEV.EXE его можно держать загруженным в памяти и это не повлияет на работоспособность PHOTOMOD. Следовательно, такое обнаружение отладчика скорее мешает работать обычному пользователю, чем ставит хоть сколько-нибудь ощутимое препятствие на пути исследователя.
Другой пример касается нескольких версий программы Adobe Acrobat eBook Reader, защищенной при помощи протектора РАСЕ InterLok. Защита использовала драйвер, устанавливаемый в ядро операционной системы, и одной из функций драйвера была борьба с отладчиком.
При запуске программа обращалась к драйверу и извещала его о том, что выполнение критической части (требующей блокировки работы отладчика) началось. Перед завершением работы программы драйвер извещался о том, что критическая часть пройдена и блокировку можно отключить. Собственно блокировка заключалась в том, что при возникновении одного из отладочных исключений (например, пошагового выполнения или точки останова) драйвер без лишних вопросов выполнял перезагрузку компьютера.
Если бы драйвер так реагировал только на отладочные исключения, возникающие в контексте защищаемой программы, это еще можно было бы понять. Но перезагрузка выполнялась при исключении в любом процессе. То есть попытка отладки программы в том же Microsoft Developers Studio при загруженном Adobe Acrobat eBook Reader почти неминуемо приводила к перезагрузке с потерей всей несохраненной информации.
В последних версиях Adobe Acrobat eBook Reader проблема, похоже, была решена путем объявления критическими только самых важных частей программы, а не всей программы целиком.

Грамотное использование протекторов позволяет значительно усложнить задачу снятия защиты и если не предотвратить взлом, то значительно снизить его рентабельность. Нелегальные копии программ с хорошей зашитой часто появляются в Интернете только благодаря кардингу — если взломать программу не удается, можно купить лицензию, воспользовавшись украденным номером кредитной карты.



Поиск по сайту


Смотрите также