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

Очередной цикл статей о защите программных продуктов подходит к завершению, и под конец, мне бы хотелось коснуться некоторых тем, отчасти выходящих за рамки вопроса защиты. Речь об "универсальном взломщике", так я называю гипотетический комплекс программ, которые в совокупности стали бы "отмычкой", позволяющей обойти любую защиту. Почему гипотетически? Потому что, такой "взломщик" - это скорее что-то из области фантастики, своеобразный sci-fi. В реальности такой софт всё равно столкнётся с какими-то органичениями, которые в итоге не позволят ему развернуться по всю мощь, но тем не менее, почему бы не пофантазировать на этот счёт?

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

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

Коммерческое название описываемого одного из таких "взломщиков", данное ему разработчиками - SREDA. Целью его разработки стало создание пакета программ анализа исполняиого кода задач, используемых для работы на компьютере типе IBM PC XT/AT. Основные назначения пакета:
- отладка любых программ без исходных текстов;
- отладка ПЗУ;
- исследование программ на предмет выявления и устранения вирусов, и механизмов защиты от несанкционированного копирования;
- исследование работы DOS и BIOS.

В пакет входят модули, реализующие следующие функции:
- дизассемблирование исполняемого кода;
- выполнение и эмуляция выполнений исполняемого кода;
- эмуляция выполнения и информация о функциях DOS;
- отладочный сервис.

Работа с пакетом начинается с запуска программы SREDA. Дальнейшая работа может осуществляться по следующим основным позициям:
- Загрузка исследуемой программы (кключея модули с расширением EXE, COM, BIN, а также прошивки ПЗУ, начиная с указанных адресов).
- Представление исследуемой прогрвмми, ее частей, а также среда, в которой она должна выполняться из экране и в файле в виде: ASCII кода, шестнадцатеричного и десятичного дампов, дизассемблированного текста.
- Исполнение загружаемой программы с любого адреса и с любыми начальными условиями.
- Возвращение в исследуемую задачу требуемых (задаваемых пользователем) кодов завершения для указанных команд и функций DOS.
- Получение всего трека исполнения программы, а также отдельных выделенных типов команд трека (например, команд типа int, cmp, in, out).
- Покомандное исполнение загруженной программы, с выдачей комментариев о назначении и возможных кодах возврата исполняемой в данный момент команды или функции DOS.
- Исполнение загруженной программы с различными скоростями, с отображением хода работы.
- Разрешение прерывания процесса эмуляции (выполнения) от клавиатуры в любой момент.
- Установка меток для остановов: по выбранным адресам; по значению указанных слов или байт исследуемой программы; по значению регистров; по типу команд; по логическим условиям объединяющим информацию в вышеперечисленных подпунктах.
- Проверка (лечение) исследуемой задачи на наличие в ней известных типов вирусов и механизмов защиты от копирования.

Что требуется от подобного "универсального взломщика"? Он должен обеспечивать загрузку и исследование задач независимо от объема занимаемой ими памяти с любыми защитными механизмами от отладчиков и дизассемблеров. Он не должен допускать в качестве исследуемой загружаемой задачи оригинал или копию собственного исполняемого кода. Можно отметить и некоторые недостатки "взломщика", например: трудность эмуляции недокументированных функций DOS, трудность эмуляции динамики работы аппаратуры.

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

Насколько мог, я постарался изложить в данном цикле статей подход к проблемам организации и преодоления защитных механизмов. Любое целенаправленное исследование такого рода, чревато тем, что приводит к выявлению новых вопросов, требующих ответа. Чистосердечно признаю - я не могу дать ответы на все вопросы, в частности: я ни слова не сказал о работе компьютера в защищённом режиме; не привёл примеров программ для блока ответной реакции; не сделал чёткой классификации существующих пакетов защиты (лишь дал им общее, весьма поверхностное описание). И проблема установки, и проблема снятия защиты, всё ещё далеки от окончательного решения и представляют широкое поле деятельности для пытливого и изощренного ума. Наградой же является счастливая минута, когда приходит нежданная удача -птица открыла клюв, и в него влетела муха.