    7. КАК ОЧИСТИТЬ ПРОГРАММУ ОТ ВИРУСОВ И
                             ПРИСТЫКОВАННЫХ ЗАЩИТ
         В прерыдущей главе описано, как внедрить защитный механизм в тело
    программы. В этой, напротив, расскажем о способе его удаления с
    помощью программы EXEB, имеющейся на дискете.

                                  НАЗНАЧЕНИЕ
         Программа EXEB.EXE предназначена для анализа исполняемых модулей
    и удаления из них пристыковочных частей - вирусов, защит и т.п. Она
    корректно работает на ПЭВМ типа IBM PC/XT/AT в среде MS DOS версии 3.1
    и выше.
                    СОДЕРЖИМОЕ ДИСКЕТЫ И ПОРЯДОК УСТАНОВКИ
                Поставляемая дискета содержит следующие файлы:
     README      - описание;
     EXEB.EXE    - основная программа;
     CHSIZE      - утилита для уменьшения размера  результирующей задачи.
       Перед началом работы необходимо скопировать дискету на жесткий диск
    в любой директорий.

       Формат команды запуска:
         EXEB [!]
                   []
     где:
           !        -  признак холостого срабатывания;
        ::= номер перехватываемого прерывания;
       ::= номер функции (AH) указанного прерывания;
          ::= счетчик появлений функции FuncNumber;
         ::= имя исследуемой задачи;
      ::= аргументы  командной   строки  исследуемой
     задачи.
        Примечание:
         В командной строке в качестве аргумента FuncNumber разрешен
    символ *.
         Числовые аргументы задаются в 16-ричной системе счисления.
         Например, EXEB 21 30 1 a.exe - означает: перенести код
    исследуемой задачи a.exe в результирующий EXE-файл при первом
    обращении к 30h функции 21h прерывания после запуска a.exe.
         Аргументы желательно выбирать таким образом, чтобы они
    соответствовали первому после пристыкованного блока прерыванию в теле
    исследуемой задачи.
         Если программа была создана компиляторами с языков высокого
    уровня (С, PASCAL, BASIC и т.п.), то рекомендуются следующие значения
    аргументов:
         = 21                        = 21
        = 30       или             = 35
           = 1                           = 1.
        EXEB позволяет исследовать исполняемый EXE-модуль на команды
    вызова прерываний (int). Их номера фиксируются программой EXEB, если в
    качестве аргумента FuncNumber использован символ ?. Например: при
    строке запуска программы EXEB 10 ? 1 a.exe в крайнем правом столбце
    экрана будут выcвечиваться текущие номера функций 10-го прерывания.
         Первый аргумент командной строки ! - признак холостого
    срабатывания - необязателен. Его функциональное назначение - выдача
    звукового сигнала в момент обнаружения указанной вами в командной
    строке ситуации (без реальной ее обработки программой EXEB, т.е. без
    создания результирующего EXE-файла).
         Итогом работы EXEB является файл с именем TASK.EXE, который можно
    запускать на выполнение (в той же среде, в которой он был создан:
    версия DOS, конфигурация ПЭВМ).
                               ПРИНЦИПЫ РАБОТЫ
         Будучи запущенной, EXEB захватывает указанное в командной строке
    прерывание, запускает исследуемую задачу и начинает отсчитывать
    обращения к указанной в командной строке функции захваченного
    прерывания. Когда счетчик обращений станет равен 0, EXEB переносит
    образ исследуемой задачи из оперативной памяти на диск. При этом
    первой исполняемой командой задачи станет вызов указанного в командной
    строке EXEB прерывания (int ??). Схематично последовательность работы
    EXEB представлена на рис. 7.1 - 7.3.
         После запуска задача EXEB выдает на экран сообщение о готовности
    и ожидает нажатия любой клавиши. В этот момент пользователь при
    желании может вставить дискету в дисковод (при исследовании задачи,
    имеющей защиту по ключевой дискете).
                       ОСОБЕННОСТИ РАБОТЫ И НЕДОСТАТКИ
         Результирующая задача TASK.EXE не всегда способна воспринять
    командную строку, указанную в аргументе  при ее создании.
         TASK.EXE должна запускаться примерно в той же среде, где она была
    создана (объем свободной оперативной памяти). В случае какого-либо
    несоответствия на экран выдается сообщение об этом и TASK.EXE
    прекращает работу.
         Так как EXEB снимает в файл TASK.EXE практически всю
    оперативную память, то его объем может быть очень большим. Для
    уменьшения размера TASK.EXE можно использовать утилиту CHSIZE, формат
    запуска которой вы можете выяснить запустив ее без аргументов.

                        СХЕМА РАБОТЫ ПРОГРАММЫ EXEB.EXE
            ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
            і                                                             і
            і          ЗАХВАТ ПРЕРЫВАНИЯ И ЗАПУСК ЗАДАЧИ                  і
            і                                                             і
            і                               ЪД<ї                          і
            і                               і  і2                         і
            і ДВДДДДДДДДДДДДДДДДДДДДДДВДДДДДДВДБДДДДДДДДДДДї 1) Захват    і
            і  і     a.exe     int 10 івирус і EXEB        і  обработки поі
            і ДБДДДДДДДДДДДДДДДДДДДДДДБДДДДДДБДДДДДДДДДДДДДЩ  10 вектору. і
            і  ДД>ДДДДДДДДДДД>ДДДДДДДДДДДД>ДДДДДДДДЩ         2) Запуск    і
            і          10 вектор        1                    задачи a.exe.і
            і                                                             і
            і                      рис. 7.1                               і
            і                                                             і
            і                                                             і
            і                 ПЕРЕХВАТ УПРАВЛЕНИЯ                         і
            і                                                             і
            і ДВДДДДДДДДДДДДДДДДДДДДДДВДДДДДДВДДДДДДДДДДДДДї              і
            і  і     a.exe     int 10 івирус і EXEB        і              і
            і ДБДДДДДДДДДДДДДДДДДДВДДДБДДДДДДБДДДДДДДДДДДДДЩ              і
            і                     і                і                      і
            і                     АД>ДДДДД>ДДДДД>ДДЩ                      і
            і                                                             і
            і                      рис. 7.2                               і
            і                                                             і
            і                                                             і
            і          ЗАПИСЬ СОДЕРЖИМОГО ПАМЯТИ В ФАЙЛ                   і
            і                                                             і
            і  ДВДДДДДДДДДДДДДДДДДДДДДДВДДДДДДВДДДДДДДДДДДДДї             і
            і   і     a.exe     int 10 івирус і EXEB        і             і
            і  ДЕДДДДДДДДДДДДДДДДДВДДДДБДДДДДДБДДДДДДДДДДДДДЩ             і
            і   є                 є                                       і
            і   є                 є                                       і
            і   ИНННННННННННННННННКННННД> TASK.EXE (дискета)              і
            і                                                             і
            і                       рис. 7.3                              і
            АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
вверх