Введение
1. Структура защитных механизмов от НСК
1.2. Блок установки характеристик среды
1.3. Блок сравнения характеристик среды
1.4. Блок ответной реакции
2. Построение защиты от НСК
2.2. Защита текстовых файлов и изображений
2.3. Взаимодействие систем защиты с окружающей средой
2.4. Выбор средств защиты
2.5. Некоторые специальные средства защиты
3. Как снимать защиту
3.2. Специальный инструментарий
3.3. Универсальный Раздеватель
Заключение
Литература
Текст
                    ИСКУССТВО ЗАШИТЫ
И..РАЗВЕВАНИЯ”ПР0ГРАММ
ЦЕНТР ИЗУЧЕНИЯ
СОВЕТСКОГО РЫНКА
С0ВМАРК1Т

С. П. РАСТОРГУЕВ . Н. Н. ДМИТРИЕВСКИМ искусство ЗАШИТЫ И..РАЗАЕВАНИП" ПРОГРАММ МОСКВА 1991
В книге изложены основные подхода к защите программных модулей от несанкционированного копирования и метода преодоления таких средств защиты. Книга ориентирована на пользователей ПЭВМ, совместимых с IBM PC. ©Совмаркет, 1991 г.
На небе не бывает часа без ветра, На земле не бывает часа без пыли, Нет такого, чего бы не было, А люди на все способны. (восточная пословица) ВВЕДЕНИЕ Целью данной книги является систематизация основных подхо- дов к организации защиты программного обеспечения от несанкцио- нированного копирования и рассмотрение связанных с ними принци- пов снятия такой защиты. По сути, данная книга не что иное, как учебник для начинающего разработчика систем защиты и начинающе- го хэкера.
Вопросы защиты от несанкционированного копирования (ИСК) тесно увязаны с вопросами защиты от несанкционированного досту- па (НСД). Хотя НСД не всегда направлен на копирование информа- ции, большинство методов защиты от НСД можно применять для за- щиты от НСК. Далее специфические проблемы защиты от НСД обсуж- даться не будут. Общеметодические вопросы защиты от НСД подроб- нее изложены в [8]. Сегодня выполнять простейшие операции несанкционированного копирования на ПЭВМ типа IBM PC способен каждый. Бурное разви- тие этого процесса в нашей стране объясняется не только появле- нием приличной вычислительной техники и умением большинства пользователей работать с командой COPY, а в основном следующими факторами: слабостью законодательства по вопросам авторского права на программные продукты; наличием ставшей уже традиционной многолетней государст- венной политики несанкционированного копирования электронной вычислительной техники и программного обеспечения; невозможностью легального приобретения большинства прог- раммных продуктов из-за отсутствия конвертируемой валюты у программистов и пользователей; отсутствием в нашей стране ’’нормальных” рыночных отноше- ний; желанием продемонстрировать интеллектуальные способности; стремлением к обогащению. Глобально проблема защиты программного обеспечения от не- санкционированного копирования рождена самой сутью человеческой психологии и будет существовать до тех пор, пока программный продукт является товаром. Но до тех пор, пока есть необходи- мость защищать программный продукт, всегда будут появляться лю- да, готовые порой бескорыстно упорно искать средства для снятия защит, что на профессиональном жаргоне хэкера звучит, как ’’раз- деть программу”. При этом они будут не просто создавать средст- ва для снятия конкретных защит с конкретных пакетов, а, как за- ложено в природе человеческого духа, стремиться к-созданию уни- версального защитного механизма и универсального Раздевателя. Среда квалифицированных программистов до недавнего времени
считалось неприличным защищать свои программы. Зато люди, сни- мающие защиту, всегда почитались за мастеров и пользовались всеобщим уважением. Хотя к лицам, производящим операции несанк- ционированного изъятия других предметов человеческой деятель- ности (например, воры-домушники), отношение гораздо более прох- ладное. Что не удивительно, так как при копировании, даже не- санкционированном, от программы ничего не убудет, наоборот, произойдет своего рода ’’размножение”, в отличие, например, от похищенного телевизора. Кроме названных двух групп людей, жизнь которых постепенно превращается в бесконечную интеллектуальную игру на совершенст- во, существуют так называемые статисты. В данном случае их по- явление обусловлено тем, что вопросы защиты от ИСК до сих пор окружены ореолом таинственности и излишней секретности. Это привело к созданию во многих государственных организациях соот- ветствующих подразделений, которые в условиях отсутствия конку- ренции безбедно существуют за счет обобщения зарубежной и со- ветской информации. Таким образом, мы попытались очертить круг наших потенци- альных читателей. Но вернемся к нашим программам. Средства защиты программного обеспечения можно разделить на юридические, административно-организационные, административ- но-экономические, аппаратные и программные. Юридические средства защиты программного обеспечения в за- падных странах подробно изложены в [2, 3, 4, 6, 9, 21], а то же самое применительно к СССР, и в основном с ориентацией на свет- лое будущее, - в [1]. Кратко ситуацию с юридическими средствами защиты программного обеспечения можно выразить так: в развитых капиталистических странах есть соответствующее законодательство и есть проблемы, в СССР почти нет соответствующего законода- тельства и почти нет проблем. Косвенным свидетельством такого положения может служить простой эксперимент: поинтересуйтесь у пользователей персональных компьютеров, какие программы, с ко- торыми они работают, куплены. В большинстве случаев вместо от- вета собеседник покрутит пальцем у виска. Юридические и административно-организационные меры защиты здесь рассматриваться не будут. О последних достаточно подробно рассказано в [14, 15, 20].
Административно-экономические меры, проводимые фирмами-из- готовителями программного обеспечения, предусматривают всячес- кое стимулирование легального приобретения программного обеспе- чения. Такое стимулирование проводится только для зарегистриро- ванных пользователей, легально покупающих программные продукты, и позволяет значительно экономить средства при использовании программного продукта, а иногда даже делает невыгодным неле- гальное копирование. Возможно использование следующих мер для зарегистрированных пользователей [22]: периодическое получение документации, специальных журна- лов; регулярное сообщение об изменениях и обнаруженных ошибках; проведение семинаров и курсов по обучению использования программного продукта; возможность получения оперативной консультации; предоставление скидки при покупке следующей версии. Аппаратные средства защиты будут упоминаться только в их связи с программными средствами. В некоторых публикациях [19] обсуждается разработка и про- паганда моральных норм, регулирующих копирование и использова- ние программных продуктов. Методы, описанные в данной книге, ориентированы в первую очередь на ПЭВМ, совместимые с IBM PC. Но авторы надеются, что работа будет полезна пользователям других ПЭВМ и операционных систем, отличных от DOS. Для всех операционных систем отметим важную особенность; при наличии привилегированного режима защи- та облегчается. Особенности защиты программ для компьютеров типа ’’Макин- тош” приведены в [51. Много интересных приемов программирова- ния, которые можно использовать для установки и снятия защиты в компьютерах ZX Spectrum, изложено в [23]. Книга состоит из введения, трех глав и заключения. В пер- вой главе анализируются составные части систем защиты. Во вто- рой - даются рекомендации по созданию собственной или выбору готовой системы защиты. В третьей главе описываются способы преодоления существующих систем защиты. Примеры, приводимые в книге имеют сквозную нумерацию в пределах главы. Подробное исследование только одного защитного механизма,
спроектированного профессионалом, по трудоемкости и сложности не уступает разработке собственной системы защиты. В мире на сегодняшний день насчитывается более сотни различных пакетов подобного класса, а объять необъятное возможно только вне вре- менных рамок, ограничивающих наше бытие здесь. Именно поэтому авторы не думают, что данная работа свободна от недостатков, и все замечания будут с благодарностью приняты.
Глава 1. СТРУКТУРА ЗАЩИТНЫХ МЕХАНИЗМОВ ОТ НСК Вопросы защиты имущества были всегда важными вопросами для человечества. И на протяжении всей своей истории человек что-то защищал от похитителей. Поэтому при изложении материала и фор- мулировке задач защиты программного обеспечения (ПО) от несанк- ционированного копирования, авторы решили придерживаться древ- него принципа: "Фунт аналогии стоит тонны пота". Как весь комплекс мероприятий защиты, так и отдельные ее элементы испытаны природой на всех уровнях развития: в неживой природе, на биологическом уровне и в человеческом обществе. Каким образом это происходит? Система взаимодействующих элементов защищена от изъятия ее из интегрирующей системы бла- годаря наличию разнообразных взаимодействий с внешними элемен- тами на физическом, химическом, биологическом уровнях. Нормаль- ного функционирования изъятой системы в чужой для нее интегри- рующей среде можно добиться только исключительно точным перене- сением вместе с ней и окружающих взаимовлияющих внешних сил. Программа, пересаженная в неродную среду, должна быть отторгнута, как отторгаются от организма пересаженные чужие ткани. При этом процесс отторжения может вызвать необратимые изменения и в самом "организме" ПЭВМ. Для реализации механизма отторжения необходимо, чтобы программа имела возможность предварительно "привыкнуть" к своей среде, а взаимодействие ее с чужой средой приводило к мгновенной гибели ее самой, окружающей среды или носило на себе следы постепенного разрушения. Механизм защиты программного обеспечения, как подсказывает опыт работы в данной области, может включать следующие компо- ненты: 1. Блок защиты от Раздевателя (БЗОР). 2. Блок установки характеристик среды (БУХС). 3. Блок сравнения характеристик среды (БСХС). 4. Блок ответной реакции (БОР).
1.1. Блок защиты от Раздевателя Раздеватель - комплекс программных средств, ориентирован- ных на исследование защищенного программного продукта. Возможно, этот термин является не очень удачным. В данном случае, мы отдаем дань существующей жаргонной терминологии профессиональных хэкеров. Главная функция ВЗОР заключается в том, чтобы обеспечить надежную защиту от профессиональных любителей "раздевать" чужие программы, т.е. снимать защиту с пакетов программ. Ниже изложе- ны некоторые способы, которые направлены на выявление и ликви- дацию непредусмотренных внешних воздействий на защищаемую прог- рамму, характерных для средств снятий защиты. Для снятия защиты используется комбинация двух основных методов: статический и динамический. Статические методы предусматривают анализ текстов защищен- ных программ в естественном и/или преобразованном виде. Динамические методы предусматривают слежение за выполнением программы с помощью специальных средств. Обработка результатов слежения может быть частично или полностью автоматизирована. 1.1.1. Противодействие статическим методам защиты 1. Шифрование. Модификация и шифрование программного кода - типичные способы внесения особенностей в программную среду. Очень эффективно изменение способа шифрования в ходе работы программы. В качестве примера приведем программу CRYPT.EXE (v.1.3 MamSoft 1989), которая использует алгоритм US Federal DES (Data Encryption Standard). Вообще, тема шифрования и де- шифрования неисчерпаема, как атом, и мы отошлем интересующихся к специальным публикациям, например 110, 11). 2. Включение в тело программы переходов по динамически из- меняемым адресам и прерываниям, а также самогенерирующихся ко-
манд (например, команд, полученных с помощью сложения и вычита- ния). 3. Скрытый переход. Вместо команды безусловного перехода (JMP) используется возврат из подпрограммы (RET). Предваритель- но в стек записывается адрес перехода, который в процессе рабо- ты программы модифицируется непосредственно в стеке. 4. Прием ’’Бабы Яги”. Стек определяется непосредственно в области исполняемых команд, что приводит к затиранию команд при работе со стеком. Этот способ хорош, когда не требуется повтор- ное исполнение программного кода. Таким же способом можно гене- рировать исполняемые команды впереди вычислительного процесса. 5. Включение в тело программы, если ее размер недостаточно велик, ’’пустышек”. Под ’’пустышкой” понимается модуль на который имитируется передача управления, но реально никогда не осущест- вляется. Этот модуль содержит большое количество команд, не имеющих никакого отношения к логике работы программы. Но ’’не- нужность” этих команд не должна быть очевидна потенциальному хэкеру. Например, ’’пустышка” может содержать команды, присущие определенным методам защиты, это команды типа int 21 h, Int 13h co специфическими функциями и т.д. Потрошитель программы обязательно обратит внимание на эти команды, начнет разбираться с ними и тем самым потеряет драгоценное время. 6. Изменение начала защищаемой программы таким образом, чтобы стандартный дизассемблер не смог ее правильно дизассемб- лировать. Например, такие пакеты защиты, как Hota и Copylock, внедряя защитный механизм в защищаемый файл, полностью модифи- цируют исходный заголовок ЕХЕ-файла. Ниже приведен пример заго- ловка ЕХЕ-файла до защиты и с защитой. В данном случае уже мож- но говорить не о внедрении защитного механизма в задачу, а нао- борот, о включении исходной защищаемой задачи в модуль защитно- го механизма (пример 1.1).
Пример 1.1 Исходный текст программ S2.EXE sseg segment stack db 256 dup (?) sseg ends dseg segment ert db "привет $",0 dam dti) 0 dseg ends cseg segment assume cs:cseg,ss:sseg,ds:dseg z proc far push ds mov ax,0 push ax mov bx.dseg mov ds,bx mov dh,09h ; Выдача на экран строки mov dx,offset ert ; "привет" tnt 21h ; ret cseg ends end z File: S2..EXE Незащищенная версия Заголовок ООО 4D 5А 2В 00 02 00 01 00 20 00 11 00 FF FF 03 00 010 00 01 83 28 00 00 00 00 1Е 00 00 00 01 00 06 00 020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Исполняемый код 1F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 200 1Е В8 00 00 50 ВВ 02 00 8Е DB В4 09 ВА 00 00 CD 210 21 СВ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 220 AF ЕО А8 А2 А5 Е2 20 24 00 00 00
File: S2.EXE Защищенная версия Заголовок ООО 4D 5А F0 00 ОВ 00 00 00 20 00 11 00 FF FF 04 00 010 AD 14 83 28 20 00 04 00 1Е 00 00 00 01 00 06 00 020 00 00 00 00 00 00 00 00 00 00 00 Исполняемый код 00 00 00 00 00 1F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 200 ЕЗ В8 00 00 50 ВВ 02 00 8Е DB В4 09 ВА 00 00 CD 210 21 СВ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 220 AF ЕО А8 А2 А5 Е2 20 24 00 00 00 4Е 4Е 4Е 4Е 4Е 230 06 00 00 00 4Е 4Е 4Е 4Е 4Е 4Е 4Е 4Е 4Е 4Е 4Е 4Е 240 В4 ВА 00 FF дальше идет FD FF FF FF 16 FF 00 00 00 FC 00 Е2 код защитного механизма размером около 5 Кбайт Внедрение защитного механизма привело к следующей модифи- кации заголовка программы (для пакета Copylock): Назначение поля Было Стало "Подпись" файла 4D 5А 4D 5А Длина неполной последней страницы 2В 00 F0 00 Длина образа в 512 байтовых страницах 02 00 ОВ 00 Число элементов в таблице перемещения 01 00 00 00 Длина заголовка в параграфах 20 00 20 00 Минимум памяти за концом программы 11 00 11 00 Максимум памяти за концом программы FF FF FF FF Сегментное смещение сегмента стека (SS) 03 00 04 00 Значение указателя стека при запуске (SP) 00 01 AD 14 Контрольная сумма 83 28 83 28 Значение регистра IP 00 00 20 00 Сегментное смещение кодового сегмента (CS) 00 00 04 00 Смещение в файле первого элемента перемещения 1Е 00 1Е 00 Номер оверлея 00 00 00 00 Таблица перемещения 01 00 06 00 01 00 06 00
Как видно из таблицы, Copylock изменяет такие параметры заголовка, как число элементов заголовка, адрес стека, адрес первой исполняемой команды. В результате дизассемблер относит к области стека первые исполняемые команды, так как адрес стека SS:SP - 0004:0003, а адрес первой исполняемой команды CS:IP - 0004:0020. 1.1.2. Противодействие динамическим методам защиты 1. Периодический подсчет контрольной суммы, занимаемой образом задачи области оперативной памяти, в процессе выполнения. Это позволяет: заметить изменения, внесенные в загрузочный модуль; в случае, если программу пытаются ’’раздеть”, выявить конт- рольные точки, установленные отладчиком. 2. Проверка количества свободной памяти и сравнения с тем объемом, к которому задача привыкла или Вы ее приучили. Это действие позволит застраховаться от слишком грубой слежки за Вашей программой с помощью резидентных модулей. 3. Проверка содержимого незадействованных для решения за- щищаемой программы областей памяти, которые не попадают под об- щее распределение оперативной памяти, доступной для программис- та, что позволяет добиться "монопольного” режима работы прог- раммы . 4. Проверка содержимого векторов прерываний (особенно 13Г1 и 21 h) на наличие тех значений, к которым задача приучена. Иногда полезным бывает сравнение первых команд операционной системы, отрабатывающих эти прерывания, с теми командами, кото- рые там должны быть. Вместе с предварительной очисткой опера- тивной памяти проверка векторов прерываний и их принудительное восстановление позволяет избавиться от большинства присутствую- щих в памяти резидентных программ. 5. Переустановка векторов прерываний. Содержимое некоторых
векторов прерываний (например, 13Г1 и 21 h; копируется в область свободных векторов. Соответственно изменяются и обращения к прерываниям. При этом слежение за известными векторами не даст желаемого результата. Например, самыми первыми исполняемыми ко- мандами программы копируется содержимое вектора 21 h (4 байта) в вектор 60h, а вместо команд Int 21h в программе везде записыва- ется команда Int 60Н. В результате в явном виде в тексте Вашей программы нет ни одной команды работы с прерыванием 21п. Очень просто и изящно. 6. Постоянное чередование команд разрешения и запрещения прерывания, что затрудняет установку отладчиком контрольных то- чек. 7. Контроль времени выполнения отдельных частей программы, что позволяет выявить ’’остановы” в теле исполняемого модуля. Многие перечисленные защитные средства могут быть реализо- ваны исключительно на языке Ассемблер. Одна из основных отличи- тельных особенностей этого языка заключается в том, что для не- го не существует ограничений в области работы со стеком, регис- трами, памятью, портами ввода/вывода и т.д. Ниже приводятся наиболее красивые, на наш взгляд, приемы защиты программного кода, например прием ’’Бабы Яги”. Суть: Стек определяется непосредственно в области исполня- емых команд, что приводит к затиранию команд при работе со сте- ком. Программа как бы заметает за собой все следы. В данном случае важно, чтобы именно в тот момент, когда верхушка стека приблизится к исполняемому коду, выполнить JMP и уйти от прес- ледования. Этот прием очень хорош, если не требуется возвра- щаться обратно. Ниже предлагается пример приема ’’Бабы Яги”: слева - содер- жимое экрана при работе с отладчиком (на экране дизассемблерный текст программы) до выполнения команды по адресу cs:000а; спра- ва - содержимое экрана при работе с TD (та же программа) после выполнения команды по адресу cs:000d.
Пример 1.2 До переустановления стека После переустановления стека cs:OOOO 1e push ds CS:OOO1 b80000 mov ax.O cs:0004 50 push ax cs:0005 Oe push cs cs:0006 17 pop ss cs:OOOT bbOaOO mov bx,0a cs:000a 8be3 mov sp.bx cs:000c 50 push ax cs:000d 52 push dx cs:000e bbbe4b mov bx,4bbe cs:0011 8edb mov ds,bx cs:0013 b409 mov ah,9h cs:0015 baOOOO mov dx,0 cs:0018 cd21 Int 21h cs:OOOO 1100 adc [bx+sl),ax cs:0002 bc4b02 mov sp,024b cs:0005-130000 rep add [bx+sl),al cs:0008 0000 add [bx+slJ,al cs:000a 8be3 mov sp.bx cs:000c 50 push ax cs:000d 52 push dx cs:000e bbbe4b mov bx,4bbe cs:0011 8edb mov ds,bx cs:0013 b4O9 mov ah,9h cs:0015 baOOOO mov dx,0 cs:0018 cd21 Int 21h Следующий пример показывает как можно использовать этот же прием для генерации исполняемого кода впереди вычислительного процесса, т.е. как можно бежать впереди паровоза. Пример 1.3 sseg segment stack db 256 dup (?) sseg ends dseg segment ert db "привет $",0 dann dm О dseg ends cseg segment assume cs:cseg,ss:sseg,ds:dseg
z proc far push ds mov ax,0 push ax mov bx.dseg mov ds,bx пор mov ah,O9h mov dx,offset ert met: int 21 h mov bx,offset met push cs pop ss mov dam.sp mov sp,48h ; Выдача на экран строки * ; "привет”. » ; Выбор области для записи в стек. - ; Переустановка стека. ; Сохранение стека. mov ex,4 wostD:push cs:[bxJ sub bx,2 loop wosw Jmp pl ; Заполнение стека. ; При этол ниже по тексту ; создается ассемблерный код. ; Переход на вновь созданный код. db 20 dup (90h)- p1:nop db 10 dup (90h) nop mov bx.sseg mov ss.bx mov sp.dann ret cseg ends end z ; Восстановление стека. При использовании данного приема самое главное - не забы- вать восстанавливать стек перед выходом из подпрограммы или программы. Кроме того, при работе со стеком необходимо всегда иметь ввиду одну особенность: 20П байт стека всегда перемещают-
ся вверх при выполнении команды push. Поэтому при работе с ко- мандой push или при изменении содержимого стековых регистров следует специально выделять не менее 20h байт. Пример 1.4 Ниже приводится текст программы, которая в процессе выпол- нения генерирует в области данных исполняемые команды, ответст- венные за выдачу информации на экран дисплея. После создания команд mov ah,09h int 21h ret программа осуществляет переход на первую созданную команду, используя прием "возврата из подпрограммы”. Для этого предварительно в стек заносятся соответствующие адреса. sseg segment stack db 256 dup (?) sseg ends dseg segment er3 db "Rastorguew Sergei$”,0 er4 db "prtwet$",0 er5 db 62h,0a8h,5dh,0adh,5ch,0 dseg ends cseg segment assume cs:cseg,ss:sseg,ds:dseg z proc far mov push ds mov ax,0 push ax mov bx.dseg mov ds.bx ex, 5 ; Генерация команд. mov si,0 » a: mov dl,er5lsi) ; Суммирование двух строк
add er3tstl,al tnc st loop a mov Ox, offset er3 mov dx,offset er4 push ds push bx ret cseg ends end z Полученный результат будет: mov ah,09h int 21h ret Адрес строки, выводимой на экран. Подготовка стека для перехода. Переход в область данных на егЗ. Просматривая ЕХЕ-файл его владелец увидит следующее: 200 1Е В8 00 00 50 ВВ 03 00 8Е DB В9 05 00 BE 00 00 210 8А 84 1В 00 00 84 00 00 46 Е2 F5 ВВ 00 00 ВА 13 220 00 1Е 53 СВ В4 09 CD 21 СВ 00 00 00 00 00 00 00 230 52 61 73 74 6F 72 67 75 65 77 20 53 65 72 67 65 240 69 24 00 70 72 69 77 65 74 24 00 62 А8 5А AD 5С Будучи запущенной, данная программа выдает на экран слово "prlwet" и завершает работу. Однако если взглянуть на ее диз'ассемблерный текст, то ко- манд для работы с экраном там увидеть нельзя. При этом попытка отредактировать авторскую отметку приводит к непредсказуемым изменениям в наборе исполняемых команд. 1.2. Блок установки характеристик среды БУХС ответственен за, грубо говоря, "знакомство” защищае- мой программы с окружающей средой. Инициатором "знакомства" мо- жет выступать как сама защищаемая программа, так и специальный Установщик. Установщик заносит в тело защищаемого файла снятые им характеристики программно-аппаратной среды или, наоборот, подгоняет окружающую среду, например DOS, под защищаемую прог- рамму, если она изначально не способна функционировать в нор-
мальном окружении. Чем может быть охарактеризована среда, или к чему способна "привыкнуть” программа? Мы считаем, что такими характеристиками могут быть особенности: аппаратной среды ЭВМ; программной среды; психофизиологические характеристики оператора ЭВМ. Если среда недостаточно индивидуальна, то ее можно допол- нительно индивидуализировать. Перефразируя известное изречение Б.Шоу, можно сказать: "Разумная программа сама приспосабливает себя к миру, а нера- зумная пытается приспособить мир для себя", поэтому наличие именно "неразумных" программ является одной из причин постоян- ного совершенствования операционных систем. 1.2.1. Особенности аппаратной среды В данном разделе речь идет о таких характеристиках ПЭВМ, которые пользователь не может изменять программным путем. Это и архитектура ПЭВМ, и особенности BIOS, и дополнительные спецуст- ройства и т.д. 1. Архитектура ПЭВМ: наличие устройств А:, В:, С:, D:, Е:, тип видеоадаптера (EGA, CGA, VGA), объем оперативной памяти и т.д. Программа может получить доступ к оборудованию следующими способами. Она может обратиться к любому из портов ввода /выво- да, соответствующему присоединенному оборудованию или к любому адресу оперативной памяти. В [18] подробно рассмотрены все су- ществующие доступы к данной информации. Здесь мы приведем ос- новные адреса портов с кратким их описанием. Микросхема интерфейса с периферией Intel 8255, ее функции: информирует об установке переключателей на системной пла- те; принимает для компьютера ввод с клавиатуры; управляет рядом периферийных устройств.
Регистры микросхемы Intel 8255 Порт А (60h) - только чтение Когда в порту В 7-й бит равен 0, то биты 0-7 PC, XT, PCjr, АТ есть 8-битные скан-коды с клавиатуры. Когда в порту В 7-й бит равен 1, то для PC в порту А: Биты Компьютер Значение 0 PC 0 - нет накопителей на дискетах 1 PC Не используется 2-3 PC Число банков памяти на системной плате 4-5 PC Тип дисплея (11 - монохромный, 10 - цветной 80*25, 01 - цветной 40*25) 6-7 PC Число накопителей на дискетах Порт В (61h) - чтение и запись Биты Компьютер Значение 0 PC,XT,PCJr Управляет каналом 2 таймера 8253 1 PC,XT,PCjr Вывод на динамик 2 PC PCjr Выбор содержимого порта С 1 - символьный режим, 0 - графический 3 PC, PCjr XT 1 - кассетный мотор выключен Выбор содержимого порта С 4 PC, XT PCjr 0 - разрешение ОЗУ 1 - запрет динамика и мотора кассеты 5 PC, XT 0 - разрешение ошибок щелей расширения 6 PC, XT 1 - разрешение часов клавиатуры 5-6 PCjr Выбор динамика (00 - 8253, 01 - кассета, 10 - ввод/вывод, 11 - микросхема 76496) 7 PC PC, XT Выбор содержимого порта А Подтверждение клавиатуры
Порт С (62h) - только чтение Когда в порту В 2-й бит равен 1 для PC или 3-й бит равен 1 для XT, то: Биты Компьютер Значение 0 PCjr 1 - введенный символ потерян 1 XT 1 - есть математический сопроцессор PCjr Есть карта модема 2 PCjr Есть карта НГМД 2-3 XT Число банков памяти на системной плате 3 PCjr 0 - 128К памяти 4 PC, PCjr Ввод с кассеты XT Не используется 5 PC,XT,PCJr Выход канала 2 8253 6 PC, XT 1 - проверка ошибок щелей расширения PCjr 1 - данные с клавиатуры 7 PC, XT 1 - контроль ошибок четности PCjr 0 - кабель клавиатуры подсоединен Когда в порту В 2-й бит равен 0 для PC или 3-й бит равен О для XT, то: Биты Компьютер Значение 0-1 XT Тип дисплея (11 - монохромный, 10 - цветной 80*25, 01 - цветной 40*25) 2-3 XT Число накопителей НГМД (00 - 1 и т.д.) 4-7 PC, XT . То же, что и с установленными битами Ноль в одном из битов регистра соответствует установке переключателя "off". ПЭВМ, совместимая с АТ, согласно [18] хранит информацию о конфигурации в микросхеме МС146818 фирмы ’’Motorola”, вместе с часами реального времени. Микросхема имеет 64 регистра, прону-
мерованных от 00 до 3Fh. Для чтения регистра нужно сначала пос- лать его номер в порт с адресом 70h, а затем прочитать его че- рез порт 71 h. Номер регистра Использование Oh Тип накопителя НГМД 2h Тип накопителя фиксированного диска 4h Периферия 15h Память на системной плате (младший байт) 6h Память на системной плате (старший байт) 7h Общая память (младший байт) 8h Общая память (старший байт) Oh Память сверх 1 Мбайт (младший байт) 1h Память сверх 1 Мбайт (старший байт) Информация о типе IBM PC содержится во втором с конца бай- те памяти по адресу FFFFE в ROM-BIOS. Компьютер Код PC FF XT FE PCjr FD AT FC Кроме того, список оборудования на ПЭВМ может быть получен программой либо в регистре АХ после выполнения прерывания Uh, либо непосредственно по адресу 0:0410. Подробно содержимое двух байтов "списка оборудования" опи- сано в Электронном справочнике по IBM-PC. Для удобства исполь- зования данной книги в практической работе, мы просто перечис- лим основное содержание названных байтов:
Бит Функциональное назначение 0 Нет дисковых устройств 1 8087 сопроцессор 2-3 Объем оперативной памяти 4-5 Начальный активный режим дисплея 6-7 Всего дисководов 8 DMA присутствует 9-11 Число портов RS232 12 Присутствие игрового адаптера 13 Последовательный принтер 14-15 Число принтеров При использовании этой информации для целей защиты необхо- димо либо установщиком защищаемого пакета, либо самим пакетом при первом запуске запомнить в теле загрузочного файла содержи- мое слова по адресу 0:410, а затем просто осуществлять сравне- ние. И как только список оборудования перестает соответствовать первоначальному, программа считает, что ее украли. Самыми большими недостатками данного подхода являются следующие: а) Все ПЭВМ, имеющие точно такой же список оборудования, программа считает "родными". б) В случае изменения конфигурации на родной ПЭВМ програм- ма, если это предусмотрено, кончает самоубийством, несмотря на то что факт несанкционированного копирования отсутствовал. 2. Особенности BIOS: контрольная сумма и дата создания. Начиная с адреса 1000:еО5Ь и до адреса 1000:1111 памяти ПЭВМ размещен ROM BIOS. По адресу 1000:f115 обычно указывается дата создания BIOS. Как правило у всех последних ПЭВМ типа XT по указанным ад- ресам стоит одно и то же значение. Поэтому целесообразно осу- ществлять одновременную проверку контрольных сумм всех имеющих- ся ПЗУ, в том числе BIOS винчестера, видеотерминала и т.д. Данный способ не позволяет защищать программное обеспече- ние в пределах серии.
3. Динамические характеристики различных частей компьютера и их соотношение между собой. Многие аналогичные электромехани- ческие части различных компьютеров (диски, ленты, печатающие устройства и т.п.) одной серии обладают различными временными характеристиками. Можно измерять эти времена и использовать как особенность аппаратной среды. Основные трудности при использо- вании динамических характеристик заключаются в их зависимости от температуры, времени работы и т.д., что делает затруднитель- ным получение достаточно стабильных характеристик, индивидуаль- ных для каждого устройства. Авторам, например, не удалось соз- дать сколь либо приличного защитного механизма, используя дина- мические характеристики электромеханических частей ПЭВМ. Поэто- му данный вариант построения БУХС, на наш взгляд, носит чисто теоретический характер. 4. Специально модифицированный BIOS. Самый простой способ модификации BIOS - это изменить одну или две ячейки. Для этого достаточно дизассемблировать BIOS, лучше всего дизассемблером Souser (SR), который специально реализует функцию дизассембли- рования BIOS. В полученном листинге надо выбрать понравившиеся Вам байты, содержимое которых не оказывает влияния на работу ПЭВМ. В конце ROM BIOS есть не используемые участки. После это- го требуется заново прошить соответствующие ПЗУ, и Ваша ПЭВМ станет уникальной. Теперь осталось вложить знания об ее уни- кальности в защищаемую программу. Делается это очень просто. Достаточно в программе зафиксировать соответствующие коды, про- читать выбранные адреса из ПЗУ и осуществить сравнение. Например. Перепрограммировать байт по адресу f000:f£4c на ”с" (первоначально там был 0). Существует более изощренный вариант модификации BIOS. Нап- ример, можно изменить обработку прерывания 13h или любого дру- гого, дополнив обработку новой специальной функцией. А затем использовать эту специальную функцию в защищаемой программе. В частности, в качестве одной из первых команд, ответственных за обработку прерывания 1311, поставить команду, которая в случае если значение регистра АН (в нем обычно указывается номер функ- ции) больше максимального, то определить его заново заранее
выбранным номером функции. А этот выбранный номер функции в пользовательской защищаемой программе необходимо специальным Модификатором (Посттранслятором) исправить на любой номер, больший максимального. В этом случае на ПЭВМ с модифицированным BIOS будет работать вся стандартная математика, так как в ней отсутствуют обращения к прерыванию I3h с номерами функций боль- ше максимального. А Ваша программа будет работать только на данном компьютере, потому что больше ни одна ПЭВМ не сможет правильно отработать ввод/вывод Вашей программы. Данный способ защиты хорош, если Вы сами устанавливаете свой пакет на ПЭВМ заказчика. Дело в том, что Вам придется под наблюдением заказчика вскрыть корпус его компьютера и на его глазах заменить в его ПЭВМ микросхему ПЗУ. Нам представляется, что, не привлекая внимания заказчика, проделать подобную опера- цию будет довольно сложно. Именно сложность установки снижает конкурентноспособность данного способа защиты программного обеспечения и является главным недостатком, не считая необходи- мости прошивки ПЗУ. 5. Специальные устройства. Для усиления защиты часто ис- пользуются специальные устройства: логические микросхемы, до- полнительные ПЗУ, подключаемые к ЭВМ через параллельный или последовательный интерфейс (прозрачные для всех кодов, кроме заранее определенных управляющих последовательностей). В этом случае встает вопрос защиты самого специального ус- тройства от копирования. Наиболее простой - заливка его смолой (например, эпоксидной) - далеко не всегда решает эту проблему, потому что могут найтись любители аккуратно поработать с фре- зой, срезая смолу слой за слоем. Наиболее популярным устройством в данном случае является аппаратный интерфейс с пользовательскими пакетами (АИПП) для защиты программного обеспечения от несанкционированного копиро- вания. Интерфейсный блок имеет размеры 8*3*1 см и предназначен для подключения на параллельный порт. Этим путем пошли разра- ботчики защиты для пакета AUTOCAD 10 (русифицированный). АИПП обеспечивает "прозрачную" передачу всех данных кроме ключевой последовательности, в ответ на которую АИПП отвечает специальным байтом.
Каждый АИПП или серия АИПП отзывается на свою ключевую последовательность байт. Пользователь специально настраивает свой пакет программ на работу с АИПП. В результате пакет будет нормально функциониро- вать только при наличии соответствующего АИПП. Наличие АИПП упрощает процесс поставки пакета заказчику. При продаже пакета, особенно если поставка осуществляется по почте, пользователь не должен заботиться о количестве устано- вок. Тираж пакета определяется числом поставляемых АИПП. Попытка вскрытия АИПП приводит к уничтожению устройства. Массового применения данный способ к настоящему времени не получил по двум причинам: а) сложность запитать отечественные недорогие микросхемы, не вскрывая корпус ПЭВМ; б) необходимость разработки качественного блока защиты от Раздевателя. В данном случае это очень важно, потому что понять логику работы АИПП можно разобравшись с программой, т.е. с той ее частью, которая ответственна за интерфейс с АИПП.
6. Наличие на МД или в ПЭВМ специально созданных дефектов. Для этого "грубые" люди, как правило, царапают дискету или вы- резают в ней отверстия, более "интеллигентные" портят дискеты лазером. Затем запоминают в программе номера дефектных секторов и из защищенной программы пытаются осуществлять запись в дефек- тные сектора, проверяя коды завершения. Носитель без дефекта (несанкционированная копия) позволяет осуществить нормальную запись в дефектное место, а носитель с дефектом этого не позво- лит. Таким путем пошли разработчики защиты для пакета KD4. Недостаток данного способа защиты в том, что совсем нес- ложно сделать резидентную программу, которая будет перехваты- вать все обращения к устройству и возвращать в защищенный пакет все те коды завершения, которые тот желает получить. Поэтому наиболее распространенный способ снятия такой защиты - программное эмулирование особенностей диска. Недостаток можно ликвидировать, если обращения к внешнему устройству адресовать напрямую, а не через DOS. Указанные мероприятия по защите могут быть выполнены толь- ко для съемных дисков. Съемные диски позволяют осуществить дос- туп к их магнитной поверхности. Это дает возможность придавать дискам индивидуальные свойства (делая различные физические от- метки на носителе). С другой стороны, можно сделать очень точ- ную копию диска с воспроизведением всех особенностей оригинала (физические повреждения можно воспроизвести с помощью лазера, но все это, конечно, требует специального оборудования). Поэто- му теоретически вполне вероятно получить адекватную копию съем- ного диска, не разбираясь в системе его защиты. Несъемные диски (винчестеры) исключают доступ к магнитной поверхности со стороны пользователя. Операции с носителем про- изводятся через устройства, объединенные с диском в одном паке- те. Поэтому для снятия адекватной копии необходимо разбираться с системой защиты. Со снижением цен на винчестеры возможно рас- пространение ценных программных продуктов на отдельных винчес- терах, если будет обеспечена их установка в компьютер.
1.2.2. Особенности программной среды В разделе речь идет о таких особенностях ПЭВМ, которые создаются исключительно программными способами. Это - место физического размещения на диске файла, спецотметки в файлах, модификация DOS, спецформатирование дискеты и т.д. 1. Место физического размещения защищаемого файла. Поле DOSWRK FCB, как утверждается в [16], отводится для резерва. Фактически после открытия файла, система размещает в этом поле адрес физического расположения секторов файла на диске. Таким образом, для каждого файла содержимое этого поля является уникальным. Любое копирование файла приводит к изменению адреса физического расположения секторов файла. Вероятность копирования файла с одного диска на другой с сохранением указанного адреса ничтожно мала, если речь идет о винчестере. Возможно успешное копирование образа диска посредством магнитной ленты. Этот же способ применим при защите описанной в пп. 2 и 3. Недостаток - необходимость копирования всего диска. Диск, на который производится копирование, должен быть аналоги- чен диску откуда происходит копирование. Возможный порядок установки защиты. В начало программы добавляется оператор вызова подпрограммы, ответственной за защиту. Для надежности можно сделать несколько модификаций подпрограммы под разными именами и несколько вызовов. Единственным параметром подпрограммы является имя защищаемого файла (программы). Подпрограмма в области данных должна .содержать следующие поля (пример 1.6): поле шифра (обозначим PSCH), размерность N байт (величина N на усмотрение пользователя), содержимое поля - комбинация N любых символов; поле первого запуска (PZ), размерность - слово, первона- чальное содержимое - 0; блок описания файла (FCB). Наименование полей FCB взяты из [16]. Алгоритм работы подпрограммы: Шаг 1. В блоке описания файла FCB установить поля FNAME и
ENAME, в которых содержится имя файла (программы). Значение данного параметра передается в подпрограмму из защищаемой прог- раммы. Шаг 2. Открыть файл. Шаг 3. Проверить содержимое поля PZ, если 0, то переход к шагу 7. Шаг 4. Сравнить содержимое полей PSRED и поля DOSWRK из FCB, если не совпало, то переход к шагу 6. Шаг 5. Закрыть файл. Выйти из подпрограммы. Шаг 6. Выполнить ’’ответные” действия. Уничтожить информа- цию на магнитном носителе или уничтожить данную программу на носителе и перейти к шагу 5. Шаг 7. Читать файл с магнитного носителя, отыскивая в нем комбинацию из N символов, заданных в поле шифра PSCH. Если не найдено, перейти к шагу 6. Шаг 8. После PSCH находятся поля PZ и PSRED. Установить PZ в 1. В поле PSRED переписать содержимое поля DOSWRK из FCB. Шаг 9. Записать в файл отредактированные данные. Перейти к шагу 5. Пример организации защиты на языке Ассемблер с самогенери- рующимся кодом: Пример 1.5 dseg segment иии db "управление вернулось $",0 ; Парольная летка, even ; Для поиска те st ох. mestox chi) 0 ; Место физического расположения файла, ; которое было в лолент установки пакета. imJ2 db 0 ; FCB db "zap " ; Иля файла. db "exe" ; Расширение. db 15 dup (?) mestoy chi) ? ; Место физического расположения файла. db 9 dup (?) db 20 dup (?) dseg ends
cseg segment assume cs:cseg,ds:dseg,es:dseg z proc far push ds mov ax,0 push ax mov bxtdseg mov dstbx » mov ahtOfh mov dr,offset tmJ2 int 21h ; Открытие файла. » mov ax.mestox ; Место физического расположения файла sub ax.mestoy » push ds ; Установка адреса для генерации push cs ; команды. pop ds mov bx,offset open ; Генерация, команды, mov ds:[bx],ax mov al.Ocdh ; INT add ds:[bx),at add bx,1 ; следующий адрес mov al,21h add ds:[bx],al ; 21h --------------------------------- Итого: INT 21 ; Генерация осуществляется правильно, если местоположение ; файла на МД то же, что было при установке пакета. ; В противном случае создается непредсказуемая команда. pop ds mov dx,offset tmj2 mov ah,1Oh int 21h t ; Закрыть файл. » push cs pop ds »
mov ах,offset prod mov ah,25h mov al,18h du> 0 орет Установка вектора для обработки прерывания 18h. ret prod: push ds ; Программа обработки прерывания I8h. push bx ; Сюда процесс попадает только тогда, push ах ; когда правильно будет сгенерирована push bp ; команда Int 21 h push dx ; в месте установки вектора прерывания, push es push ex ; Блок обработки ! ; прерывания 18h ! аа: pop ex pop es pop dx pop bp pop ax pop bx pop ds tret fin: ret cseg ends end z 2. Порядок физического размещения файлов защищаемого паке- та на магнитном диске (МД). Все аналогично предыдущему пункту. Разница заключается только в том, что проверяется не один файл, а несколько, в том числе и файлы данных. При этом учитывается не только место физического размещения на МД, но и положение файлов относительно друг друга. Кстати, проверять местоположение файлов данных намного на-
дежнее, так как обращения к ним обычно нёГ отслеживают резидент- ные антивирусные модули. 3. Наличие на ПЭВМ "привычных" для пакета драйверов, таб- лиц, файлов. Простой для реализации, но столь же простой для снятия защиты способ. Люди по - разному относятся к своим привычкам. Кто-то спо- собен в течение дня бросить привычный XTREE и перейти на NC. Другой даже при появлении XTPRO, XTGOLD еще долго думает, преж- де чем изменит пакету. Можно, конечно, рискнуть и ориентиро- ваться на инерционность человеческой психики. В конце концов время жизни версий большинства пакетов не так уж велико: от си- лы год или два. И скорее всего, защищаемый Вами пакет умрет ес- тественной смертью раньше, чем произойдет такое изменение среды его обитания, что он вынужден будет, чтобы не мучиться, "покон- чить с собой". Но если уж Вами выбран данный способ защиты, то помните, для того чтобы посмотреть перечень программ, к которым "привя- зан" будущий хозяин Вашего пакета, совершенно не обязательно обращаться к винчестеру. Самая важная информация, имена наибо- лее популярных программ для данного компьютера и пути к этим программам (AUTOEXEC.BAT) содержатся в оперативной памяти. Для конкретной версии DOS можно самому предварительно найти эти ад- реса в оперативной памяти, используя любой отладчик или специ- альную программу. 4. Наличие заданной последовательности вызовов определенных программ перед запуском защищаемого пакета. Выводы аналогичны предыдущему пункту. 5. Специально модифицированные программы операционной системы. Как показал опыт работы с защищенным программным обеспечением, данный вариант среди непрофессиональных разработчиков защит является самым популярным. Обычно для модификации используются файлы операционной системы. Как правило, разработчики меняют один или два байта в указанных файлах, а затем осуществляют проверки.
Дизассемблировать их и найти байт для того, чтобы отме- титься, способен любой программист, умеющий менять атрибуты файла. Файлы операционной системы обычно защищены от записи, являются скрытыми и неперемещаемыми. Для того чтобы пометить один из них, достаточно: а) изменить атрибуты файла, сделав его обычным: б) записать в определенное заранее место соответствующее значение; в) вернуть обратно старые атрибуты файлу. Модифицированный байт делает программную среду уникальной. Защищенная таким образом программа обязана проверять наличие "своего" байта в файлах DOS либо в оперативной памяти, если уже загружена Ваша версия операционной системы. Удобнее всего модифицировать DOS по принципу изложенному в разд. 1.2.1, где речь идет о способах модификации BIOS. Разница только в том, что в даннрм случае следует изменять обработку прерываний DOS, в частности лучше всего самого популярного пре- рывания 21 h. Алгоритм работы программы: Шаг 1. Защищаемая программа пропускается через Модификатор (Посттранслятор), который модифицирует команды программы, предшествующие команде int 21h в части занесения значения в регистр АН или любой другой регистр. Например, заменить везде 9 на 100, 10 на 101 и т.д. Шаг 2. Инсталлятор модифицированного пакета на ПЭВМ заказчика осуществляет следующие действия: а) изменяет атрибуты файла операционной системы, позволяя самому себе туда писать; б) в месте обработки прерывания 21h делает безусловный пе- реход (JMP) в область данных, где восстанавливает первую, за- тертую командой перехода (JMP) команду, за ней размещает коман- ду сравнения 100 с содержимым регистра АН. Если значение АН больше 100, то предусматривает вычитание из регистра АН значе- ния 100; в) осуществляет размещение команды, ответственной за бе- зусловный переход на вторую команду обработки прерывания 21 h; г) восстанавливает первоначальные атрибуты IBMBIO.COM.
Шаг 3. Инсталлятор копирует пакет на компьютер заказчика, DOS которого теперь поддерживает модифицированные изложенным выше образом (шаг 1) программы. Как видно из предложенного алгоритма, подобные модификации DOS никак не отразятся на его работе с другим программным обеспечением. Однако, несмотря на все предосторожности, очень просто перенести защищенный таким образом программный продукт с одной ПЭВМ на другую. Достаточно вместе с ним скопировать DOS и дело сделано. Одна команда COPY сводит на нет все усилия. 6. Проверка наличия уникальной даты, например даты инициа- лизации диска. 7. Нестандартные способы организации данных на магнитных носителях. Огромную роль в развитии нестандартных способов организа- ции данных на магнитных носителях играет изучение тонкостей в работе с запоминающими устройствами и их драйверами. Стандартные программы, как правило, выполняют ’’правильное” копирование магнитных носителей, имеющих строго определенные форматы записи. Используя нестандартные, но допустимые способы организации магнитных носителей, можно исключить копирование носителей стандартными средствами. Для копирования необходима отдельная программа. Недостаток данного способа состоит в огра- ниченности возможностей нестандартного представления информации на магнитных носителях и, как следствие, слабой защищенности от пытливого ума. Для магнитных дисков наиболее часто используют: изменение нумерации секторов, изменение длины и числа секторов на дорож- ку, изменение числа дорожек. А для лент - изменение длины зоны и межзонного промежутка. Иногда удается изменять служебную ин- формацию, записанную на носителе. Пример программы для умышленного нестандартного форматиро- вания секторов подробно рассматривается в [173. Дискета имеет одну или две стороны. Каждая сторона в свою очередь разделена на N дорожек (обычно 40). Каждая дорожка разбита на сектора. Форматирование дискеты осуществляется по одной дорожке, поскольку промежутки между секторами и адресными
секторами и адресными маркерами взаимосвязаны. Для форматирова- ния дорожки задаются следующие параметры: номер дорожки, сторона, номер сектора, код длины сектора (0 соответствует 128 байт, 1 - 256, 2 - 512, 3 - 1024 байт). Пример программы, форматирующей одну дорожку, приведен ниже. Пример 1.6 TITLE Неверное форматирование 1 и 7 секторов 33 дорожки. STACK SEGMENT STACK DB 64 DUP (?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,ES:CODE SEKTOR DB 0, 0, 10, 2 ; 1 сектор ; Для сектора ; указан несуществующий ; номер 10. DB 0, 0, 2, 2 DB 0, 0, 3, 2 DB 0, 0, 4, 2 DB 0, 0, 5, 2 DB 0, 0, 6, 2 DB 0, o, 11, 2 ; Для сектора ; указан несуществующий ; номер 11. • DB О, О, 3, 2 ; 8 DB О, 0, 9, 2 ; 9 FORMAT PROC FAR PUSH DS SUB AX,AX PUSH AX LEA BX,SEKTOR
PUSH cs POP ES MOV CH, 38 MOV CL,1 MOV DX,0 LEA DI.SEKTOR MOV AL,9 POWTOR: MOV ES:[DI],CH ADD DI,4 DEC AL JNZ POWTOR MOV AX,501H INT 13H RET FORMAT ENDP CODE ENDS END FORMAT ; Выбор дорожки. Для того чтобы сделать дискету уникальной на этапе форма- тирования, можно варьировать такими параметрами, как номер сек- тора (что было сделано в вышеприведенной программе) и код дли- ны (в примере код длины равен 2-512 байт). В первом случае, если при форматировании указать несущест- вующий номер сектора, т.е. номер, больший максимально допусти- мого, можно получить уникальный сектор, который невозможно про- читать и записать. При обращении к такому сектору с функцией чтения или записи будет выдан аварийный код завершения. Коды завершения, получаемые .программой при работе с подобными секто- рами, могут быть использованы в качестве ключа при защите, поз- воляя настроить программу на конкретную дискету. Второй изменяемый параметр при форматировании дорожки - код длины. В процессе форматирования размер каждого сектора оп- ределяется индивидуально. Благодаря этому существует возмож- ность создать на дискете ряд уникальных секторов с разным кодом длины. Для того чтобы записать данные в выделенные таким обра- зом сектора, необходимо при выполнении операции записи/чтения соответственно изменять указатель размера сектора в таблице Ба-
зы диска. База диска [17] - это таблица, состоящая из 11 байт, которая содержит ряд параметров, необходимых для работы диско- водов, включая и определенную информацию о формате дискет. Ад- рес таблицы Базы Диска находится в векторном пространстве по адресу 120. Смещение байта, ответственного за длину сектора, относительно начала таблицы равно 3. Обычными средствами DOS подобные сектора не читаются, что позволяет спрятать в них не- обходимые данные. Ниже приведен пример программы на Турбо-СИ, которая форматирует 38 дорожку таким образом, чтобы второй сектор дорожки имел отличный от стандартного размер, а третий сектор был отформатирован с несуществующим номером. Затем программа осуществляет запись/чтение в указанные сектора и распечатку кода завершения операции. Пример 1.7 #include<dos.h> main () ( union REGS rl; struct SREGS rg; unsigned int J; int n; char al 10241; /*буфер для чтения */ char а1 ИО24]="проверка записи и чтения на дорожке"; int nseh; int smes; char far ^uhazad; /* таблица дорожка-головка-сектор-разлер для каждого сектора на дорожке */ char tdbl9)l4)={38,1,1,2,38,1,2,1 ,38,1 ,13,2,38,1,4,2,38,1,5, 2Л38ЛГ6Л2Л38ЛГ7Л2Л38ЛГ8Л2Л38ЛГ9Л2); system("dir a:"); smes=peek(0,120); /* таблица Базы диска */ uhazact=MK_FP( 0, smes) ; rl.h.dl=0;
rl.h.ah^O; int86(0x13,&rl,&rl); clrscrO; rl.h.dl^O; /* устройство a: */ rl.h.dh=1; /» нолер головки */ rl.h.ch=38; /» номер дорожки »/ rl.h.ah=5; /* функция форматирования */ rl.h.al=1; /» адрес таблицы секторов дорожки */ П.х. bx=FP_OFF(&tab[O)); rg.es=FP_SEG(&tab[O)); /» номер дефектного сектора */ nsek=rl.h.dh*360+rl.h.ch*9 - 10 + 2; /* вызов прерывания 13h */ tnt86x( Ox13,&rl,&rl, &rg); /* печать кода завершения */ gotoxy(10,9); prlntf("3a&epweHue=:d номер деф. сектора^ :d ",rl.h.ah.nsek); /*=========================================================«/ /* запись в отформатированные сектора */ for(J=1;J<5;j++) { /* писать сектор »/ rl.h.dl=O; /* устройство а: */ rl.h.dh=1; /* номер головки */ rl.h.ch=38; /* номер дорожки */ rl.h.c1=j; rl.h.ah=3; /* функция записи */ rl.h.al=1; /* адрес таблицы секторов дорожки »/ rl.x.bx=FP_0FF(&a1[0]); rg.es=FP_SEG(&a1L01); tf(j==2) ( *(utoazad+3)=1; gotoxyd,25); printf("попытка записи"); } int86x(0x13,&rl,&rl,&rg); /* вызов прерывания 13h »/ gotoxy(30,25); printf("j=%d код ошибки=:б ".j.rl.h.dh); *(utoazad+3)=2;
getchO; } /ж=========================================================^/ /* попытка чтения отформатированных секторов */ /* номер дефектного сектора для absreadO вычисляется следующим образом nseh= rl.h.dh * 360 + rl.h.ch * 9 + ndefsek - 10; где ndefsek - порядковый номер дефектного сектора в таблице tab В данном случае ndefsek=2, результат nsek=694 */ for(J=1;j<5;j++) { /* читать сектор */ rl.h.dl=O; /* устройство а: */ rl.h.dh=1; /* номер головки */ rl.h.ch=38; /* номер дорожки */ rl.h.cl=j; rl.h.ah=2; /* функция чтения */ rl.h.al=1; /* адрес таблицы секторов дорожки */ rl.x. bx=FP_OFF( &а[ О] ); rg. es=FP_SEG ( &а( О] ); if(J==2) ( *(ukazad+3)=1; gotoxy(1,25); printf("попытка прочитать"); } memset(a,O,100); int86x(0x13,&rl,&rl,&rg); вызов прерывания 13h windowd ,20,80,24); clrscrO; a[36]=0; printf("3anucb=:s ",a); windou)(1,1,80,25); gotoxy(30,25); prtntf("j=%d код oiuu6KU=:d ",j.rl.h.ah); *(ukazad+3)=2; getchO; } printf("\n программа отработала "); )
При операциях чтения и записи можно варьировать параметра- ми, находящимися в таблице параметров дискет. Например, хорошо известный пакет Copylock делает дискету ключевой путем формати- рования нулевой дорожки, изменив такие параметры, как размер сектора, число секторов на дорожке и величина промежутка форма- тирования. Но операции чтения и записи в нестандартно отформа- тированные сектора осуществляются со стандартными параметрами. Для удобства работы с примером 1.7 ниже приводится краткое описание таблицы Базы диска. Таблица Базы диска Смещение Назначение 0 Таймауты 1 Используется DMA 2 Число интервалов перед отключением мотора 3 Размер сектора 4 Последний сектор на дорожке 5 Длина промежутка для операций чтения/записи 6 Максимальная длина данных 7 Длина промежутка для операции форматирования 8 Символ заполнитель при форматировании 9 Основной временной интервал 10 Время запуска мотора Большие возможности таит в себе изменение служебной инфор- мации на магнитных носителях. 9. Размещение в теле программы в зашифрованном виде дан- ных, которые бы однозначно идентифицировали автора программы и пользователя, которому она официально продана. В качестве таких данных часто используется строка "(с) ФИО Дата" и системный но- мер программы. Такие данные позволят впоследствии применять юридические средства защиты, которые у нас "не работают". Обра- зец данного способа защиты был приведен в п.1.1.1 (пример 1.4). С целью обязательного сохранения этих данных при
несанкционированном копировании возможны две стратегии: а) Маскировка. Предназначенная для сокрытия информация де- лается похожей на программный код и размещается в том месте программы, где присутствуют многочисленные переходы. Другой ва- риант - эта информация создается при работе некоторой части программы, которая не отрабатывает в обычном режиме. б) Активное противодействие. Внутри програмлы есть провер- ка наличия спрятанной информации и переход на блок ответной ре- акции при ее отсутствии. Но иногда само наличие такого противо- действия позволяет найти спрятанные данные. Изящным способе»! активного противодействия является подбор такой информации, ко- торая сама частично является исполняемым кодом. 1.2.3. Психофизиологические особенности человека 1. Особенности пользователя программного обеспечения. Сюда входят вопросы аутентификации пользователей. Для этого необхо-
дима специальная аппаратура, которая позволяет воспринимать особенности голоса, отпечатков пальцев и т.п. Вполне доступным способом аутентификации пользователя является ввод пароля. Под- робнее эти вопросы освещены в [10, 12]. Отметим одну тонкость. Если в систему аутентификации поль- зователя возможен вход из программы, минуя средства регистрации, и контроля пользователя, то возможно написание "компьютерного червя", который с большой скоростью будет перебирать возможные пароли, варианты цифрового представления голоса или отпечатка пальца и т.п., пока не найдет нужный. Как правило, при расчете средств защиты возможность несанкционированного доступа из программы учитывается недостаточно. 2. Психологическое давление на потенциального хэкера. По- рой достаточно просто припугнуть пользователя, сказав, что па- кет защищен и в случае попытки снятия защиты данные могут быть уничтожены или вживлен вирус. И этого оказывается вполне доста- точно, чтобы с пакетом не проводили никаких экспериментов. Но, как говорил автор парадоксов 0.Уайльд: "Даже если скажешь прав- ду, все равно рано или поздно попадешься". 1.3. Блок сравнения характеристик среды Данный блок является одним из самых уязвимых мест защиты. Можно детально не разбираться с логикой защиты, а немного "подправить" результат сравнения, и защита будет снята. Иногда этот блок отсутствует ц его выполняет человек (например, в некоторых системах с шифрованием информации сравнение производится человеком на этапе ее использования). БСХС может иметь следующие варианты реализации: Первый - множество операторов сравнения того, что есть, с тем, что должно быть. Второй - генерация исполняемых команд в зависимости от ре- зультатов работы защитного механизма. Например, в первом байте хранится исходная ключевая контрольная сумма BIOS, во второй байт в процессе выполнения записывается подсчитанная контроль- ная сумма в процессе выполнения задачи. Суть блока сравнения:
вычесть из первого байта значение второго байта, а полученный результат добавить к каждой ячейке оперативной памяти в области DOS. Ясно, что если суммы не совпадут, то вряд ли DOS продолжит функционировать. Третий - выполнение ряда арифметических операций над дан- ными в зависимости от результатов работы защитного механизма. 1.4. Блок ответной реакции Блок ответной реакции (БОР) реализует ответные действия "обиженной” программы. Такими действиями могут быть: "самоубийство" программы или частичное уменьшение числа выполняемых ею функций; необратимая перестройка окружающей среды под свои потреб- ности, что приводит к невозможности работать на данной ПЭВМ с любыми другими пакетами, кроме данного;
’’издевательство” над пользователем, т.е. замедление ответ- ных действий, проигрыши похоронных маршей или гимнов, натужное гудение или противное пищание в случайные моменты времени, из- речение угроз страшным голосом, вывод посторонних изображений, добавление комментариев к вводимой и выводимой информации и да- лее в таком же духе; разрушение окружающей среды, в том числе запуск в програм- мную среду вирусов и создание в ней "троянских коней”. Для незнакомых с терминологией напомним: ’’троянский конь”- программа, выполняющая вредительские действия по отношению к Вашим компьютеру и магнитным носителям. Главная ее особенность заключается в том, что запустить ее на выполнение и тем самым уничтожить или покалечить собственные файлы должен лично поль- зователь. Данная программа, как правило, имеет интригующее имя и манит своего нового хозяина запустить ее на выполнение. Для того чтобы узнать ее предназначение, хозяин собственноручно ее и запускает. Создается "троянский конь” очень просто. Пишите программу, состоящую из оператора по удалению данных и создаете ЕХЕ-файл. Затем записываете полученный ЕХЕ-файл в Ваш защитный модуль и в случае нарушения условий прямо из программы копируе- те ’’троянского коня”, например в главный каталог. Будьте увере- ны, не пройдет и месяца, как кто-нибудь эту ’’новую” задачу обя- зательно ради любопытства пустит на выполнение. Блок ответной реакции может сильно демаскировать систему защиты. С целью снижения демаскирующего эффекта применяются идеи кратности ответной реакции (только после определенного числа запусков) и отложенности возмездия (ответная реакция про- исходит через определенное время или при срабатывании куска программы, далеко отстоящего от блока сравнения характеристик среды). Идеи постепенности ответной реакции и частичной деградации исполняемой программы перед полным прекращением работоспособ- ности имеют в плане защиты некоторые плюсы: а) пользователь несанкционированной копии не сразу спохва- тывается, б) желания вскрывать защиту может не появиться, так как используемая программа воспринимается как просто плохо отлажен- ная,
в) может пропасть желание использовать программу из-за страха получить какую-нибудь неизвестную реакцию. Отрицательным моментом является возникновение антирекламы, поскольку ответная реакция может быть воспринята, как свойства самого продукта в незащищенном виде. Эффект ответной реакции может быть усилен, если она соот- ветствующим образом описана в документации. Возможно описание не всех ответных воздействий или некоторое их преувеличение. Немного о демонстрационных версиях (демоверсиях). Следует отвергнуть способ создания демоверсий путем установки переклю- чателя в блоке ответной реакции, реализующего частичную потерю программой своих функций. Такая демоверсия легко превращается в обычную. Демоверсия должна быть специальной программой, у кото- рой недопустимые функции должны физически отсутствовать. Кроме того, должны отсутствовать все защитные механизмы и даже намеки на них.
Глава 2. ПОСТРОЕНИЕ ЗАЩИТЫ ОТ НСК 2.1. Программирование систем защиты Отметим два технологических момента, которые могут повли- ять на программирование средств защиты. 1. Защита может отрабатывать в пакетном режиме и/или иметь резидентную часть. Резидентная часть может выполнять различные функции: препятствовать вскрытию системы защиты, защищать изоб- ражения, защищать части диска. Часто резидентная часть выполне- на в виде монитора, выполняющего шифрование и дешифрование (пример 2.1). Одна из таких реализаций защиты с резидентной частью, характерная для защиты от НСД, описана в [7]. Защита
без резидентной части более проста в изготовлении, но и легче в преодолении. К тому же не всегда возможна замена одного способа защиты на другой. Для того чтобы затруднить слежение за своей работой многие системы с резидентной частью стремятся загрузиться в память раньше своего потенциального конкурента. Очень упрощенно поря- док работы модулей при загрузке операционной системы в компьютер можно представить следующим образом: ПЗУ, загрузчик MBR-сектора, загрузчик Boot-сектора, IBMBIO.COM (или аналогич- ный), IBMDOS.COM (или аналогичный), COMMAND.COM (или аналогич- ный), составные части CONFIG.SYS, составные части AUTOEXEC.BAT. Заменив любой из перечисленных модулей на свой (чем на более раннем этапе загрузки производится замена, тем лучше), и приме- нив нестандартную его организацию, система с резидентной частью может успешно блокировать попытки получать из компьютера данные без ее ведома. 2. Защита бывает пристыкованная и встроенная. У пристыко- ванной защиты работа модуля, ее осуществляющего, по времени не пересекается с работой функционального модуля. Как правило, сначала отрабатывает модуль защиты, потом - функциональный мо- дуль. Можно отследить момент передачи управления от одного мо- дуля к другому и обойти систему защиты без ее анализа. Многие коммерческие пакеты, обеспечивающие защиту, построены на прин- ципе пристыкованной защиты. При этом следует отметить, что пристыковка защитного механизма порой влечет за собой такую предварительную обработку защищаемого файла, что увидеть в нем даже прообраз исходного довольно проблематично. Встроенная защита отрабатывает и до, ив процессе работы функционального модуля. Для встраивания модуля защиты внутрь функционального модуля требуются значительные усилия, но для снятия такой защиты необходимы еще большие усилия. Такую защиту часто пишут сами разработчики пакетов прикладных программ. Наиболее простой прием, позволяющий сделать пристыкованную защиту, похожей на встроенную, заключается в чтении части защи- щаемой программы и части DOS в модуль защиты и наоборот. Это будет препятствовать механическому отделению программы защиты от защищаемого модуля. Порой достаточно просто добавить к защи-
щаемому коду константу и он станет совершенно не узнаваем. При проектировании средств защиты особое внимание следует обратить на защиту самих средств защиты. Анализ их содержания и наблюдение за их работой может дать неоценимую информацию для вскрытия защищенных с их помощью программ. Как правило, такие программы, если они имеют коммерческое распространение, должны иметь возможность создать определенное число защищенных модулей и самоуничтожиться. Перед проектированием средств защиты от ИСК важно представить организацию их применения. Возможны два варианта: а) пользователь устанавливает защиту сам; б) защиту устанавливает специалист из фирмы ее поставляю- щей. Достоинства первого варианта в возможности широкого тира- жирования изготовленных средств, второго в возможности реализа- ции более качественных и стойких к раскрытию способов защиты. Какой вариант предпочесть? Общего рецепта дать нельзя - все за- висит от конкретной ситуации. При выборе первого варианта необходимо проработать вопрос, на каком носителе (дискета, винчестер, лента и т.п.) будет рас- пространяться система защиты и как она будет устанавливаться на носители пользователя. Трудность заключается в обеспечении ми- нимизации возможности раскрытия "фирменных" секретов. Встроенные системы защиты, как правило, пишутся на том языке, на котором написан защищаемый модуль, либо используются готовые модули, написанные на языке Ассемблер. Пристыкованные защиты используют язык Ассемблер, который, как никакой другой, позволяет гибко оперировать с оборудованием и использовать нестандартные функции. Но этому языку присущи, по крайней мере, два недостатка: а) медленность и трудоемкость написания гибкого и разнооб- разного интерфейса с оператором и ряда стандартных функций; б) слишком маленький результирующий модуль, который можно легко дизассемблировать и подвергнуть трассировке. Языки высокого уровня могут компенсировать данные недос- татки. Поэтому обычно используется комбинация языка высокого уровня (Си, Паскаль и т.п.) и языка Ассемблер. Каждый разработчик, пытающийся защитить свои собственные
программы от ИСК, должен всегда держать в своем арсенале необ- ходимый инструментарий. Пытаться создать именно свою приличную защиту достаточно быстро и не отвлекаясь от основной разработки можно только в том случае, если у вас всегда под рукой, напри- мер в виде дополнительной библиотеки к Вашему языку программи- рования, набор специальных подпрограмм. Как показывает теория и практика, в виде изложенных выше приемов и способов предохране- ния желательно, чтобы данная библиотека включала следующие мо- дули, функционально разбитые на три блока, подробно описанные, в первой главе - блок защиты от Раздевателя, блок установки ха- рактеристик среды, блок ответной реакции. Блок защиты от Раздевателя содержит модули позволяющие за- щитить программу от дизассемблеров, отладчиков и резидентных наблюдателей. Блок установки характеристик среды содержит модули, основ- ное назначение которых: снимать с ПЭВМ ее программные и аппаратные особенности, записывать в указанное место EXE- и COM-файлов "снятые” характеристики. Блок ответной реакции содержит модули, ответственные за реализацию ответных действий "обиженной" программы. Приведем возможный состав вышеперечисленных блоков, ориен- тируясь на язык СИ. Перечисленные ниже модули написаны автора- ми, в первую очередь для удовлетворения собственных потребнос- тей, в защите разрабатываемых программных продуктов от ИСК. 2.1.1. Блок защиты от Раздевателя Подсчет контрольной суммы файла: Int ksum£lle(char где Imjn - имя файла. Подпрограмма возвращает контрольную сумму всех слов ука- занного файла или 0 в случае аварийного завершения. Подсчет контрольной суммы задачи или ее части в оператив- ной памяти: int ksumpam(lnt N).
Подпрограмма возвращает контрольную сумму всех слов бли- жайших N фрагментов оперативной памяти или 0 в случае аварийно- го завершения. Проверка свободной памяти ПЭВМ. Данная функция может быть осуществлена с помощью стандартных библиотечных функций языка. Подпрограмма "Пустышка”: Int pustodnt 1). Подпрограмма содержит множество самогенерирупцихся команд. В том случае, если входной параметр 1=0, осуществляется генера- ция безопасных команд, никак не влияющих на работу программы, если 1>0, генерируются непредсказуемые команды, выполнение ко- торых приводит к ошибочной работе программы и, как правило, к краху всей системы. Подпрограмма проверки времени выполнения: Int tlmexednt t). Подпрограмма возвращает 0 в том случае, если после пос- леднего выполнения данной подпрограммы прошло не более t се- кунд, иначе подпрограмма затирает в оперативной памяти выполня- емую задачу. 2.1.2. Блок установки характеристик среды Специфическое форматирование дискеты: Int formdisadnt k, int »nom, char *str, int k1), где k - количество секторов, которые должны быть специфи- чески отформатированы; str - строка, содержимое которой необходимо записать в специфически отформатированный сектор; к1 - размер сектора для записи содержимого str; пот - параметры для форматирования. Структура массива nom: int пот[)14], где пот [НО] - номер дорожки; пот(][1] - номер головки; пот(Н2] - номер сектора (1-9 правильные номера, >9 - не- существующие номера);
nomt][3] - код операции (0-3 размер сектора, 2 - стандарт- ный размер сектора). Подпрограмма возвращает сумму кодов завершения на чтение по всем к секторам. Чтение группы секторов и суммирование кодов завершения: int woswdisa(lnt k, int *nom). Подпрограмма возвращает сумму кодов завершения на чтение по всем к секторам. Подсчет контрольной суммы ПЗУ: int ksumO. Подпрограмма возвращает контрольную сумму ПЗУ. Определение месторасположения файла на носителе: long mestoille(char *imj), где char imj[) - имя файла. Подпрограмма возвращает адрес физического места файла на носителе. Просмотр списка оборудования: Int oborud(). Подпрограмма возвращает список оборудования. Запись в указанное место файла: int zanesi(char *lmj, 1, char *str, 11), где char lmj[) - имя файла; int 1 - место в файле; char str[] - строка, записываемая в файл с именем strtJ начиная с к байта; int 11 - число байт строки strt1, которые должны быть за- писаны в файл. Подпрограмма возвращает 1 в случае аварийного завершения и О при нормальном завершении. Запись в файл после указанной строки: int zaneslk(char *imj, char »str, 1, char *nz), где char lmj[] - имя файла;
char strU - строка файла, вместо которой будет записано 1 байт из строки nzl]; Int 1 - число байт строки nz( ]; char nzd - строка для записи в файл. 2.1.3. Блок ответной реакции Запись в случайные места указанных файлов случайного числа нулевых байт: int filebait(char *ust, char *dlr, char »flle, int n), где usttl - устройство, если то все внешние устрой- ства; dlrd - путь, если •*', то все каталоги; filed - имя файла и расширение, если то все; п - максимально возможное число записываемых нулевых байт. Блокировка работы экрана: ekrbalt().
Действие аналогично эффекту, возникающему в случае пропа- дания физического контакта дисплея с ЭВМ. Имитация вхождения в резонанс механических частей ЭВМ: rezonans(char *ustr), где ustrf] - внешнее устройство, в том числе принтер (ЪРТ:). Создать "троянского коня": int konla(char *lmj, char *str), где char imj(] - имя создаваемого файла - "троянского ко- ня"; char strC J - буфер в памяти задачи, где хранится "троянс- кий конь". Подпрограмма возвращает 1, если "конь" успешно создан, и 0 - в противном случае. Склейка ЕХЕ-файлов: int execopy(char »imJ1, char *imJ2), где char imj1[1 - имя EXE-файла; char imj2(] - имя ЕХЕ-файла. Подпрограмма копирует EXE-файл с именем lmJ2[] в файл с именем imj1 []. Результирующий файл имеет имя imJ1 [ ]; Подпрог- рамма возвращает 0 в случае нормального завершения, иначе 1. Склейка СОМ-файлов: int execopy(char *lmjl, char *lmJ2), где char lmjl (J - имя файла; char ImJ2(] - имя файла. Подпрограмма копирует COM-файл с именем lmJ2( ] в файл с именем ImJ1 []. Результирующий файл имеет имя ImJHl; Подпрог- рамма возвращает 0 в случае нормального завершения, иначе 1. Склейка EXE- и СОМ-файлов: int eccopy(char *lmjl, char *imJ2), где char ImJ1[] - имя ЕХЕ-файла; char imj2[] - имя СОМ-файла. Подпрограмма копирует COM-файл с именем lmJ2t) в файл с
именем lmJ1 [ J. Результирующий файл имеет имя imjl [ ]; Подпрог- рамма возвращает 0 в случае нормального завершения, иначе 1. 2.2. Защита текстовых файлов и изображений Защита текстовых файлов и файлов изображений чуть более трудоемка, чем защита программ, по следующим причинам: данные файлы, как правило, не являются исполняемыми, что приводит к необходимости использования их совместно с дополни- тельными пристыкованными средствами защиты; данные файлы, как правило, имеют известные статистические закономерности. Применяются, как правило, следующие методы защиты тексто- вых файлов и файлов изображений: шифрация файлов (возможно, в комбинации со сжатием); создание резидентного монитора; создание программы, включающей текстовый файл или файл изображений. В любом случае остается проблема несанкционированного ко- пирования изображения или текста прямо с экрана ранее размещен- ной в памяти программой. Для исключения такого процесса необхо- димо иметь нестандартный BIOS или нестандартный DOS, или самос- тоятельно проводить обработку всех прерываний, возникающих при нажатии клавиши на клавиатуре, кнопок мыши и таким образом дер- жать под контролем все внешние устройства, которые могут иници- ировать резидента-перехватчика, что представляет определенные трудности. Некоторые системы защиты текстовых файлов допускают только их печать (не позволяя просматривать на экране). При этом в за- щищенный файл часто встраивается драйвер печатающего устройст- ва. Такая организация защиты сужает возможности хэкера и нес- колько повышает степень защищенности файла. Ниже приводится пример нашего собственного резидентного монитора. Принцип его работы следующий: а) резидентный монитор забирает себе вектор 21 h прерывания и отслеживает функцию "чтения"; б) проверяет, что считано в буфер, и в том случае, если
выясняет, например, по первому символу буфера (ключевому симво- лу), что речь идет о зашифрованной записи, расшифровывает ее в оперативной памяти. Однако работать с прерыванием 21h не всегда удобно по той причине, что все резидентные Раздеватели всегда отслеживают прерывания 13h и 21 h. Поэтому рекомендуется выполнить следующие дополнительные действия: а) настроить резидентный монитор на какой-нибудь другой вектор, например на 80П; б) скопировать содержимое вектора 21h по адресу 80h векто- ра; в) исправить в пользовательской программе обращения к пре- рыванию 21 h на обращение к прерыванию 80П (для этого достаточно заменить во всем файле коды CD21h на CD8Oh). С учетом сказанного, резидентный монитор будет выглядеть на языке Ассемблер следующим образом: Пример 2.1 sseg segment stack db 256 dup (?) sseg ends cseg segment assume cs:cseg,ss:sseg z proc far push, ds mov ax,О push ax push cs pop ds mov dx,offset prod mov ah,25h mov al,80h tnt 21h ;====&ы£ти но остаться резидентныл==================~==
mov dr,100 mov al,0 mov oh,31h int 21h ret ; обработка прерывания prod: стр dh,3fh ; Функция чтения ? jne аО ; Нет int 21 h ; Да push ах ; Запомнить регистры push сх push di push bx push dx pop bx ; Проверка первого прочитанного символа. ; Если первый символ то строку надо ; расгиифровать. mov ah,ds:(bxJ cmp ah,'*' ; Надо ли расшифровывать строку? jne aa ; Нет mov di,0 ; Да a1: mov ah,ds:lbx+diJ ; Блок расшифровки символа ; В данном случае все символы, ; кроме первого, ; остаются без изменения. add ah,0 ; Конец блока расшифровки символа mov ds:[bx+diJ,ah inc di loop a1 mov dh,’ ' mov ds:lbxl,dh aa: pop bx ; Восстановить регистры pop di
pop ex pop ax tret aO: int 21 Ti tret cseg ends end z 2.3. Взаимодействие систем защиты с окружающей средой 2.3.1. Взаимодействие систем защиты и вирусов Взаимодействие вирусов и систем защиты могут приводить, по крайней мере, к трем нежелательным последствиям: вирус помогает снимать систему защиты, вирус необратимо портит систему защиты, система защиты оберегает вирус от антивирусных программ. Рас-
смотрим последовательно эти случаи: Вирус помогает снимать систему защиты Предположим, что система защиты диска включает загрузчик, записываемый вместо стандартного Boot-сектора диска и дополни- тельно к прежним функциям обеспечивающий проверку пароля при обращении к диску. Boot-сектор может быть переформатирован так, чтобы не допускать простейших операций чтения или записи. Если произошло заражение диска загрузочным вирусом, то Boot-сектор заменяется телом вируса. Загрузчик, размещавшийся ранее в Boot-секторе, сохраняется в другом месте диска и стано- вится доступным для чтения и записи. Теперь можно удалить про- верку пароля. Однако Boot-сектор может оказаться не по зубам вирусу и тогда заражения не произойдет. Иногда при попытке заражения за- щищенных носителей появляются сообщения операционной системы, которые могут служить признаком наличия вируса. Как правило, современные вирусы не в состоянии заразить хорошо защищенный диск. Причины этого в следующем: а) вирус распространяется, как правило, с копиями незащи- щенных программ, и поэтому создателям вирусов нет нужды писать вирусы преодолевающие какую-нибудь сложную защиту; б) объем вируса невелик, в связи с чем затруднительна реа- лизация алгоритмов преодоления сложных защит. Но если примененная вами защита легко преодолевается виру- сами, то стоит подумать о ее замене. Вирус необратимо портит систему защиты Предположим, что файл защищен путем изменения некоторой информации на диске или внутри файла. При заражении часть виру- са может размещаться в тех же местах диска или файла и таким образом стирать расположенную там информацию. После этого рабо- та с защищенным файлом станет невозможной, так как его защита будет считать, что произошло несанкционированное копирование. Такой же эффект может произойти, если у вируса есть вреди- тельская функция стирания некоторых областей диска. Вообще го-
воря, после очистки диска от вирусов рекомендуется проверить работу расположенных там защищенных модулей. Наиболее серьезная ситуация возникает в том случае, когда вирус внедрился в программу, имеющую качественно выполненный блок защиты от Раздевателя (ВЗОР) и блок ответной реакции. В этом случае, защищенная зараженная программа заметит произошед- шие с ней изменения, но расценит это, как попытку снять защиту. Результат - отработка функций блока ответной реакции. Данная ситуация не только опасна, но и в чем-то курьезна - какой-ни- будь безобидный вирус "сел" на задачу, а та в ответ разнесла вдребезги все данные на магнитном носителе вместе с инициирую- щим данное мероприятие вирусом. Ничего не понявшему, честно ку- пившему защищенную программу пользователю останется только хло- пать глазами и отчаянно давить кнопки. Отсюда следует вывод: ответная реакция должна быть сдержанной и не вредительской. Система защиты оберегает вирус от антивирусных программ Возможны два варианта (по числу типов вирусов): а) предположим, что диск, зараженный загрузочным вирусом, был обработан программой защиты таким образом, что запись в MBR- и Boot-сектора стала затруднительна: б) предположим, что зараженный файл защищен от копирования так, что его тело в обычном состоянии преобразовано, а перед выполнением осуществляется обратное преобразование. В первом случае без перезаписи секторов невозможно выле- чить зараженный диск. Во втором случае невозможно обнаружить вирус до вызова файла на выполнение, так же как и вылечить зараженный файл. Из вышесказанного следует: перед применением средств защиты необходимо тщательно очистить защищаемый продукт от вирусов: перед лечением от вирусов, если есть защищенные модули и существует возможность снять с них защиту, то это желательно сделать.
2.3.2. Взаимодействие систем защиты и антивирусных программ Некоторые программы (чаще всего антивирусные) проверяют носители, оперативную память, программы на наличие нестандартных включений и вирусоподобных действий. Средства защиты могут использовать аналогичные вирусам способы работы и размещать свои данные там, где это делают вирусы. Поэтому возможен вариант, при котором антивирусные программы не будут работать или будут находить вирус там, где есть защищенные модули. Рекомендации при разработке или выборе систем защиты: не применять приемы программирования, характерные для ви- русов, и не использовать области памяти, обычно используемые вирусами; протестировать работу популярных антивирусных программ в защищенной среде или с защищенными программами; все сомнительные ситуации должны быть тщательно документи- рованы. 2.3.3. Взаимодействие "компьютерного червя" с системой защиты "Компьютерный червь" - это специально написанная програм- ма, предназначенная для преодоления разнообразных защит. "Компьютерные черви" в отличие от вирусов размножаются сами по себе (для размножения вирусов требуется носитель: файл или диск) и не имеют ограничений по сложности и размерам. Если фун- кции размножения для снятия защиты не требуется, то "червь" не отличается от обычной программы. "Червь”, как правило, узко специализирован и взламывает только определенный тип защиты. Проблема защиты от "компьютерного червя" связана с пробле- мой защиты от воздействия со стороны программ, что часто недоо- ценивается. Возможно создание целой серии "червей", каждый из которых выясняет некоторый аспект защиты. По существу примене- ние "компьютерных червей" реализует человеко-машинный способ снятия защиты, где наиболее рутинные и однообразные операции возложены на "компьютерного червя".
2.3.4. Взаимодействие различных систем защиты При разработке систем защиты могут встретиться три различ- ных случая, влияющие на успешность реализации такой системы: а) Носитель защищенного продукта (диск, компьютер) целиком предназначен для работы этого продукта. В данном случае возмож- ности защиты ограничиваются квалификацией ее создателей. б) Наряду с защищенным продуктом на носителе используется целый ряд незащищенных продуктов. Использование защиты ограни- чено невозможностью изменения общесистемных функций, используе- мых другими программами. в) На носителе много защищенных продуктов. Здесь весьма вероятно влияние средств защиты друг на друга. Если защиты пос- троены по одному принципу, то желательно, чтобы их разработчик предусмотрел устранение взаимовлияния одного защищенного про- дукта на другой. Как правило, авторы, разрабатывающие конкретную систему защиты, мало заботятся о том, чтобы она была совместима с дру- гими системами защиты. В результате система защиты часто бывает несовместима даже сама с собой, что можно рассматривать как серьезный недостаток, ограничивающий ее применение. Например, иногда невозможно хранение на одном диске двух файлов, защищен- ных одним способом.
2.4. Выбор средств защиты Итак, какой способ защиты применять? Выскажем некоторые соображения по данному вопросу. 1) Целесообразно применять такую защиту, стоимость снятия которой превышает сумму затрат на ее установку и ущерба (поте- рянной прибыли) от присвоения защищенной информации другими ли- цами. 2) Способ защиты определяется защищаемой информацией. За- щита должна быть тем сложнее, чем больший тираж имеет защищае- мый продукт и чем медленнее он изменяется. 3) В любом случае целесообразно использовать комплексную систему защиты, включающую юридические, организационные, аппа- ратные и программные методы. 4) Защита должна пересматриваться, в идеале автоматически и динамически модифицироваться, если есть угроза ее раскрытия
или изменилась ценность защищаемой информации. 5) Защищенный продукт должен быть достаточно прост в ис- пользовании, чтобы не отбивать охоту в его применении у потен- циального пользователя, т.е. защитные механизмы не должны воз- действовать на привычную технологию работы с пакетом, в который они внедрены. Учитывая, что применяемые для защиты методы многообразны, рекомендуется их совмещать и усиливать таким образом защитный эффект. 2. 4.1. Сравнение различных систем защиты от копирования В настоящее время почти полностью отсутствуют сравнитель- ные характеристики по надежности для большинства предлагаемых защит. Их сравнение производится чисто эмпирическим путем, в котором большую роль играет квалификация специалиста, произво- дящего сравнение. К сожалению, все оценки носят качественный и во многом субъективный характер. Отметал некоторые факторы, важные при выборе систем защиты и расположенные в порядке убывания значи- мости: выполняемые функции: способность противостоять усилиям снять защиту; тщательность изготовления, отсутствие ошибок; совместимость с другими программами; удобство применения. Рассмотрим кратко вышеперечисленные факторы. Для удобства ориентирования пользователя разделим выполня- емые функции на ряд групп. а) На что направлены защитные механизмы: файл или диск. В первом случае модификации в файле или на диске направлены на защиту единичных файлов (защита от НСК). Во втором случае моди- фикации направлены на защиту областей диска или больших групп файлов (защита от НСД). Возможны смешанные системы и множество промежуточных вариантов. б) На каком носителе должен находиться защищаемый модуль. Возможны следующие типы носителей: несъемный диск (винчестер),
съемнмй диск, лента и т.п. в) Какие типы файлов можно защитить (исполняемые, оверлей- ные, текстовые, изображения, базы данных). г) Использование дополнительной специальной аппарату!® для реа.'зации защитного механизма. •) Какие особенности окружающей среды используются для за- щиты. несъемные части компьютера, специальные устройства, съем- ные части компьютера (дискеты), особенности программной среды, информация вводимая оператором и т.п. е) Возможность встраивания в другие программные системы. Способность противостоять усилиям снять защиту. В аннотации ко многим пакетам, позволяющим производить защиту программных продуктов написано, что сложность снятия защиты по трудоемкости сравнима с написанием большого комплекса программ. Но это относится только к первой снимаемой защите такого сорта. Снять подобную защиту со второго пакета не представит труда. При оценке данного фактора должно учитываться старение средств защиты, связанное с постепенным узнаванием большим кругом программистов применяемых методов. Старению можно противостоять, применяя способы, затрудняющие восстановление исходной программы на основании анализа защищенной, частым изменением версии средств защиты, проектируя средства изменяемые и настраиваемые в широком диапазоне конечным пользователем. Здесь же оценивается возможность противостоять стандартным и широко распространенным средствам снятия защиты (программы копирования, дизассемблеры и т.п.). Тщательность изготовления. Защищенная программа должна ра- ботать одинаково как до, так и после использования средств за- щиты. В последнее время средства защиты чрезвычайно усложни- лись. В процессе создания защищенного модуля производится су- щественное его видоизменение. Поэтому помимо практического неп- лохо иметь теоретическое доказательство корректности выполняе- мых преобразований. Совместимость с другими программами. Этот фактор необяза- тельный, но создает определенные удобства при работе защищенной программы в различных операционных средах и расширяет сферу его применения. С другой стороны, большая универсальность создает
предпосылки для снятия защиты. Общим недостатком всех средств защиты является их повышенная чувствительность к используемым аппаратным средствам в силу нестандартности применяемых проце- дур. Система защиты, разработанная для одного типа процессора и операционной системы, совсем не обязательно будет работоспособ- на на другом типе процессора и другой операционной системе, да- же если декларируется их полная совместимость. Удобство применения и хороший интерфейс с пользователем расширяют сферу применения средств защиты и способствуют наибо- лее полной реализации их возможностей. С другой стороны, неко- торые сервисные функции могут создавать удобства не только для пользователя, но и для хэкера. Например, если в пакете помимо функции установки защиты предусмотрены функции ее снятия, прос- мотра параметров защиты и другие функции, которые могут раск- рыть секреты программы, то должны быть предусмотрены соответст- вующие меры противодействия. Некоторые организации отвергают имеющиеся на рынке стан- дартные защитные средства (в значительной мере по причине их распространенности) и решаются на изготовление собственных сис- тем защиты. Такая система пишется на языке Ассемблер, может потребовать значительного времени и далеко не всегда будет пре- восходить стандартные средства. 2. 4.2. Какой не должна быть защита? а) Защита, которая легко обходится совершенно легальными способами. Например, ранние версии "WatchDOG Security System" можно легко обойти загрузившись со своей дискеты. б) Защита, методы снятия которой широко известны. Например, в системе "Advanced Disk Management System" возможно [13): произвести замены (ADM.SYS v.1.00, по смещению OAF7h: 75h -> EBh, OAF8h: 14h -> OAh; ADM.EXE v.1.01, по смещению 05BAh: 75h -> EBH, O5BBh: 13h -> OAh) и программа будет пропускать лю- бой пароль; при записи нуля в абсолютный сектор 2 (цилиндр 0, сторона 0) по смещению OlFlh (драйвер ADM.SYS не должен быть загружен) защита отключается;
изменить MBR-сектор и программа NDD легко удалит программу ADM. Пакет ADM - неплохая, но устаревшая система, позволяющая осуществлять разграничение доступа к дискам. Система широко из- вестна, поэтому разработано много программ, облегчающих работу с ней, а заодно помогающих снимать защиту: ADM_SAFER, SADM, ADMBRK и др. В среде некоторых операционных систем, например DR-DOS v.5.0, защита разделов диска не обеспечивается. Как отмечено в [13], NDD хорошо ’’помогает” при системах ”PC-Vault v.4.2 (бывший РС-Lock)” и ’’Secret Lock/Unlock”. 2. 4.3. Стандартные средства защиты Некоторые популярные утилиты (PCTOOLS, NORTON) включают модули, позволяющие защитить файлы и диски от несанкционирован- ного доступа и/или копирования. Используется шифрование и па- рольный метод доступа. Основной недостаток таких систем в широком распространении несанкционированных копий этих утилит. Это позволяет вести ’’широким фронтом” поиск способов противодействия этим методам защиты. Такие методы защиты, как правило, не используются в коммерческих системах. Отметим две области их применения: а) защита от коллег средней квалификации, желающих раньше времени воспользоваться результатами Вашего труда или навредить вам; б) защита от начальников-администраторов, запрещающих сво- им подчиненным использование на компьютере некоторых типов программ (например, игровых). 2.5. Некоторые специальные средства защиты До сегодняшнего дня по роду своей деятельности авторы сталкивались с некоторыми пакетами, специально созданными для установки защитных механизмов на программные продукты. Сразу следует отметить, что к нижеприведенному перечню па- кетов защиты авторы не имеют никакого отношения. Мы просто по-
пытались провести небольшое исследование на тему: ’’Как они уст- роены и что надо для того, чтобы снять устанавливаемую ими за- щиту?”. В чем-то, возможно, мы ошиблись при анализе названных программ. В этом случае, авторы пакетов, если не побоятся раск- рыть свои профессиональные секреты, могут нас поправить. К сожалению, для многих пакетов авторы данной книги не знают ни фамилии, ни координаты разработчиков. Там, где в доку- ментации или непосредственно в программах указаны фамилии и именные компоненты, мы вынесли их в заголовок. Обзор пакетов явно неполный, ибо не все существующие паке- ты по защите от ИСК и НСД доступны простому советскому програм- мисту. Но рано или поздно все равно появятся подробные каталоги по данной области человеческой деятельности, и мы своим обзором не стремимся их предвосхитить. 1. 25СНЕСК, ver. 2.03 от 9.02.91 (с) 25S0FT. Комплекс программ производит проверку целостности объектов (файлов, объектов в файле данных, MBR-сектора, Boot-секторов и модулей ПЗУ) путем расчета контрольных сумм с использованием циклических избыточных кодов (Cyclic Redundancy Code) - CRC. 2. EASYPROT, вер.2.0. Состоит из модулей: INSTALL, TRANSFER. Система защиты программных пакетов, разработанных в среде Турбо-Паскаля версии 4.0 и выше, от несанкционированного копирования производится в несколько этапов: нанесение механического повреждения на рабочую поверхность дискеты с целью ее индивидуализации (пометки) и форматирование дискеты; перенос защищаемой программы на помеченную дискету; перенос защищаемой программы на гибкий или жесткий диски с привязкой к конкретному компьютеру. Система представляет набор модулей, которые могут исполь- зовать программисты, работающие в среде Турбо-Паскаля. 3. COPYLOCK.COM II, (с) Link Computer 1988. Хорошей репутацией пользуется защита Copylock, ставшая своеобразным стандартом де - факто. Многие более поздние разра-
ботки повторяют текст этой программы. Для защиты используется форматирование дискеты специаль- ным образом. COPYLOCK, делая дискету ключевой, форматирует О дорожку, изменив такие параметры, как размер сектора - на 128 (вместо 512), номер последнего сектора на дорожке - на 30 (вместо 9), длину промежутка для операции форматирования - на 1511 (вместо 50h). Затем форматируется 12 дорожка, но уже со стандартными параметрами. При этом предварительное (до формати- рования) чтение 0 дорожки и последующая запись на нее выполня- ются со стандартными параметрами ’’Таблицы параметров дискеты”. 4. HOTA.EXE, (с) Новинтех, Стас Ляшев, Москва, февраль 1990 г., вер. 1.1. НОТА позволяет осуществлять защиту программ от несанкцио- нированного использования. В процессе защиты некоторая секрет- ная информация (ключ) может быть записана на гибкий или жесткий диски. На жестком диске требуется повторная установка защиты после каждой операции реорганизации диска. К одному гибкому диску возможна привязка любого количества программ. В защищенных программах предусмотрены меры противодействия трассировке с помощью таких программ, как DEBUG, AFD, PERISCOPE. Возможно шифрование защищаемой программы. При установке защиты учитываются следующие параметры, вводимые пользователем: индивидуальные характеристики программы и пользователя: пароль, имя программы, версия, дата разработки, дата передачи, имя автора, имя покупателя, дополнительные авторские признаки (эта информация входит в состав ключа); число запусков и дата, после которых защищенная программа становится неработоспособной; информацию об авторских правах пользователя, которую можно прочитать вводя пароль. Ограничение: Возможны трудности при защите оверлейных файлов. НОТА имеет хороший интерфейс с оператором. 5. PROCOP. Система защиты от несанкционированного копирования состоит
ИЗ программ CODPRTCT.COM, FLOPRTCT.COM, HARDINST.COM. В процессе защиты программы происходит создание ключевой дискеты и привязка загружаемых программ к ключевой дискете. Ключевая дискета не может быть скопирована средствами DOS и та- кими утилитами, как COPYWRIT или COPYIIPC. К одной дискете мож- но привязать до 12 программ. Защищенная программа может быть инсталлирована на винчестер. При установке защиты учитываются следующие параметры, вводимые пользователем: число запусков, после которых защищенная программа стано- вится неработоспособной; число инсталляций на жесткий диск (все копии сделанные сверх установленного лимита будут неработоспособны); скорость компьютера, которая будет учтена при создании ключевой дискеты. Ограничения: защита оверлейных файлов не поддерживается; при заражении ключевой дискеты вирусами возможна потеря защищенных программ. 6. Система защиты программных продуктов от несанкциониро- ванного копирования, вер. 2.1 май 1990, (с) СП "Диалог". Состоит из модулей: INST_FD.EXE, INST_HD.EXE, SETNUM.EXE, UNIN_HD.EXE. Система позволяет: установить средства защиты на произвольный программный продукт; перенести защищенный программный продукт на гибкий и жест- кий диски. При установке защиты учитываются следующие параметры, вводимые пользователем: число инсталляций на жесткий диск (все копии, сделанные сверх установленного лимита, будут неработоспособны полностью или частично); регистрационный номер и наименование покупателя. Если программный комплекс состоит из нескольких модулей, то защищается только главная программа, объем которой увеличивается на 8.5 Кбайт. На дискету может быть установлен
только один защищенный продукт. При копировании защищенной программы возможна потеря их работоспособности. 7. Комплекс РР, ver. 2.2, А.Горленко, БФ ИЛИ АН СССР, 1989. Система защиты программ от несанкционированного копирова- ния СОСТОИТ из модулей: I_AND_R.EXE, PTOOLF.EXE, PTOOLI.EXE. Защита состоит из следующих этапов: изменения ЕХЕ-файла путем удаления из него блока размером 512 байт и внедрения на это место специальной программы, рас- познающей условия, заданные в момент инсталляции: установки ЕХЕ-файла на жесткий диск с помощью инсталлято- ра; защиты инсталлятора от копирования. Производится физичес- кая порча части секторов на дискете путем царапания ее иголкой. Данная дискета будет использоваться как ключевая при запуске инсталлятора. При установке защиты учитываются следующие параметры, вво- димые пользователем: число инсталляций на жесткий диск (все копии, сделанные сверх установленного лимита, будут неработоспособны), номер пакета. 8. Комплекс TEXT PROTECTION, А.Горленко М.Дмитрик, ИЛИ АН СССР, 1990. Система защиты текстовых данных от несанкционированного копирования состоит из модулей: DECOD.EXE, DESHIFR.EXE, POLD.EXE, SHIFR.EXE. Защита состоит из следующих этапов: зашифровки текстовых файлов программой SHIFR.EXE; размещения файлов с зашифрованными данными на дискете; создания Мастер-дискеты и записи на нее (или на другую дискету) защищенной от копирования программы распечатки зашиф- рованного текста DECOD.EXE (производится физическая порча части секторов на Мастер-дискете, путем царапания ее иголкой); защиты программы DECOD.EXE от копирования путем использо- вания технологии защиты загрузочных файлов. Допускается распечатка защищенного текста ограниченное
число раз. 9. Secret Text, (с) NISS soft, вер.2.5, март 1990. Состав: STEXT.EXE, SVIEWER.EXE. Система защиты текстовых файлов от ИСК с жестского диска. Текстовый файл обрабатывается программой STEXT.EXE, после чего работа с ним возможна только с помощью программы SVIEWER.EXE. Система позволяет: устанавливать и снимать защиту с текста; читать текст с экрана, осуществляя операции "листания” и контекстного поиска; печатать текст. Ограничения: не обрабатываются файлы размером свыше 64 Кбайт; работает под управлением MS-DOS версии 3.x. 10. Program Protect, (с) NISS soft, вер. 3.00, март 1990. Состав: PPU3.COM. Система защиты исполняемых файлов (типа .СОМ или .EXE) от несанкционированного использования и копирования с жестского диска. Защищенный файл шифруется. Применена защита от анализа файла. По мнению авторов, для снятия защиты необходимо не менее 720 часов работы программиста средней квалификации, владеющего языком Ассемблер. Позволяет: устанавливать защиту от ИСК; снимать защиту от ИСК; устанавливать защиту от ИСК с невозможностью ее снятия; ограничивать доступ к файлу путем организации запроса па- роля (10 символов) перед его использованием. Ограничения: не обрабатываются СОМ-файлы размером свыше 63 Кбайт; работает под управлением MS-DOS версии 3.x. 11. SekretDlsk, ver. 1.01А, (с) 1985 by С F Systems. Состоит из модулей: DESDRV.BIN, SECRET.BIN, CHANGEP.COM, DESCOPY.COM, HIDEFLIP.COM, SDELETE.COM, SECLIST.COM, SOFF.COM, SON.COM, SREBUILD.COM, SECFINIT.EXE, SECINIT.EXE.
Пакет позволяет: копировать файлы SecretDlsk; шифровать и расшифровать файлы; изменять пароли; формировать SecretDlsk на любом дисководе; удалять и восстанавливать SecretDlsk; изменять (заменять) атрибуты главного файла; форматировать дискету для SecretDlsk. 12. LOCK. ver. 2.00 (с) 1986 SoftLoglc Solutions Inc., Manchester. N.H. Состоит из модулей: LOCK.EXE, UNLOCK.EXE. Предназначен для шифрования файлов на дисках. Предельно прост в использовании. Для шифрации/дешифрации файла достаточно указать пароль. Шифрование осуществляет программой LOCK. Программа запра- шивает имя зашифровываемого файла и пароль. Дешифрование осуществляет программой UNLOCK. Программа запрашивает имя расшифровываемого файла и пароль. 13. Copy Protection, ver. 2.02, (с) D.Rudev 1987, 1988. Состоит из модулей: PROTECT.COM, PROTECT.INS, PROTECT.LOD. Позволяет привязать программу к ключевой дискете и жестко- му диску. Пакет позволяет: записать и стереть ключ защиты дискеты; защитить дискету от просмотра; осуществить просмотр / изменение; записать программу на дискету; добавить имя программы к списку установок; удалить имя программы из списка установок; записать с защитой записи программы на дискету; записать с защитой записи программы к жесткому диску. 14. ANTICOP, (С) Киев, 1989. Состав: ANTICOP.COM, ANTICOP.UST, ANTICOP.ZAG. Система защиты файлов, размещаемых на жестких и гибких дисках, от НСК. Защищенные файлы привязываются к носителю и при
копировании становятся неработоспособны. Позволяет: устанавливать и снимать защиту с файла; переносить защищенную программу на винчестер; изменять ключ защиты, используемый для шифрования; получать информацию о защищенном файле. При установке защиты учитываются следующие параметры, вво- димые пользователем: число инсталляций на жесткий диск (все копии, сделанные сверх установленного лимита, будут неработоспособны); ключ защиты; информация об авторских правах. 15. SHIELD.EXE, (с) ALEX SOFTWARE, 1989. Позволяет создавать защищенные программы путем создания ключевой дискеты. При установке защиты учитываются следующие параметры, вводимые пользователем: число инсталляций на жесткий диск (все копии, сделанные сверх установленного лимита, будут неработоспособны), номер пакета. 16. PROTECT-5, (с) Щербаков A.D., 1990. Состав: INIPTE.EXE, SETPT.EXE, SETPTK.EXE, MYFORM.COM, RUNM.COM, PROTECT.EXE. Позволяет защищать текстовые файлы, базы данных, выполняе- мые EXE- и COM-файлы от ИСК. Возможно использование пароля для ограничения доступа к защищаемым модулям. Принцип: кодирование информации с учетом особенностей ПЭВМ, в частности жесткого диска, видеоадаптера, портов. Кроме того, для защиты от ИСК используется привязка к дискете, кото- рая специальным образом изготавливается как ключевая. Для изго- товления ключевой дискеты осуществляется форматирование дорожки с номером 2а. После чего на отформатированную дорожку в первый сектор записывается ключевая информация типа: 6566,6а64,6а74,3076,0030,0009,0,0,0... 17. ППП ЗАЩИТА-МИКРО, (с) Интерпрограмма, 1987.
Состав: SKUR.EXE, SPR0_PE2.EXE, SPR0_PE3.EXE, SPR0_PE4.EXE. Функции ШШ ЗАЩИТА-МИКРО: защита от неправомочного копирования и распространения программных продуктов, записанных на гибких магнитных носите- лях, используя специальное изготовление дискет; защита для доказательства прав использования программного продукта; защита для доказательства авторских прав; защита для ограничения срока/числа использования продукта. ШШ ЗАЩИТА-МИКРО функционирует на микро ЭВМ типа IBM PC/XT или совместимых с ней под управлением операционной системы типа MS-DOS версии 3.10 и выше. 18. MAWR, V.5.01, (с) 1989. Состав: ASPYRIN.EXE, MAWR.EXE, PERS.COM. Система парольной защиты. Позволяет: защитить полностью жесткий диск от несанкционированного доступа; защищать разделы файловой системы MSDOS (каталоги и подка- талоги) от несанкционированного доступа. Контролировать копиро- вание информации с жесткого диска на флоппи-диски. Система пре- доставляет возможность вообще запретить несанкционированную ра- боту с флоппи-дисками; контролировать изменения файлов формата EXE, COM, SYS. Для защиты жесткого диска от несанкционированного доступа устанавливается так называемый дисковый пароль. Защита жесткого диска с помощью данной системы осуществляется путем создания нестандартной структуры FAT, поэтому при загрузке с флоппи-диска нельзя получить доступ к жесткому диску. 19. PROTECT.COM, V.3.O. от 04.12.90, (с) Гуртняк. Система PROTECT позволяет ставить защиту от записи или чтения на разделы винчестера, размеченного одной из программ: Disk Manadger, FDlsk. Доступ к разделам по паролю. Существующие
вирусы не в состоянии нарушить данную систему. Возможна защита от загрузки с дискеты (винчестер не виден для команд DOS). 20. NULOCK, v.2.0, (с) 1988, NU-GmbH. Позволяет защитить от доступа жесткий диск. Доступ по па- ролю. При загрузке с дискеты винчестер не виден для команд DOS. 21. PASSW, ver.1.0, (с) V.Volkovoy, 1989. Состав: GETPASSW.COM, PASSW.EXE. Система защиты жесткого диска. Организует доступ к жестко- му диску посредством пароля. Позволяет устанавливать, удалять, изменять и читать пароль жесткого диска. 22. LIST, (с) 1991, v.1.0. Состав: LIST.EXE. Система ограничения доступа и защиты от копирования файлов на диске. Файлы заносятся в "черный" список, что не позволяет их копировать, удалять и изменять. Возможно возвращение прог- раммы из "черного" списка. При описании пакетов, производящих защиту сознательно, не описаны способы вскрытия каждого конкретного пакета по сообра- жениям этики, но, кроме того: чтобы не наживать себе врагов среди изготовителей и поль- зователей данных пакетов, чтобы не лишать удовольствия многих любителей покопаться в защищенных программах. После краткого знакомства с перечисленными выше пакетами по установке защит у читателя должен возникнуть вопрос о том, насколько сложно с этими пакетами разобраться и насколько слож- но избавиться от устанавливаемых ими защитных механизмов. Ответ на этот вопрос вынесен у нас эпиграфом в начало книги: "Нет та- кого, чего бы не было, а люди на все способны". Поэтому, тем, кто работает в области защиты от НСК, чрезвычайно полезно знать методы раскрытия систем защиты. Основные направления в искусстве "раздевать" защищенные программы предлагаем читателю в следующей главе.
Глава 3. КАК СНИМАТЬ ЗАЩИТУ Теперь очень кратко рассмотрим вопрос, как обходить сущес- твующие средства защиты, в том числе и те, которые рассмотрены выше, ибо бывает только неправильный путь, но не бывает безвы- ходного положения. Частично, вопросы снятия защиты изложены при рассмотрении средств защиты. Ниже остановимся на следующих трех аспектах, во-первых, стандартных средствах, во-вторых, специальном инст- рументарии хзкера и, в-третьих, принципах построения, универ- сального Раздевателя. 3.1. Некоторые стандартные средства снятия защиты Рассмотрим широкоизвестные программы, часто применяемые
для анализа и снятия защиты с других программ. Их перечень, бе- зусловно, не полон и не может быть таким, он лишь показывает основные направления развития таких программ. Прямое применение нижеприведенного матобеспечения позволя- ет снимать лишь относительно простые системы защиты. Но его применение как дополнительного средства в сочетании со специ- альными программами позволяет достичь значительных успехов. Кроме того, стандартные средства непрерывно совершенствуются и то, что с их помощью нельзя сделать сегодня, возможно сделать завтра. Интересно, что в некоторых программах, специально предназ- наченных для вскрытия защит, содержатся предупреждения о нару- шении закона об авторском праве в случае таких действий. 3.1.1. Универсальные утилиты Универсальные утилиты позволяют читать, анализировать и записывать на диск и в оперативную память различную информацию. Эта группа представлена многочисленными программами. Отметим следующие: а) Комплект утилит Нортона, (с) Peter Norton; Комплекс программ PC-SHELL, (с) Central Point Software, Inc. Просмотр и запись отдельных секторов диска. Просмотр оперативной памяти. Много дополнительных возможностей. б) Disk Explorer, July 1985, (с) Quald Software Ltd. Просмотр и запись отдельных секторов диска в любом формате. в) MAPMEM.COM, Borland Inc., 1986; MAPRAM.EXE, CSPI, 1984; FX_SHOW.COM, v.1.53, Кононенко И., 1991; PEEK.COM, v.1.0, Гуртяк Д.А., 1990 и др. Первые две программы позволяют только просматривать, а вторые две просматривать и редактировать оперативную память. 3.1.2. Отладчики и дизассемблеры Отметим следующие: a) Quald Analyzer, (с) Quald Software Ltd, May 1988;
6) Periscope III, (c) Data Base Decisions, v.4, 1990; в) Turbo Debuger, (c) Borland Inc., v.2.01, 1990; r) Souser, (с) V Communications, v.1.72, 1988; д) DlsDos, (c) RJSwantek.Inc, v.2.3, 1988. 3.1.3. Программы, предназначенные для снятия защиты Программы этой группы специально предназначены для копиро- вания защищенных носителей и вскрытия некоторых типов защит. а) Комплекс COPY II - PC, ver.5.01, 1988, (с) Central Point Software, Inc. Состоит из программ: NOKEY.COM, FIXUP.COM, NOGUARD.COM, BULKERAS.EXE, COPYIIPC.EXE. Позволяет осуществлять: копирование защищенных гибких дисков; копирование модулей, которые защищены пакетами, SUPERIOR, PROLOK, EVERLOCK, SIERRA; перенос защищенных пакетов на винчестер. Есть версии программы COPYIIPC.EXE, которые позволяют ко- пировать гибкие диски для компьютеров: Apple, Macintosh, Commodore 64/128. Этой же фирмой выпускается специальная плата COPY II PC OPTION BOARD, которая совместно с соответствующим программным обеспечением производит максимально возможное дублирование гибких дисков. б) COPYWRITE, April 1988, (с) Quald Software Ltd, Robert T McQuaid and Frank Klein, authors. Программа, предназначенная для копирования защищенных гибких дисков. В частности, копирует диски, созданные пакетами Prolok 2 и Everlock. в) UNLOCK.COM, TranSec MasterKey, ver. С-3.31. Копирование модулей, защищенных пакетами PROLOK, SUPERLOK, EVERLOCK, SIERRA. 3.2. Специальный инструментарий Заметим, что очень часто можно снять защиту с пакета, ис-
пользуя примитивные трюки на базе стандартных средств, это воз- можно особенно тогда, когда защита написана любителем, да еще и с использованием пристыковочного защитного механизма. В данном случае рекомендуется попробовать: а) полное копирование винчестера через магнитную ленту; б) слежение за использованием векторов I3h и 21 h с помощью небольшой резидентной программы (ниже приводится пример такой программы); в) "забивание" в ЕХЕ-файле переходы в подпрограммы и про- чие подозрительные объекты командами NOP (90h); г) запуск под каким-нибудь отладчиком; д) "лечение" защищенного диска с помощью программ, анало- гичных HDD и т.д. Как гласит восточная мудрость: "Смешно когда кузнечик бро- сается на телегу, все уверены, что упадет кузнечик, никто не думает, что упадет телега". В случае "раздевания” программ бы- вает, что переворачивается телега. Многие пакеты, в частности COPYLOCK, НОТА и т.д., выполне- ны достаточно профессионально и, чтобы по настоящему разобрать- ся с алгоритмом их работы, понадобится много времени. Поэтому при дефиците времени, если принцип зашиты связан с нестандарт- ной, но допустимой организацией данных на магнитном носителе, то можно пытаться получить точную копию ключевой дискеты, под- глядев с помощью резидентных модулей, как сам пакет форматиру- ет, пишет и читает ключевую дискету. Ниже приводится текст собственной программы, которая пред- назначена для отслеживания работы исследуемой задачи. Данная программа встраивает себя в область DOS (в данном случае - в область обработки прерывания 13Ь) и выдает на экран справочную информацию о содержимом регистров и областей памяти. Условно она названа "телекамера". Предварительно до запуска программы пользователь должен выбрать место в области памяти, куда он хочет прилепить свою "телекамеру". Выбор осуществляется с помощью любого отладчика. Адреса обработки нужных прерываний берутся непосредственно в оперативной памяти из области векторного пространства. После этого, по выбранным адресам дизассемблируется соответствующая область памяти, запоминаются адреса двух последовательно идущих
(выполняющихся) команд и сами команды. Эта процедура выполняет- ся легко и просто хорошо известным отладчиком Turbo Debuger. В ниже приведенном листинге выбранные адреса и команды обозначены в комментарии как: Адрес!, Адрес2, Команда!, Команда2. Выбор двух команд (двух точек прерывания) объясняется не- обходимостью восстановить исходную команду и восстановить точку прерывания для последующего прохода вычислительного процесса по данному участку памяти. Алгоритм работы демонстрируемой программы следующий: Шаг !. Предварительные действия: по выбранным адресам записать команды выдачи прерываний, например, Int 5ah, Int 5bh; записать в соответствующие вектора адреса подпрограмм, об- рабатывающих данные прерывания; выйти, но остаться резидентной. Шаг 2. По первому прерыванию выполнить следующие действия: запомнить регистры; вывести на экран содержимое регистров и нужных областей оперативной памяти; восстановить подмененную команду (Команду!) по Адресу!; установить команду выдачи прерывания по Адресу2; уменьшить содержимое находящегося в стеке регистра IP на 2, для того, чтобы управление по окончании обработки прерывания было передано не на следующую команду, а на восстановленную по Адресу! Команду!; восстановить регистры и выйти из прерывания. Шаг 3. По второму прерыванию выполнить следующие действия: запомнить регистры; восстановить Команду2 по Адресу2; установить команду выдачи прерывания по Адресу!; уменьшить содержимое находящегося в стеке регистра IP на 2, для того, чтобы управление по окончании обработки прерывания было передано не на следующую команду, а на восстановленную по Адресу2 Команду2; восстановить регистры и выйти из прерывания. Внимание! Не забывайте, что Ваша программа является рези-
дентной, поэтому в ней во избежании мелких неприятностей типа зависания операционной системы запрещается использовать преры- вания DOS. Пример 3.1 sseg segment stack db 256 dap (?) sseg ends dseg segment dseg ends cseg segment assume cs:cseg,ss:sseg,ds:dseg z proc far push ds mov ах, О push ar Подготовка DOS для работы с програмой. В область DOS, ответственную за обработку прерывания 13h (работа с дискетой/винчестерол), записываются команды вызова данной задачи int 5dh обработку прерывания 5ah данная програма берет на себя mov bz,70h ; сеглентный регистр адреса ; обработки прерывания 13h push bx pop ds mov bx,0f36h ;слещение относительно сеглентного регистра mov ax,5acdh mov ds:(bx),ax ; Настройка прогромы на обработку прерываний ; Первое прерывание push cs pop ds mov dx,offset prod
mov dh,25h mov al,5dh int 21h ; Второе прерывание mov dx.offset prodl mov dh,25h mov al,5bh int 21 h ;~==ВыОти но остаться резидентнъш===~~========~~==~==== mov dx,1OOh mov al,О mov dh,31h int 21 h ;===== ПРОГРАММА ОБРАБОТКИ ПЕРВОГО ПРЕРЫВАНИЯ ============== prod: push ds ; +12 push bx ; +10 push ax ; +8 push bp ; +6 push dx ; +4 push es ; +2 push ex ; +0 ; Настройка экрана для выдачи информации ; о содержимом регистров mov al,1 vad: mov dh,5h int 1Oh mov dl.Odh mov ah,2h int 21 h mov dl.Odh mov dh,2h int 21h ;/*----------------------------------------------------*/ mov bp.sp mov ax,[bp+14] ; ip call deci ; Печать содержимого регистра mov ax,[bp+16] ; cs call deci ; Печать содержимого регистра
mov ax.lbp+8) call deci mov ax.lbpl call deci mov ax,lbp+4] call ded ; ax ; Печать содержимого регистра ; ex ; Печать содержимого регистра ; Печать содержимого регистра Переход на новую строку, mov dl,Odh mov ah,2h int 21h mov dl,Oah mov ah,2h int 21h Печать таблицы параметров дискеты mov bx,0 push bx pop ds mov bx,522h mov ax.dsilbxl call deci add bx,2 mov ax,ds:lbx] call deci add bx,2 mov ax,ds:lbx} call deci add bx,2 mov ax,ds:[bx] call deci add bx,2 mov ax,ds:[bx] call deci add bx,2 mov ax,ds:Ibx] call deci Переход на новую строку.
mov dl,Odh mov int dh,2h 21 h mov dl,Oah mov int aht2h 21h ; Печать дескрипторов секторов ; (используются при операции форматирования) mov bx.lbp+10] ; Ьх mov ax.es:(Ьх) call deci mov ax.es:(bx+2) call ded mov ax,es:[bx+4] call ded mov ax.es:lbx+6) call ded mov ax.es :(bx+8) call dec/ mov ax.es: (bx+101 call ded mov ax,es:lbx+12] call dec? mov ax,es:(bx+14l call deci mov ax,es:Ibx+l6J call deci mov ax.es:lbx+181 call ded mov ax.es:lbx+201 call ded ; Установит команду выдачи прерывания по Адресу2 mov bx,70h ; сегментный регистр адреса ; обработки прерывания 13h push bx pop ds mov bx,0f88h ;смещение относительно сегментного регистра
mov ax,5bcdh mov ds:[bxJ,ax ; Восстановить команду в программе по Адресу! mov bp.sp mov bx,lbp+14J ; tp mov ds,[bp+16J ; cs откуда попали в DOS sub bx,2 mov ax,9090h ; Коланда1 mov ds:lbxl,ax ; ds:fbxJ - Adpecl mov [bp+141,bx ; Вернуть экран в первоначальное состояние mov dl.Odh mov ah,2h int 21 h mov dl.Oah mov ah,2h int 21 h sc: mov ah, Oh int 16h mov ah,5h mov al,0 ; tstr int 10h » aa: pap ex pop es pop dx pop bp pop ax pop bx pop ds tret ; ПРОГРАММА ОБРАБОТКИ ВТОРОГО ПРЕРЫВАНИЯ prod!: push ds push bx push ax push bp push dx push es
push ex ; Установить команду выдачи прерывания по Адресу1 mov bx,70h ; сегментный регистр адреса ; обработки прерывания 13h push bx pop ds mov bx,0f86h ; смещение относительно сегментного регистра mov ax,5acdh mov ds:tbxl,ax ; Восстановить Команду? по Адресу? mov bp.sp mov bx,lbp+14] ; tp mov ds,[bp+16] ; cs sub bx,? mov ax,9090h ; Команда? mov ds:[bx],ax ; ds:[bx) - Адрес? mov [bp+14],bx push cs pop ds mov dx.offset prod mov ah,?5h mov al,18h int ?1h pop ex pop es pop dx pop bp pop ax pop bx pop ds iret cseg ends end z Необходимо отметить, что в данном примере, для того чтобы перехватить управление из области DOS, были использованы внед- ренные в его область памяти команды вызова прерывания. Однако это не единственный и не самый лучший вариант. Вместо команд
типа int можно использовать команды jmp, call. Важно - не забы- вать выполнять заменяемые ими первоначальные команды DOS. В том случае, если исследуемая защищенная задача просчиты- вает далеко вперед содержимое DOS или работает непосредственно с BIOS, минуя DOS, единственным способом подсмотреть за ней яв- ляется модификация BIOS. Точно по такому же принципу, следуя которому мы разместили "телекамеру" в области DOS, такая же "телекамера" осторожно закладывается в BIOS. При этом, естест- венно, какие-то ПЗУ придется перепрограммировать и, как завет- ную отмычку, все время носить с собой, "выходя на дело". Кроме того, важным ресурсом, помогающим снимать защиту, является создание специальных устройств, управляющих работой компьютера и реализующих работу программ, которые невозможно запустить обычным способом. Можно предположить, что очередным шагом развития систем снятия защиты будет широкое распространение ретрансляторов, позволяющих восстанавливать программы, написанные на различных языках программирования при условии их смешения.
3.3. Универсальный Раздеватель Основные принципы Основные принципы построения универсального Раздевателя, являющегося одним из представителей динамических методов снятия защиты: а) Раздеватель создает на МД файл, полностью отражающий содержимое оперативной памяти. Для этого в созданный файл копи- руется вся оперативная память, включая и векторное пространство DOS и ПЗУ. б) Исследуемая программа также размещается Раздевателем в файле, именно в том месте и в таком виде, как она выглядит в памяти перед выполнением первой команды. в) Раздеватель выбирает из файла по одной команде и эмули- рует процесс ее наполнения. При этом Раздеватель информирует пользователя о процессе эмуляции, запрашивает в случае необхо- димости коды завершения по тем или иным командам. Раздеватель позволяет отследить все обращения за пределы задачи, к файлам, к векторам, к внешним устройствам. г) Раздеватель попутно дизассемблирует программу. д) Раздеватель позволяет пользователю работать с ним как с обыкновенным отладчиком. При этом, все перечисленные способы защиты (см. глава 1 - БЗОР), в силу того, что защищенной прог- рамме становится недоступен процессор, будут неэффективными. По сути, Раздеватель эмулирует работу не только процессо- ра, но и операционной системы, все функции DOS и BIOS. Попутно Раздеватель является универсальным средством для борьбы с виру- сами, так как в процессе эмуляции выполнения программы позволя- ет отследить все ее "нехорошие" действия и выявить подозритель- ные части программы. Коммерческое название описываемого Универсального Раздева- теля, данное ему разработчиками, - SREDA.
Целью разработки Универсального Раздевателя явилось созда- ние пакета программ анализа исполняемого кода задач, используе- мых для работы на ПЭВМ типа IBM PC в среде DOS. Назначение пакета: а) отладка любых программ без исходных текстов; б) отладка ПЗУ; в) исследование программ на предмет выявления и устранения вирусов и механизмов защиты от ИСК; г) исследование работы DOS, BIOS. Состав пакета В пакет входят модули, реализующие следующие функции: а) дизассемблирование исполняемого кода; б) выполнение и эмуляция выполнения исполняемого кода; в) эмуляция выполнения и информация о функциях DOS; г) отладочный сервис. Порядок работы Работа с пакетом начинается с запуска программы SREDA. Дальнейшая работа может осуществляться по следующим основным позициям: а) Загрузка исследуемой программы (включая модули с расши- рением EXE, COM, BIN, а также прошивки ПЗУ, начиная с указанных адресов). б) Представление исследуемой программы, ее частей, а также среды, в которой она должна выполняться на экране и в файле в виде: ASCII кода, шестнадцатеричного и десятичного дампов, ди- зассемблированного текста. в) Исполнение загружаемой программы с любого адреса и с любыми начальными условиями. г) Возвращение в исследуемую задачу требуемых (задаваемых пользователем) кодов завершения для указанных команд и функций DOS. д) Получение всего трека исполнения программы, а также от-
дельных выделенных типов команд трека. Например, команд типа Int, cmp, In, out. е) Покомандное исполнение загруженной программы с коммен- тариями о назначении и возможных кодах возврата исполняемой в данный момент команды или функции DOS. ж) Исполнение загруженной программы с различными скоростя- ми с отображением хода работы. з) Разрешение прерывания процесса эмуляции (выполнения) от клавиатуры в любой момент. и) Установка меток для остановов: по выбранным адресам; по значению указанных слов или байт исследуемой программы; по значению регистров; по типу команд; по логическим условиям объединяющим информацию в вышепере- численных подпунктах. к) Проверка (лечение) исследуемой задачи на наличие в ней известных типов вирусов, механизмов защиты от ИСК. Требования к Раздевателю а) Пакет должен обеспечивать загрузку и исследование задач независимо от объема занимаемой ими памяти с любыми защитными механизмами от отладчиков и дизассемблеров. б) Пакет не должен допускать в качестве исследуемой загру- жаемой задачи оригинал или копию собственного исполняемого ко- да. Можно отметить некоторые недостатки Раздевателя: трудность эмуляции недокументированных функций DOS, трудность эмуляции динамики работы аппаратуры.
ЗАКЛЮЧЕНИЕ Если возникли непреодолимые трудности при проектировании системы защиты или системы снятия защиты, попробуйте поставить себя на место человека, выполняющего противоположную функцию. Создающий защиту ставит себя на место снимающего защиту и наоборот. Ведь конструктор снаряда пытается думать за конструк- тора брони, создатель противоядия за создателя яда и т.п. Мы постарались изложить в данной книге наш подход по проб- леме организации и преодоления защитных механизмов. Подобное целенаправленное исследование чревато тем, что приводит к выяв- лению новых вопросов, требующих ответа. Мы чистосердечно приз- наем, что не на все вопросы смогли дать ответы, в частности: ни слова не сказали о работе ПЭВМ с процессором 386 и вьгпе в защищенном режиме: не привели примеров программ для блока ответной реакции; не сделали четкой классификации существующих и описанных во второй главе книги пакетов защиты. Как видно из книги, и проблема установки, и проблема снятия защиты далеки от окончательного решения и представляют широкое поле деятельности для пытливого и изощренного ума. А в награду счастливая минута, когда приходит нежданная удача - зевнула собака, и муха в рот влетела.
ЛИТЕРАТУРА 1. Савельева И.В. Будущее правовой охраны программного обеспечения в СССР/ Мир ПК. 1989. N5. 2. Хоффман Х.-И., Россо Ф. Пиратство в компьютерный век/ Мир ПК. 1990. N1. 3. Шарп Р. Незаконное использование программных средств в Великобритании: борьба не закончена/ Мир ПК. 1990. N1. 4. Дорселер ван Б., Лоу С. Европе необходим единый подход к охране программных средств авторским правом/ Мир ПК. 1990. N1. 5. Спенсер Ч. Защита данных/ Мир ПК. 1990. N2. 6. Навозеико Г.Н. Об этике и авторском праве/ Мир ПК. 1990. N2. 7. Афанасьев В.В., Манаев Ю.А. О возможности защиты инфор- мации при ее обработке на ПК/ Мир ПК. 1990. N4. 8. Давыдовский А.И. Максимов В.А. Введение в защиту инфор- мации/ Интеркомпьютер. 1990. N1. 9. Абрамсон. Ф. Д. Экспорт программных продуктов (начало)/ Интеркомпьютер. 1990. N3. 10. Голубев В.В., Дубов П.А., Павлов Г.А. Компьютерные преступления и защита информации в вычислительных системах/ сер. ВТ и ее применение: Новое в жизни, науке, технике. 1990. N9. Знание. М. 48 с. 11. СмидМ.Э., Бранстед Д.К. Стандарт шифрования данных:
прошлое и будущее/ ТИИЭР. т.76. 1988. М5. 12. Герасименко В.А., Размахнин М.К., Родионов В.В. Техни- ческие средства защиты информации/ Зарубежная радиоэлектроника. 1989. N12. 13. Блохинцев А.Г., Кохманюк Д.С., Свиридов И.А. Еще раз о защите информации на IBM РС/ Электронный журнал "Софтпанорама”. 1990. N6(1O). 14. Сяо Д., Керр Д.. Медник С. Защита ЭВМ/ и. мир. 1982. 15. Хоффман. Л. Дж. Современные методы защиты информации/ М. Сов.Радио. 1980. 16. Шнейдер А. Язык ассемблера для персонального компьюте- ра фирмы IBM/ М. Мир. 1988. 17. Нортон П . "Программно-аппаратная реализация компьюте- ра IBM PC". 18. Журден Р. "Справочник программиста на персональном компьютере фирмы IBM". 19. Маркварт Б. От индустриального общества к информацион- ному/ Интеркомпьютер. 1990. N5. 20. Козырев А.Н. Люди и компьютеры в экономическом Зазер- калье/ Интеркомпьютер. 1990. N5. 21. Абрамсон Ф. Д. Экспорт программных продуктов (оконча- ние)/ Интеркомпьютер. 1990. N4. 22. Клаф Р. Зачем покупать программное обеспечение?/ Компьютер Пресс. 1991. N3. 23. Чапкевич Г. Как сделать "отмычку"/ Компьютер. 1991. N1 (4).
Сергей Павлович Расторгуев Николай Николаевич Дмитриевский Искусство защиты и "раздевания" программ Редактор Е.Г.Шаталова Художник В . феногенов Технический редактор В.С.Зиновьев Корректор В.С.Миннибаева Объем 6,0 Тираж ю ООО Заказ 400 Типография Управления делами Секретариата СЭВ