Блог → О защите компьютерных программ от вскрытия. Часть 9

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

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

Итак, перейдём к разговору о некоторых стандартных средствах снятия защиты. Для начала, рассмотрим широкоизвестные программы, часто применяемые для анализа и снятия защиты с других программ. Их перечень, безусловно, не полон (и не может быть таковым, ведь время не стоит на месте), он лишь показывает основные направления развития такого рода программ.

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

Универсальные утилиты позволяют читать, анализировать и записывать (на диск и в оперативную память) различную информацию. Эта группа "взломщиков" представлена многочисленными программами, из которых я хочу отметить вот эти:
- Комплект утилит Нортона, разработчик (c) Peter Norton (о них я уже упоминал здесь, а тут можно найти описание некоторых программ из пакета). Комплекс программ PC-SHELL, разработчик (c) Central Point Software Inc. Осуществляют просмотр и запись отдельных секторов диска, просмотр оперативной памяти. Кроме того, имеетися много дополнительных возможностей.
- Программа Disk Explorer, разработчки (c) Quald Soltware Ltd. Позволяет осуществлять просмотр и запись отдельных секторов диска, практически в любом формате.
- Программы MAPMEM.COM, разработчик (c) Borland Inc., и MAPRAM.EXE, разработчик (c) CSPI. А также FX_SHOW.COM, разработчик (c) Кононенко И. и PEEK.COM, разработчик (c) Гуртяк Д.А. Первые две программы позволяют только просматривать, а вторые две - просматривать и редактировать оперативную память.

Вторая группа софта - отладчики и дизассемблеры. Разумеется, ни те, ни другие, не являются каким-то специализированным хакерским софтом, это обычные программы, которые помогают в повседневной работе системного программиста. Из них можно отметить следующие:
- Quald Analyzer, разработчик (с) Quald Soltware Ltd.
- Periscope III, разработчик (c) Data Base Decisions.
- Программа Turbo Debuger, разработчик (c) Borland Inc.
- Souser, разработчик (c) V Communications.
- DisDos, разработчик (c) RJSwantek Inc.

Затем идут программы, предназначенные для снятия защиты. Программы этой группы специально предназначены для копирования защищенных носителей и вскрытия некоторых типов защит. Например, к таковым можно отнести комплекс COPY II - PC, (версия 5.01), разработчик (c) Central Point Software Inc., который состоит из нескольких программ: NOKEY.COM, FIXUP.COM, NOGUARD.COM, BULKERAS.EXE, C0PYIIPC.EXE. Этот комплекс позволяет осуществлять:
- копирование защищенных гибких дисков;
- копирование модулей, которые защищены пакетами SUPERL0K, PROLOK, EVERLOCK, SIERRA;
- перенос защищённых пакетов на жёсткий диск.

Кроме того, есть версии программы COPYIIPC.EXE, которые позволяют копировать гибкие диски для компьютеров Apple и Commodore 64/128. Этой же фирмой выпускается специальная плата COPY II PC OPTION BOARD, которая совместно с соответствующим программным обеспечением производит максимально возможное дублирование гибких дисков.

Также к этой группе относятся программы COPYWRITE, разработчик (c) Quald Software Ltd - предназначена для копирования защищённых гибких дисков (в частности, копирует диски, созданные пакетами Prolok 2 и Everlock) и UNLOCK.COM, разработчик (c) TranSac MasterKey - осуществляет копирование модулей, защищённых пакетами PROLOK, SUPERIOR, EVERLOCK и SIERRA.

Переходим к вопросу о сециальном инструментарии. Заметьте, что очень часто можно снять защиту с пакета, используя примитивные трюки на базе стандартных средств. Это возможно, к примеру, когда защита написана любителем, да еще и с использованием пристыковочного защитного механизма. В данном случае рекомендуется попробовать:
- полное копирование винчестера через магнитную ленту;
- слежение за использованием векторов 13h и 21h с помощью небольшой резидентной программы;
- "забиванием" в ЕХЕ-файле переходов в подпрограммы, и прочие подозрительные объекты командами NOP (90h);
- запуск под каким-нибудь отладчиком;
- "лечение" защищённого диска с помощью программ, аналогичных NDD и подобных.

Как гласит восточная мудрость: "Смешно, когда кузнечик бросается на телегу, все уверены, что упадет кузнечик, никто не думает, что упадет телега". Но в случае вскрытия программ бывает и так, что переворачивается телега.

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

К примеру, это может быть программа, которая отслеживает работу исследуемой задачи. Такая программа встраивает себя в область DOS (к примеру, в область обработки прерывания 13h) и выдаёт на экран справочную информацию о содержимом регистров и областей памяти. Предварительно, до запуска программы пользователь должен выбрать место в области памяти, куда он хочет прилепить свою "телекамеру". Выбор осуществляется с помощью любого отладчика, а адреса обработки нужных прерываний берутся непосредственно в оперативной памяти из области векторного пространства. После этого, по выбранным адресам дизассемблируется соответствующая область памяти, запоминаются адреса двух последовательно идущих (выполняющихся) команд, и сами эти команды.

Выбор двух команд (двух точек прерывания) объясняется необходимостью восстановить исходную команду и восстановить точку прерывания, для последующего прохода вычислительного процесса по данному участку памяти. Алгоритм работы подобной программы следюущий:
- Предварительные действия: по выбранным адресам записать команды выдачи прорываний, например, int 5ah, int 5bh; записать в соответствующие вектора адреса подпрограмм, обрабатывающих данные прерывания; выйти, но остаться резидентной.
- По первому прерыванию выполнить следующие действия: запомнить регистры; вывести на экран содержимое регистров и нужных областей оперативной памяти; восстановить подменённую команду (Команду1) по Адресу1; установить команду выдачи прерывания по Адресу2; уменьшить содержимое находящегося в стеке регистра IP на 2, для того, чтобы управление по окончании обработки прерывания было передано не на следующую команду, а на восстановленную по Адресу1 Команду1; восстановить регистра и выйти из прерывания.
- По второму прерыванию выполнить следующие действия: запомнить регистры; восстановить Команду2 по Адресу2; установить команду выдачи прерывания по Адресу1; уменьшить содержимое находящегося в стеке регистра IP на 2, для того, чтобы управление по окончании обработки прерывания было передано не на следующую команду, а на восстановленную по Адресу2 Команду2; восстановить регистры и выйти из прерывания.

Не забывайте, что программа является резидентной, поэтому в ней, во избежании мелких неприятностей (вроде зависания операционной системы), запрещается использовать прерывания DOS. Также необходимо отметить, что для того чтобы перехватить управление из области DOS, используются внедрённые в его область памяти команды вызова прерывания. Однако это не единственный и не самый лучший вариант. Вместо команд типа int можно использовать команды jmp и call. Особенно важно не забывать выполнять заменяемые ими первоначальные команды DOS.

В том случае, если исследуемая защищённая задача просчитывает далеко вперёд содержимое DOS, или работает непосредственно с BIOS, минуя DOS, то по сути, единственным способом подсмотреть за ней является модификация BIOS. Точно по такому же принципу, следуя которому мы размещаем "телекамеру" в области DOS, такая же "телекамера" осторожно закладывается и в BIOS, при этом, разумеется, какие-то ПЗУ придется перепрограммировать и (как заветную отмычку) всё время носить с собой, "выходя на дело".

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