ЗАЩИТА ПРОГРАММ И ДАННЫХ ЛЕКЦИЯ 4. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА ЗАИКИН ОЛЕГ СЕРГЕЕВИЧ, ИМЭИ ИГУ ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА БОЛЬШИНСТВО АТАК ЗАЩИЩЕННЫХ КОМПЬЮТЕРНЫХ СИСТЕМ НАЧИНАЕТСЯ С АНАЛИЗА ПРОГРАММНОЙ РЕАЛИЗАЦИИ ЗАЩИТНЫХ ФУНКЦИЙ СИСТЕМЫ. ДО ТЕХ ПОР ПОКА НАРУШИТЕЛЬ НЕ ПРОВЕДЕТ ДОСТАТОЧНО ПОЛНЫЙ АНАЛИЗ ПРОГРАММНОЙ РЕАЛИЗАЦИИ ЗАЩИТЫ, НАРУШИТЕЛЬ НЕ СМОЖЕТ ИСПОЛЬЗОВАТЬ ДЛЯ ПРЕОДОЛЕНИЯ ЗАЩИТЫ ПРОГРАММНЫЕ УЯЗВИМОСТИ АТАКОВАННОЙ СИСТЕМЫ. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА КРОМЕ ТОГО, АНАЛИЗ ПРОГРАММНЫХ РЕАЛИЗАЦИЙ МОЖЕТ ПРИМЕНЯТЬСЯ ПРОГРАММИСТАМИ ДЛЯ ТОГО, ЧТОБЫ ВЫЯВИТЬ В КОДЕ ПРОГРАММЫ, РАЗРАБОТАННОЙ КОНКУРИРУЮЩЕЙ ФИРМОЙ, ИНТЕРЕСНЫЕ НАХОДКИ, КОТОРЫЕ В ДАЛЬНЕЙШЕМ МОЖНО ИСПОЛЬЗОВАТЬ В СВОИХ ПРОГРАММАХ. КАК ПРАВИЛО, НОВАЯ ТЕХНОЛОГИЯ, РАЗРАБОТАННАЯ СПЕЦИАЛИСТАМИ ОДНОЙ ФИРМЫ, ОЧЕНЬ БЫСТРО ОСВАИВАЕТСЯ КОНКУРЕНТАМИ И НЕ ПОСЛЕДНЮЮ РОЛЬ В ДАННОМ ПРОЦЕССЕ ИГРАЕТ АНАЛИЗ ПРОГРАММНОЙ РЕАЛИЗАЦИИ НОВОЙ ТЕХНОЛОГИИ. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА ИСХОДЯ ИЗ ИЗЛОЖЕННОГО ВЫШЕ, У РАЗРАБОТЧИКОВ ПРОГРАММНОЙ СИСТЕМЫ ЗАЩИТЫ ИНФОРМАЦИИ ЧАСТО ВОЗНИКАЕТ ЕСТЕСТВЕННОЕ ЖЕЛАНИЕ ЗАТРУДНИТЬ АНАЛИЗ РАЗРАБАТЫВАЕМОЙ СИСТЕМЫ ПОТЕНЦИАЛЬНЫМ НАРУШИТЕЛЕМ. ЗА ПОСЛЕДНИЕ 20 — 30 ЛЕТ В ДАННОЙ ОБЛАСТИ БЫЛО ПРОВЕДЕНО МНОЖЕСТВО ИССЛЕДОВАНИЙ, В РЕЗУЛЬТАТЕ КОТОРЫХ БЫЛ РАЗРАБОТАН ЦЕЛЫЙ РЯД СРЕДСТВ И МЕТОДОВ, ПОЗВОЛЯЮЩИХ УВЕЛИЧИТЬ ТРУДОЕМКОСТЬ АНАЛИЗА ЗАЩИЩАЕМОЙ ПРОГРАММЫ В ДЕСЯТКИ РАЗ. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА В КОНЦЕ 1980-Х И НАЧАЛЕ 1990-Х ГГ. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА ПРИМЕНЯЛАСЬ ОЧЕНЬ ШИРОКО. ДОХОДИЛО ДО ТОГО, ЧТО ОТСУТСТВИЕ В ПРОГРАММЕ СРЕДСТВ ЗАЩИТЫ ОТ АНАЛИЗА РАССМАТРИВАЛОСЬ КАК ПРОЯВЛЕНИЕ НЕПРОФЕССИОНАЛИЗМА РАЗРАБОТЧИКОВ. ОДНАКО В ПЕРВОЙ ПОЛОВИНЕ 1990-Х ГГ. СИТУАЦИЯ КАРДИНАЛЬНО ИЗМЕНИЛАСЬ, БОЛЬШИНСТВО РАЗРАБОТЧИКОВ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ПЕРЕСТАЛИ ВКЛЮЧАТЬ В СВОИ ПРОГРАММЫ СРЕДСТВА ЗАЩИТЫ ОТ АНАЛИЗА. ЭТО ОБУСЛОВЛЕНО СЛЕДУЮЩИМИ ФАКТОРАМИ: • НАЛИЧИЕ В ПРОГРАММЕ СРЕДСТВ ЗАЩИТЫ ОТ АНАЛИЗА ЗАМЕТНО УСЛОЖНЯЕТ ОТЛАДКУ ПРОГРАММЫ И ТЕМ САМЫМ СНИЖАЕТ ЕЕ НАДЕЖНОСТЬ; ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА • ЗАЩИТА ОТ АНАЛИЗА МОЖЕТ ДАВАТЬ ЛОЖНЫЕ СРАБАТЫВАНИЯ ПРИ ЗАПУСКЕ ЗАЩИЩЕННОЙ ПРОГРАММЫ В НЕОБЫЧНОЙ ПРОГРАММНО-АППАРАТНОЙ СРЕДЕ: НА НОВОЙ МОДЕЛИ ПРОЦЕССОРА, В НОВОЙ ВЕРСИИ ОПЕРАЦИОННОЙ СИСТЕМЫ, В ЭМУЛЯТОРЕ И Т.П. НАПРИМЕР, С ПОЯВЛЕНИЕМ ПРОЦЕССОРА PENTIUM I ОКОЛО ПОЛОВИНЫ ПРОГРАММ, ЗАЩИЩЕННЫХ ОТ АНАЛИЗА, СТАЛИ ОБНАРУЖИВАТЬ ОТЛАДЧИК ПРИ ЛЮБОМ ЗАПУСКЕ НА ЭТОМ ПРОЦЕССОРЕ; • МЕХАНИЗМЫ ЮРИДИЧЕСКОЙ ЗАЩИТЫ АВТОРСКИХ ПРАВ ЗА ПРОШЕДШИЕ ГОДЫ СИЛЬНО УСОВЕРШЕНСТВОВАЛИСЬ. ДЛЯ БОЛЬШИНСТВА ПРОГРАММ НЕОБХОДИМОСТЬ В ЗАЩИТЕ ОТ АНАЛИЗА ПРОГРАММНЫМИ СРЕДСТВАМИ ОТПАЛА; ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА • ОПЕРАЦИОННАЯ СИСТЕМА MS-DOS БЫЛА ВЫТЕСНЕНА ОПЕРАЦИОННЫМИ СИСТЕМАМИ WINDOWS, OS/2 И UNIX, В КОТОРЫХ ЗАЩИТА ОТ АНАЛИЗА РЕАЛИЗУЕТСЯ ЗАМЕТНО СЛОЖНЕЕ. СЕЙЧАС ЗАЩИТА ОТ АНАЛИЗА ВКЛЮЧАЕТСЯ В ПРОГРАММЫ ДОВОЛЬНО РЕДКО, В ОСНОВНОМ В СЛЕДУЮЩИЕ ВИДЫ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ: • ПРОГРАММЫ, ОСНАЩЕННЫЕ ЗАЩИТОЙ ОТ НЕСАНКЦИОНИРОВАННОГО КОПИРОВАНИЯ — ОБЫЧНО ОЧЕНЬ ДОРОГИЕ ПРОГРАММЫ ЛИБО ПРОГРАММЫ, ПРЕДНАЗНАЧЕННЫЕ ДЛЯ ОБРАБОТКИ СТРОГО КОНФИДЕНЦИАЛЬНОЙ ИНФОРМАЦИИ; • ПРОГРАММНЫЕ ЗАКЛАДКИ, В ТОМ ЧИСЛЕ И КОМПЬЮТЕРНЫЕ ВИРУСЫ. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА ПРИНИМАЯ РЕШЕНИЕ О ТОМ, ВКЛЮЧАТЬ ЛИ В РАЗРАБАТЫВАЕМЫЙ ПРОГРАММНЫЙ ПРОДУКТ СРЕДСТВА ЗАЩИТЫ ОТ АНАЛИЗА, РАЗРАБОТЧИК ПРЕЖДЕ ВСЕГО ДОЛЖЕН РЕШИТЬ ДЛЯ СЕБЯ ВОПРОС О ЦЕЛЕСООБРАЗНОСТИ ДАННОГО ШАГА. С ОДНОЙ СТОРОНЫ, ЗАЩИТА ОТ АНАЛИЗА ЗАТРУДНЯЕТ ПОИСК УЯЗВИМОСТЕЙ, ЗАТРУДНЯЕТ НЕСАНКЦИОНИРОВАННОЕ КОПИРОВАНИЕ ПРОГРАММЫ (ЕСЛИ В ПРОГРАММЕ ЕСТЬ СРЕДСТВА ЗАЩИТЫ ОТ КОПИРОВАНИЯ), ПОЗВОЛЯЕТ НА НЕКОТОРОЕ ВРЕМЯ СОХРАНИТЬ В ТАЙНЕ ОРИГИНАЛЬНЫЕ АЛГОРИТМИЧЕСКИЕ РЕШЕНИЯ, РЕАЛИЗОВАННЫЕ В ПРОГРАММЕ. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА С ДРУГОЙ СТОРОНЫ, ЗАЩИТА ОТ АНАЛИЗА ЗАТРУДНЯЕТ РАЗРАБОТКУ И ОТЛАДКУ ПРОГРАММЫ, СНИЖАЕТ НАДЕЖНОСТЬ ПРОГРАММЫ. НЕИЗБЕЖНЫЕ СБОИ В СИСТЕМЕ ЗАЩИТЫ ОТ АНАЛИЗА ВЫЗЫВАЮТ У ПОЛЬЗОВАТЕЛЕЙ ЕСТЕСТВЕННОЕ РАЗДРАЖЕНИЕ, ЧТО СНИЖАЕТ КОНКУРЕНТОСПОСОБНОСТЬ ПРОГРАММЫ. КРОМЕ ТОГО, НИКАКАЯ ЗАЩИТА НЕ ЯВЛЯЕТСЯ АБСОЛЮТНОЙ, ПРИ НАЛИЧИИ У НАРУШИТЕЛЯ НЕОГРАНИЧЕННОГО ВРЕМЕНИ И СРЕДСТВ ЛЮБАЯ ЗАЩИТА РАНО ИЛИ ПОЗДНО БУДЕТ ВЗЛОМАНА. В БОЛЬШИНСТВЕ СЛУЧАЕВ ОСНАЩЕНИЕ ПРОГРАММЫ СРЕДСТВАМИ ЗАЩИТЫ ОТ АНАЛИЗА НЕ ОПРАВДЫВАЕТ СЕБЯ. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА С ДРУГОЙ СТОРОНЫ, ЗАЩИТА ОТ АНАЛИЗА ЗАТРУДНЯЕТ РАЗРАБОТКУ И ОТЛАДКУ ПРОГРАММЫ, СНИЖАЕТ НАДЕЖНОСТЬ ПРОГРАММЫ. НЕИЗБЕЖНЫЕ СБОИ В СИСТЕМЕ ЗАЩИТЫ ОТ АНАЛИЗА ВЫЗЫВАЮТ У ПОЛЬЗОВАТЕЛЕЙ ЕСТЕСТВЕННОЕ РАЗДРАЖЕНИЕ, ЧТО СНИЖАЕТ КОНКУРЕНТОСПОСОБНОСТЬ ПРОГРАММЫ. КРОМЕ ТОГО, НИКАКАЯ ЗАЩИТА НЕ ЯВЛЯЕТСЯ АБСОЛЮТНОЙ, ПРИ НАЛИЧИИ У НАРУШИТЕЛЯ НЕОГРАНИЧЕННОГО ВРЕМЕНИ И СРЕДСТВ ЛЮБАЯ ЗАЩИТА РАНО ИЛИ ПОЗДНО БУДЕТ ВЗЛОМАНА. В БОЛЬШИНСТВЕ СЛУЧАЕВ ОСНАЩЕНИЕ ПРОГРАММЫ СРЕДСТВАМИ ЗАЩИТЫ ОТ АНАЛИЗА НЕ ОПРАВДЫВАЕТ СЕБЯ. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА ПРИМЕР ЧРЕЗМЕРНОГО УВЛЕЧЕНИЯ РАЗРАБОТЧИКОВ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ЗАЩИТОЙ ОТ АНАЛИЗА ЯВЛЯЮТСЯ СИСТЕМЫ ЗАЩИТЫ ОТ КОПИРОВАНИЯ, РАЗРАБОТАННЫЕ КОМПАНИЕЙ STARFORCE. ДО 40 % ПОЛЬЗОВАТЕЛЕЙ ПРОГРАММ, ЗАЩИЩЕННЫХ С ПОМОЩЬЮ STARFORCE,ИСПЫТЫВАЮТ ТЕ ИЛИ ИНЫЕ ПРОБЛЕМЫ, СВЯЗАННЫЕ С СИСТЕМОЙ ЗАЩИТЫ ОТ КОПИРОВАНИЯ. НАПРИМЕР, ЛИЦЕНЗИОННАЯ КОМПЬЮТЕРНАЯ ИГРА, ОСНАЩЕННАЯ ЗАЩИТОЙ STARFORCE, ВОСПРИНИМАЛА СЕБЯ КАК КОНТРАФАКТНУЮ КОПИЮ И ОТКАЗЫВАЕТСЯ ЗАПУСКАТЬСЯ. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА НЕКОТОРЫЕ ИСТОЧНИКИ ОТМЕЧАЮТ НАЛИЧИЕ ДО АВГУСТА 2006 Г. ПРОГРАММНЫХ УЯЗВИМОСТЕЙ STARFORCE, ПОЗВОЛЯЮЩИХ НЕПРИВИЛЕГИРОВАННОМУ ПОЛЬЗОВАТЕЛЮ НЕСАНКЦИОНИРОВАННО ПОЛУЧАТЬ АДМИНИСТРАТИВНЫЕ ПОЛНОМОЧИЯ В ОПЕРАЦИОННОЙ СИСТЕМЕ. САЙТ CNET НАЧИНАЯ С 2006 Г. КЛАССИФИЦИРУЕТ STARFORCE КАК ВРЕДОНОСНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА БЫВАЮТ И УДАЧНЫЕ РЕАЛИЗАЦИИ ЗАЩИТЫ ОТ АНАЛИЗА КОДА. НАПРИМЕР, ИЗВЕСТНАЯ ПРОГРАММА SKYPE ОСНАЩЕНА МОЩНЕЙШЕЙ ЗАЩИТОЙ ОТ АНАЛИЗА, КОТОРАЯ, КАК НИ СТРАННО, НИЧУТЬ НЕ СНИЖАЕТ ЭКСПЛУАТАЦИОННЫХ КАЧЕСТВ ПРОГРАММЫ И НЕ ВЫЗЫВАЕТ ЗАМЕТНЫХ СБОЕВ. ВИДИМО, SKYPE ЗАЩИЩАЛИ ОТ АНАЛИЗА СПЕЦИАЛИСТЫ ВЫСОЧАЙШЕЙ КВАЛИФИКАЦИИ. ДРУГОЙ ПРИМЕР УДАЧНОЙ РЕАЛИЗАЦИИ ЗАЩИТЫ ОТ АНАЛИЗА — ВИРУС SOBER (2003 ГОДА), АЛГОРИТМ ФУНКЦИОНИРОВАНИЯ КОТОРОГО УДАЛОСЬ ПОЛНОСТЬЮ ВОССТАНОВИТЬ ЛИШЬ СПУСТЯ ЧЕТЫРЕ МЕСЯЦА ПОСЛЕ НАЧАЛА РАСПРОСТРАНЕНИЯ ВИРУСА. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА ДОПУСТИМ, РАЗРАБОТЧИК, ОЦЕНИВ ВСЕ ПОСЛЕДСТВИЯ СВОЕГО ШАГА, ВСЕ ЖЕ РЕШИЛ ВКЛЮЧИТЬ В РАЗРАБАТЫВАЕМУЮ ПРОГРАММУ СРЕДСТВА ЗАЩИТЫ ОТ АНАЛИЗА. ЭТО МОЖЕТ БЫТЬ СДЕЛАНО ОДНИМ ИЗ ДВУХ СПОСОБОВ. 1. ВСТРОЕННАЯ ЗАЩИТА. СРЕДСТВА ЗАЩИТЫ ОТ АНАЛИЗА ВКЛЮЧАЮТСЯ НЕПОСРЕДСТВЕННО В ИСХОДНЫЙ ТЕКСТ ПРОГРАММЫ В ХОДЕ ЕЕ РАЗРАБОТКИ. ДАННЫЙ ПОДХОД ПОЗВОЛЯЕТ РЕАЛИЗОВЫВАТЬ НАИБОЛЕЕ МОЩНУЮ ЗАЩИТУ, ПРАКТИЧЕСКИ НЕПРОБИВАЕМУЮ ЗА ПРИЕМЛЕМОЕ ВРЕМЯ. С ДРУГОЙ СТОРОНЫ, ПРОЕКТИРОВАНИЕ И КОДИРОВАНИЕ ВСТРОЕННОЙ ЗАЩИТЫ ВЕСЬМА ТРУДОЕМКО И СИЛЬНО ЗАТРУДНЯЕТ ОТЛАДКУ И СОПРОВОЖДЕНИЕ ПРОГРАММНОГО ПРОДУКТА. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА 2. ПРИСТЫКОВОЧНАЯ ЗАЩИТА. СРЕДСТВА ЗАЩИТЫ ОТ АНАЛИЗА ПРИСТЫКОВЫВАЮТСЯ К ГОТОВОМУ ПРОГРАММНОМУ МОДУЛЮ С ИСПОЛЬЗОВАНИЕМ «ВИРУСНЫХ» АЛГОРИТМОВ УЖЕ ПОСЛЕ КОМПИЛЯЦИИ МОДУЛЯ. В ЭТОМ СЛУЧАЕ ЗАЩИТА ОТ АНАЛИЗА НЕ ОКАЗЫВАЕТ НИКАКОГО ВЛИЯНИЯ НА ОТЛАДКУ И СОПРОВОЖДЕНИЕ ПРОГРАММНОГО ПРОДУКТА. РАЗРАБОТКА ЗАЩИТНЫХ ФУНКЦИЙ ВЫПОЛНЯЕТСЯ ОТДЕЛЬНОЙ ГРУППОЙ ПРОГРАММИСТОВ, НИКАК НЕ СВЯЗАННОЙ С ПРОГРАММИСТАМИ, РАЗРАБАТЫВАЮЩИМИ ОСНОВНУЮ ФУНКЦИОНАЛЬНОСТЬ ЗАЩИЩАЕМОГО ПРОДУКТА. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА ЧАСТО СОЗДАНИЕ ПРИСТЫКОВОЧНОЙ ЗАЩИТЫ ОТ АНАЛИЗА ПОРУЧАЕТСЯ ОТДЕЛЬНЫМ ФИРМАМ, ЕСТЬ ДАЖЕ ФИРМЫ, СПЕЦИАЛИЗИРУЮЩИЕСЯ НА СОЗДАНИИ ПРИСТЫКОВОЧНЫХ ЗАЩИТ, НАПРИМЕР УПОМЯНУТАЯ ВЫШЕ STARFORCE. ЕСЛИ К МОЩНОСТИ ЗАЩИТЫ ОТ АНАЛИЗА НЕ ПРЕДЪЯВЛЯЮТСЯ ПОВЫШЕННЫЕ ТРЕБОВАНИЯ, ТО ДЛЯ ЗАЩИТЫ ПРОГРАММЫ МОЖЕТ БЫТЬ ПРИМЕНЕНА ТИПОВАЯ СИСТЕМА, РАНЕЕ РАЗРАБОТАННАЯ ДЛЯ ДРУГОГО ПРОГРАММНОГО ПРОДУКТА ИЛИ ВООБЩЕ УНИВЕРСАЛЬНАЯ, СПОСОБНАЯ ПРИСТЫКОВАТЬСЯ ПРАКТИЧЕСКИ К ЛЮБОМУ ПРОГРАММНОМУ МОДУЛЮ ЗАДАННОГО КЛАССА. С ДРУГОЙ СТОРОНЫ, ПРИСТЫКОВОЧНАЯ ЗАЩИТА НЕ МОЖЕТ БЫТЬ СДЕЛАНА ОЧЕНЬ МОЩНОЙ — КАК ТОЛЬКО АНАЛИТИК СУМЕЕТ «ПРОРВАТЬСЯ» ЧЕРЕЗ БАРЬЕР, СОЗДАВАЕМЫЙ ПРИСТЫКОВОЧНОЙ ЗАЩИТОЙ, ДАЛЬНЕЙШИЙ АНАЛИЗ ПРОГРАММЫ НЕ ВЫЗЫВАЕТ НИКАКИХ ПРОБЛЕМ. ЗАЩИТА ПРОГРАММ ОТ АНАЛИЗА ДАЛЕЕ МЫ РАССМОТРИМ ТИПОВЫЕ МЕТОДЫ ЗАЩИТЫ ПРОГРАММ ОТ АНАЛИЗА. СРАЗУ ОТМЕТИМ, ЧТО НИ ОДИН ИЗ ЭТИХ МЕТОДОВ, ПРИМЕНЕННЫЙ ПО ОТДЕЛЬНОСТИ, НЕ ДАЕТ ЗАМЕТНОГО ЭФФЕКТА. ДЛЯ ПОСТРОЕНИЯ ПО-НАСТОЯЩЕМУ МОЩНОЙ ЗАЩИТЫ СЛЕДУЕТ ПРИМЕНИТЬ В ОДНОЙ ПРОГРАММЕ НЕ МЕНЕЕ 10 —15 РАЗЛИЧНЫХ МЕТОДОВ ЗАЩИТЫ ОТ АНАЛИЗА. КЛАССИФИЦИРОВАТЬ МЕТОДЫ ЗАЩИТЫ ОТ АНАЛИЗА ВЕСЬМА СЛОЖНО. СУЩЕСТВУЮЩИЕ КЛАССИФИКАЦИИ ИМЕЮТ МНОЖЕСТВО НЕДОСТАТКОВ И В НАСТОЯЩЕМ ПОСОБИИ МЫ НЕ БУДЕМ ПЫТАТЬСЯ СТРОИТЬ СТРОЙНУЮ КЛАССИФИКАЦИЮ, А ПРОСТО ПЕРЕЧИСЛИМ МЕТОДЫ ПОДРЯД, В БОЛЕЕ-МЕНЕЕ ПРОИЗВОЛЬНОМ ПОРЯДКЕ. 1. ДИНАМИЧЕСКОЕ ИЗМЕНЕНИЕ КОДА ПРОГРАММЫ ДАННЫЙ МЕТОД ЯВЛЯЕТСЯ ОСНОВНЫМ МЕТОДОМ ПРОТИВОДЕЙСТВИЯ ДИЗАССЕМБЛИРОВАНИЮ ПРОГРАММЫ (СТАТИЧЕСКИЙ МЕТОД АНАЛИЗА). МЕТОД ОСНОВАН НА ТОМ, ЧТО КОД ПРОГРАММЫ, ЗА ИСКЛЮЧЕНИЕМ НЕБОЛЬШОЙ ЧАСТИ — РАСПАКОВЩИКА, ХРАНИТСЯ В ИСПОЛНЯЕМОМ ФАЙЛЕ В ИСКАЖЕННОМ ВИДЕ, А ПРЕОБРАЗУЕТСЯ К НОРМАЛЬНОМУ ВИДУ ЛИШЬ В ОПЕРАТИВНОЙ ПАМЯТИ, В ХОДЕ ВЫПОЛНЕНИЯ ПРОГРАММЫ. ПРИ ПОПЫТКЕ ДИЗАССЕМБЛИРОВАТЬ ПРОГРАММУ С ДИНАМИЧЕСКИ ИЗМЕНЯЕМЫМ КОДОМ ДИЗАССЕМБЛЕР ПРАВИЛЬНО ДИЗАССЕМБЛИРУЕТ ТОЛЬКО РАСПАКОВЩИК (ЕСЛИ В ОТНОШЕНИИ РАСПАКОВЩИКА НЕ ПРИМЕНЕНЫ ДРУГИЕ МЕТОДЫ ЗАЩИТЫ ОТ АНАЛИЗА), А БОЛЬШУЮ ЧАСТЬ КОДА ПРОГРАММЫ ИНТЕРПРЕТИРУЕТ КАК ДАННЫЕ. 1. ДИНАМИЧЕСКОЕ ИЗМЕНЕНИЕ КОДА ПРОГРАММЫ СУТЬ ПРЕОБРАЗОВАНИЯ КОДА МОЖЕТ БЫТЬ РАЗЛИЧНОЙ. В ПРОСТЕЙШЕМ СЛУЧАЕ ИСПОЛЬЗУЮТСЯ СТАНДАРТНЫЕ ПРОГРАММЫ-УПАКОВЩИКИ НАПОДОБИЕ UPX. ТАКИЕ УПАКОВЩИКИ, ПОМИМО ЗАЩИТЫ ОТ ДИЗАССЕМБЛИРОВАНИЯ, ДАЮТ ЕЩЕ ОДИН ПРИЯТНЫЙ ПОБОЧНЫЙ ЭФФЕКТ — ИСПОЛНЯЕМЫЙ ФАЙЛ ПРОГРАММЫ ЗАНИМАЕТ В 1,5— 4 РАЗА МЕНЬШЕ, ЧЕМ ДО УПАКОВКИ, ВПРОЧЕМ, ЭТО ПРЕИМУЩЕСТВО В ЗНАЧИТЕЛЬНОЙ СТЕПЕНИ КОМПЕНСИРУЕТСЯ УВЕЛИЧИВАЮЩИМСЯ ВРЕМЕНЕМ ЗАГРУЗКИ УПАКОВАННОГО ПРОГРАММНОГО МОДУЛЯ. 1. ДИНАМИЧЕСКОЕ ИЗМЕНЕНИЕ КОДА ПРОГРАММЫ В БОЛЕЕ СЛОЖНЫХ ЗАЩИТАХ ДИНАМИЧЕСКОЕ АРХИВИРОВАНИЕ КОДА ДОПОЛНЯЕТСЯ ШИФРОВАНИЕМ. КЛЮЧ ШИФРОВАНИЯ МОЖЕТ БЫТЬ ЖЕСТКО ФИКСИРОВАННЫМ ЛИБО ПОСТУПАТЬ ИЗ КАКОГО-ТО ВНЕШНЕГО ИСТОЧНИКА. НАПРИМЕР, ЕСЛИ ПРОГРАММА ЗАЩИЩЕНА ОТ КОПИРОВАНИЯ С ПОМОЩЬЮ ВНЕШНЕГО АППАРАТНОГО УСТРОЙСТВА, ПОСТАВЛЯЕМОГО ВМЕСТЕ С ПРОГРАММОЙ И ПОДКЛЮЧАЕМОГО К ОДНОМУ ИЗ ПОРТОВ КОМПЬЮТЕРА ПЕРЕД ЗАПУСКОМ ПРОГРАММЫ, КЛЮЧ, НЕОБХОДИМЫЙ ДЛЯ РАСПАКОВКИ КОДА ПРОГРАММЫ, МОЖЕТ СЧИТЫВАТЬСЯ С ЭТОГО УСТРОЙСТВА. 1. ДИНАМИЧЕСКОЕ ИЗМЕНЕНИЕ КОДА ПРОГРАММЫ ЕСЛИ РАСПАКОВКА КОДА ВЫПОЛНЯЕТСЯ ТОЛЬКО ОДИН РАЗ ПРИ ЗАПУСКЕ ПРОГРАММЫ, АНАЛИТИК ВСЕ-ТАКИ МОЖЕТ ДИЗАССЕМБЛИРОВАТЬ ПРОГРАММУ, ВЗЯВ В КАЧЕСТВЕ ВХОДНЫХ ДАННЫХ СОДЕРЖИМОЕ ОПЕРАТИВНОЙ ПАМЯТИ В ТОТ МОМЕНТ, КОГДА ПРОГРАММА ПОЛНОСТЬЮ РАСПАКОВАНА. ДЛЯ ПОВЫШЕНИЯ ЭФФЕКТИВНОСТИ ЗАЩИТЫ КОДА ОТ АНАЛИЗА ПРЕОБРАЗОВАНИЕ КОДА ВЫПОЛНЯЮТ ПО ЧАСТЯМ. В РАСПАКОВАННОМ СОСТОЯНИИ НАХОДЯТСЯ ЛИШЬ ТЕ ФРАГМЕНТЫ КОДА ПРОГРАММЫ, КОТОРЫЕ ВЫПОЛНЯЮТСЯ В ДАННЫЙ МОМЕНТ ЛИБО БУДУТ ВЫПОЛНЯТЬСЯ В БЛИЖАЙШЕМ БУДУЩЕМ, А ВСЕ ФРАГМЕНТЫ КОДА, ВЫПОЛНЕНИЕ КОТОРЫХ В БЛИЖАЙШЕЕ ВРЕМЯ НЕ ПЛАНИРУЕТСЯ, СНОВА ПРЕОБРАЗУЮТСЯ В УПАКОВАННЫЙ ВИД ЛИБО ВООБЩЕ ВЫТЕСНЯЮТСЯ ИЗ ПАМЯТИ. ЕСЛИ В ПРОГРАММЕ РЕАЛИЗОВАНА ДАННАЯ СХЕМА, ДИЗАССЕМБЛИРОВАНИЕ ОПЕРАТИВНОЙ ПАМЯТИ, ЗАНИМАЕМОЙ ПРОГРАММОЙ, НЕ ПРИВОДИТ К УСПЕХУ НИ В КАКОЙ МОМЕНТ ВРЕМЕНИ. 1. ДИНАМИЧЕСКОЕ ИЗМЕНЕНИЕ КОДА ПРОГРАММЫ ДИНАМИЧЕСКОЕ ИЗМЕНЕНИЕ КОДА ПРОГРАММЫ, ВЫПОЛНЯЕМОЕ НЕ ОДНОМОМЕНТНО, А РЕГУЛЯРНО, ФАКТИЧЕСКИ ДЕЛАЕТ ПРОГРАММУ ОВЕРЛЕЙНОЙ — И КАЖДЫЙ МОМЕНТ ВРЕМЕНИ БОЛЬШАЯ ЧАСТЬ КОДА ПРОГРАММЫ НЕДОСТУПНА ДЛЯ ОТЛАДОЧНЫХ СРЕДСТВ. ПОЭТОМУ ДАННЫЙ СПОСОБ ДИНАМИЧЕСКОГО ИЗМЕНЕНИЯ КОДА ПОЗВОЛЯЕТ ОБЕСПЕЧИТЬ ЗАЩИТУ НЕ ТОЛЬКО ОТ СТАТИЧЕСКОГО, НО И ОТ ДИНАМИЧЕСКОГО МЕТОДА АНАЛИЗА КОДА. 1. ДИНАМИЧЕСКОЕ ИЗМЕНЕНИЕ КОДА ПРОГРАММЫ ОСОБЕННО МОЩНАЯ ЗАЩИТА ОБЕСПЕЧИВАЕТСЯ В ТОМ СЛУЧАЕ, ЕСЛИ В ПРОГРАММЕ ПОДДЕРЖИВАЕТСЯ НЕСКОЛЬКО РАЗЛИЧНЫХ АЛГОРИТМОВ МОДИФИКАЦИИ КОДА, И ПРИ КАЖДОЙ УПАКОВКЕ ФРАГМЕНТА КОДА АЛГОРИТМ УПАКОВКИ ВЫБИРАЕТСЯ СЛУЧАЙНЫМ ОБРАЗОМ (ПРИ РАСПАКОВКЕ КОДА ВЫБОР АЛГОРИТМА ОДНОЗНАЧЕН). ТАКЖЕ ПОВЫШАЕТ ЭФФЕКТИВНОСТЬ ЗАЩИТЫ ОТ АНАЛИЗА СЛУЧАЙНЫЙ ВЫБОР АДРЕСОВ ОПЕРАТИВНОЙ ПАМЯТИ, ПО КОТОРЫМ РАЗМЕЩАЮТСЯ РАСПАКОВАННЫЕ ФРАГМЕНТЫ КОДА. 1. ДИНАМИЧЕСКОЕ ИЗМЕНЕНИЕ КОДА ПРОГРАММЫ НАИБОЛЕЕ МОЩНОЙ МОДИФИКАЦИЕЙ ДАННОГО МЕТОДА ЯВЛЯЕТСЯ ПРИМЕНЕНИЕ ПОЛИМОРФНЫХ ПРЕОБРАЗОВАНИЙ КОДА, ПРИ КОТОРОМ ПРЕОБРАЗОВАНИЕ МОДИФИЦИРУЕМОГО КОДА НЕ ЯВЛЯЕТСЯ ВЗАИМНО ОДНОЗНАЧНЫМ, Т. Е. ПОСЛЕ УПАКОВКИ И ПОСЛЕДУЮЩЕЙ РАСПАКОВКИ КОДА ПОЛУЧАЕТСЯ КОД, НЕ ИДЕНТИЧНЫЙ ОРИГИНАЛУ, НО ВЫПОЛНЯЮЩИЙ ТЕ ЖЕ САМЫЕ ДЕЙСТВИЯ. 1. ДИНАМИЧЕСКОЕ ИЗМЕНЕНИЕ КОДА ПРОГРАММЫ ПЕРЕЧИСЛИМ НЕКОТОРЫЕ НАИБОЛЕЕ ПРОСТЫЕ ПОЛИМОРФНЫЕ ПРЕОБРАЗОВАНИЯ: • «ЗАСЕИВАНИЕ» КОДА «ПУСТЫШКАМИ» — КОМАНДАМИ ИЛИ НАБОРАМИ КОМАНД, НЕ ВЫПОЛНЯЮЩИМИ НИКАКИХ ДЕЙСТВИЙ, НАПРИМЕР: A=A; ИЛИ A = B; B = A; 1. ДИНАМИЧЕСКОЕ ИЗМЕНЕНИЕ КОДА ПРОГРАММЫ • ЗАМЕНА КОМАНД СИНОНИМАМИ, НАПРИМЕР ЗАМЕНА A = B; СЛЕДУЮЩИМ C = B; A = C; B = C; 1. ДИНАМИЧЕСКОЕ ИЗМЕНЕНИЕ КОДА ПРОГРАММЫ СУЩЕСТВУЮТ И ДРУГИЕ, БОЛЕЕ СЛОЖНЫЕ ПОЛИМОРФНЫЕ ПРЕОБРАЗОВАНИЯ. НА АККУРАТНАЯ И БЕЗОШИБОЧНАЯ РЕАЛИЗАЦИЯ ДАЖЕ ПРОСТЕЙШИХ ПОЛИМОРФНЫХ ПРЕОБРАЗОВАНИЙ, ПЕРЕЧИСЛЕННЫХ ВЫШЕ, ЯВЛЯЕТСЯ СЕРЬЕЗНЫМ ИСПЫТАНИЕМ ДЛЯ ПРОГРАММИСТА. ДАЖЕ САМАЯ МЕЛКАЯ И НЕЗНАЧИТЕЛЬНАЯ ОШИБКА В АЛГОРИТМЕ ПРЕОБРАЗОВАНИЯ КОДА РАНО ИЛИ ПОЗДНО ПРИВОДИТ К КРАХУ ЗАЩИЩАЕМОЙ ПРОГРАММЫ, ПРИЧЕМ ЛОКАЛИЗОВАТЬ МЕСТО ОШИБКИ, КАК ПРАВИЛО, ВЕСЬМА СЛОЖНО. 2. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ СТРУКТУРЫ ПРОГРАММЫ ДАННЫЙ МЕТОД ЗАКЛЮЧАЕТСЯ В ТОМ, ЧТО ДЛЯ ПЕРЕДАЧИ УПРАВЛЕНИЯ ИЗ ОДНОЙ ФУНКЦИИ ЗАЩИЩАЕМОЙ ПРОГРАММЫ В ДРУГУЮ ИСПОЛЬЗУЮТСЯ НЕ ОБЫЧНЫЕ КОМАНДЫ, А БОЛЕЕ СЛОЖНЫЕ КОНСТРУКЦИИ, НАПРИМЕР: • ВЫЗОВ ФУНКЦИИ ЧЕРЕЗ УКАЗАТЕЛЬ НА НЕЕ (КОСВЕННЫЙ ВЫЗОВ); 2. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ СТРУКТУРЫ ПРОГРАММЫ УКАЗАТЕЛИ НА ФУНКЦИИ — АДРЕС ФУНКЦИИ, РАСПОЛОЖЕННЫЙ В ОПЕРАТИВНОЙ ПАМЯТИ. ЭТОТ АДРЕС МОЖНО ПРИСВОИТЬ УКАЗАТЕЛЮ В КАЧЕСТВЕ ЕГО ЗНАЧЕНИЯ. АДРЕСОМ ФУНКЦИИ ЯВЛЯЕТСЯ ЕЕ ТОЧКА ВХОДА. ИМЕННО ЭТОТ АДРЕС ИСПОЛЬЗУЕТСЯ ПРИ ВЫЗОВЕ ФУНКЦИИ. ТАК КАК УКАЗАТЕЛЬ ХРАНИТ АДРЕС ФУНКЦИИ, ТО ОНА МОЖЕТ БЫТЬ ВЫЗВАНА С ПОМОЩЬЮ ЭТОГО УКАЗАТЕЛЯ. ОН ПОЗВОЛЯЕТ ТАКЖЕ ПЕРЕДАВАТЬ ЕЕ ДРУГИМ ФУНКЦИЯМ В КАЧЕСТВЕ АРГУМЕНТА. В ПРОГРАММЕ НА ЯЗЫКЕ СИ АДРЕСОМ ФУНКЦИИ СЛУЖИТ ЕЕ ИМЯ БЕЗ СКОБОК И АРГУМЕНТОВ (ЭТО ПОХОЖЕ НА АДРЕС МАССИВА, КОТОРЫЙ РАВЕН ИМЕНИ МАССИВА БЕЗ ИНДЕКСОВ). 2. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ СТРУКТУРЫ ПРОГРАММЫ РАССМОТРИМ СЛЕДУЮЩУЮ ПРОГРАММУ, В КОТОРОЙ СРАВНИВАЮТСЯ ДВЕ СТРОКИ, ВВЕДЕННЫЕ ПОЛЬЗОВАТЕЛЕМ. ОБРАТИТЕ ВНИМАНИЕ НА ОБЪЯВЛЕНИЕ ФУНКЦИИ CHECK() И УКАЗАТЕЛЬ P ВНУТРИ MAIN(). УКАЗАТЕЛЬ P, КАК ВЫ УВИДИТЕ, ЯВЛЯЕТСЯ УКАЗАТЕЛЕМ НА ФУНКЦИЮ. 2. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ СТРУКТУРЫ ПРОГРАММЫ В первую очередь рассмотрим объявление указателя p в main(): int (*p)(const char *, const char *); Это объявление сообщает компилятору, что p — это указатель на функцию, имеющую два параметра типа const char * и возвращающую значение типа int. Скобки вокруг p необходимы для правильной интерпретации объявления компилятором. Подобная форма объявления используется также для указателей на любые другие функции, нужно лишь внести изменения в зависимости от возвращаемого типа и параметров функции. 2. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ СТРУКТУРЫ ПРОГРАММЫ Можно было не использовать указатель на функцию и вообще функцию check(). Вместо этого сравнить их напрямую if (!strcmp(s1, s2)) printf("Equal"); else printf("Not equal"); Но в результате использования указателя и добавления функции структура исходного кода усложнилась, и программу теперь сложнее анализировать. 3. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ АЛГОРИТМОВ ОБРАБОТКИ ДАННЫХ Этот метод заключается в том, что данные, используемые защищаемыми от анализа алгоритмами, обрабатываются необычно сложным образом. Перечислим несколько способов искусственного усложнения алгоритмов данных: • многократное копирование данных с места на место; • применение к данным сложных преобразований, в том числе и криптографических. 3. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ АЛГОРИТМОВ ОБРАБОТКИ ДАННЫХ Пример. GenerateRSAKeyPair (pOpenKey1, pSecretKey1) ; RSAEncrypt (pCriticalData, pCriticalDataEncrypted, pOpenKeyl, pSecretKey1) ; memset (pCriticalData, 0, CriticalDataSize) ; RSADecrypt (pCriticalDataEncrypted, pCriticalDataCopy, DoSomething (pCriticalDataCopy); По сути здесь идет «лишнее» шифрование и дешифрование данных (которое запутывает аналитика), и уже к расшифрованным данным применяется функция, которая и делает что-то фактически нужное. 3. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ АЛГОРИТМОВ ОБРАБОТКИ ДАННЫХ • создание большого числа копий одних и тех же данных, из всех этих копий по назначению используется лишь одна, а остальные подвергаются ненужным «мусорным» проверкам и преобразованиям, отвлекающим на себя внимание аналитика. Желательно, чтобы эти «мусорные» проверки и преобразования были максимально похожи на те, которые пытается обнаружить аналитик. Например, если от анализа защищается алгоритм проверки регистрационного кода программы, целесообразно применить к введенному регистрационному коду несколько «подозрительных» алгоритмов: сравнить его с несколькими строками, внешне похожими на правильный регистрационный код, вычислить несколько разных хеш-функций и т.п.; 3. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ АЛГОРИТМОВ ОБРАБОТКИ ДАННЫХ • разбиение алгоритма обработки данных на несколько фрагментов, передача управления между которыми осуществляется с использованием методов искусственного усложнения структуры программы; • если при обработке данных обнаруживается ошибка, реакция на ошибку не должна быть немедленной. Программа должна отметить наличие ошибки, но отреагировать на нее лишь через некоторое время, при этом схема передачи управления в обработчик ошибки должна быть искусственно усложнена. Аналитик не должен иметь возможности быстро определить, в каком именно месте программы возникла ошибка; 3. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ АЛГОРИТМОВ ОБРАБОТКИ ДАННЫХ • для хранения промежуточных результатов преобразования данных полезно использовать искусственно усложненные форматы, например: RC6Encrypt (IsPasswordCorrect (Password) ? SomeStringl : SomeString2, pBuffer, SomeString3, DataSize); Здесь вместо булевской переменной, содержащей результат проверки пароля, в памяти программы хранится буфер с некоторыми данными, зашифрованными на одном из двух возможных ключей. • хранение данных в необычных местах, например в области дополнительных данных окна или в локальном хранилище данных потока. 3. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ АЛГОРИТМОВ ОБРАБОТКИ ДАННЫХ Обфускация - приведение исходного текста или исполняемого кода программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции. Пример программы для автоматической обфускации исходных текстов на языке C++. StarForce C++ Obfuscator - предназначен для преобразования исходных текстов программ, написанных на языках C и C++, с целью их защиты от реверсинжиниринга. В результате код программы получает надежную защиту от анализа, выполняемого как человеком, так и машиной. 3. ИСКУССТВЕННОЕ УСЛОЖНЕНИЕ АЛГОРИТМОВ ОБРАБОТКИ ДАННЫХ StarForce C++ Obfuscator поддерживает более 30 методов обфускации, которые можно независимо включать, выключать и настраивать с помощью конфигурационного файла. Среди наиболее эффективных методов можно назвать: • преобразование кода С++ в код виртуальной машины; • шифрование строк и массивов; • преобразование кода в цифровой автомат; • введение ложных связей; • объединение участков кода. ПРАКТИКА 1 Белей Евгения Геннадьевна 2 Белькова Анна Михайловна 3 Буянтуев Гэсэр Жаргалович 4 Витвицкий Константин Сергеевич 5 Гусева Дарья Игоревна 6 Дудник Антон Владимирович 7 Емельянов Вячеслав Евгеньевич 8 Ильиных Юрий Аркадьевич 9 Карнакова Ирина Владимировна 10 Литвинцев Роман Александрович 11Луговой Дмитрий Дмитриевич 12 Лузгин Павел Геннадьевич 13 Садыков Ринат Николаевич 1 Хамаганова Марина Олеговна 2 Харькова Татьяна Павловна 3 Черных Юлия Игоревна Написать 2 программы на языке C++. В программе № 2 реализовать защиту исходного кода от анализа. с использованием указателя на функцию. http://sat.isa.ru/pdsat/files/teaching/C++.Task1.Summantion.doc http://sat.isa.ru/pdsat/files/teaching/C++.Task2.Arrays+functions.doc