Научная статья на тему 'Алгоритм автоматического декодирования упакованных исполняемых файлов в исходные тексты языка Ассемблера'

Алгоритм автоматического декодирования упакованных исполняемых файлов в исходные тексты языка Ассемблера Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
405
73
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Алгоритм автоматического декодирования упакованных исполняемых файлов в исходные тексты языка Ассемблера»

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

Список использованных источников

1. Гусаков А.А. Реструктуризация строительных знаний на основе функционально-системного подхода // Промышленное и гражданское строительство. 2003. № 1. С. 33-36.

2. Поспелов Г. С. Искусственный интеллект - основа новой информационной технологии. - М.: Наука, 1988.

Козачок В.И., Мацкевич А.Г.

АЛГОРИТМ АВТОМАТИЧЕСКОГО ДЕКОДИРОВАНИЯ УПАКОВАННЫХ ИСПОЛНЯЕМЫХ ФАЙЛОВ В ИСХОДНЫЕ ТЕКСТЫ ЯЗЫКА АССЕМБЛЕРА

Академия ФСО России, г.Орел

Введение

В современных условиях информатизации общества использование антивирусных средств стало неотъемлемой составляющей при построении систем защиты персональных компьютеров и сетей в целом. При этом особую актуальность приобрели вопросы разработки новых интеллектуальных средств обнаружения вредоносного кода.

В настоящее время наиболее широкое применение находят следующие механизмы обнаружения вирусов и программных закладок [1, с. 156-162]:

- сигнатурный поиск, т. е. поиск по последовательности байт вредоносного кода, однозначно характеризующего его;

- эвристический поиск, обеспечивающий обнаружение вирусов и программных закладок по некоторым косвенным признакам, характеризующим программный код как вредоносный.

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

Общими для этих механизмов являются следующими недостатки:

- ограниченные возможности обнаружения новых вирусов;

- ограниченные возможности обнаружения упакованных и полиморфных вирусов 5, 6 уровней.

Поэтому авторы считают актуальной задачу разработки системы интеллектуального обнаружения вирусов, учитывающей синтаксис и семантику исследуемой программы. Неотъемлемой частью данной системы является

подсистема декодирования исполняемых упакованных файлов в исходные тексты языка Ассемблера.

Под упакованным исполняемым файлом понимается исполняемый файл, прошедший обработку и структурное изменение под воздействием особого вида программ (упаковщиков), для сжатия и затруднения анализа программного кода.

Упаковщики исполняемых файлов можно условно разделить на 2 типа: сжимающие - цель которых, устранение избыточности программного кода, соответственно уменьшение размера файла (например, UPX, AsPack, NsPack) и протекторы, дополнительно обладающие функцией затруднения исследования программы на предмет ее безопасности (например, PeCompact, AsPro-tect, Yoda, Obsidium, Telock, Armadillo, Orient).

Характеристика способов защиты от анализа [2, c. 345], представлена в табл. 1. Необходимо отметить, что не все из перечисленных методов затруднения исследования программного кода, можно преодолеть программным путем.

Таблица 1

Способы защиты от анализа программного кода________________

№ п/п Способ защиты Комментарий

1. Сжатие и/или шифрование тела кода программы Защита от дизассемблирования программы.

2. Использование временных меток, для контроля времени выполнения программы Защита от отладки программы.

3. Использование механизмов проверки целостности машинного кода в виртуальной памяти Защита от отладки программы, используется принцип функционирования отладчиков.

4. Использование механизмов генерации структурных исключений (БЕН) Затруднение исследования программы под отладчиком, различные вариации данного метода позволяют также определить наличие аппаратных точек останова программы.

5. Серединный вызов импортируемых функций Затруднение исследования программы под.

6. Скрытое определение адресов импортируемых функций по заголовку спроецированной в адресное пространство процесса библиотеки Затруднение распаковки исполняемого файла в виртуальной машине.

7. Использование служебных структур исследуемого процесса, заполняемых загрузчиком исполняемых файлов Затруднение эмуляции программы в виртуальной машине.

Алгоритм автоматического декодирования упакованных исполняемых файлов в исходные тексты языка Ассемблера

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

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

Функциональная модель процесса автоматического декодирования упакованных исполняемых файлов в исходные тексты языка Ассемблера, представленная на рис. 1, состоит из 3 взаимосвязанных этапов:

1) проверки пригодности файла к декодированию (проверки корректности заголовков исполняемого файла);

2) распаковки файла (определение факта упакованности файла, загрузки в виртуальную память, эмуляции выполнения машинных команд процессора, обработки возникающих при выполнении структурных исключений и определения факта перехода на оригинальную точку входа в программу;

3) дизассемблирования полученного образа распакованной программы и вывода на экран результатов дизассемблирования.

Модель ОС '^ГшхЗоч'з и спецификация

Спецификация процессоров

Исследуемый файл

Спецификация РЕ файла

Корректный^

процессоров ІА32

Распакованный

ІА32

Проверка щи иго дно с ти ф а ила к файл Распаковка файла Дизассемблирование полученного образа

декодированию

Исходные тексты программы на языке Ассемблера

Рис. 1. Функциональная модель процесса автоматического декодирования упакованных исполняемых файлов в исходные тексты языка Ассемблера

Функциональная модель позволила обобщить перечень задач декодирования упакованных исполняемых файлов. Основными из них являются:

1) реализация виртуального процессора ^32;

2) определение факта того, что файл упакован;

3) эмуляция элементов исполнительной системы операционной системы Windows (виртуального адресного пространства, загрузчика файлов в память, формирования служебных структур для исследуемого файла, эмуляции выполнения машинных команд, эмуляции выполнения импортируемых функций);

4) определение факта того, что файл распакован, и определение адреса первой команды распакованного образа программы;

5) разработка алгоритма (декодирования) дизассемблирования полученного образа в исходные тексты языка Ассемблера.

Алгоритмизация процесса декодирования упакованных исполняемых файлов в исходные тексты языка Ассемблера (рис. 2) состоит из 3 этапов: проверки корректности заголовков исполняемого файла с названием X, распаковки файла, блок-схема данной процедуры представлена на рис. 3, и ди-

зассемблирования каждой экспортируемой функции. При этом необходимо отметить, что алгоритм дизассемблирования является интеллектуальным (эмулируется алгоритм процесса псевдо выполнения программы), что достигается за счет определения типа дизассемблированной команды, и в случае наличие команды управления определения адреса возможного перехода. В табл. 2 представлены мнемонические обозначения, примененные в блок-схемах алгоритмов 2, 3.

Таблица 2

Обозначения, примененные в блок-схемах алгоритмов_______________

Обозначение Комментарий

Б1Р адрес в виртуальном адресном пространстве исследуемого файла текущей команды;

Len длина текущей команды;

ОБР оригинальная точка входа в программы (т.е. точка входа в распакованный файл);

РшЬ(<адрес>) операция помещения в стек адреса (длина адреса 32 бита);

Адрес = Рор() операция извлечения из стека 32 битное значение и присвоить его переменной Адрес.

Для определения факта того, что файл упакован (рис. 3) используется энтропийный подход (вычисляется энтропия каждой секции). Экспериментальные исследования, проведенные авторами на большой статистике упакованных и неупакованных файлов, показали, что границей принятия решения об упакованности файла является значение энтропии равное 6,85.

Для определения факта распакованности файла и завершения процесса распаковки файла, необходимо проверить изменилась ли виртуальная память по адресу EIP и восстановлено ли первоначальное заполнение регистра ESP.

Заключение

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

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

Рис. 2. Блок-схема алгоритма декодирования упакованного исполняемого файла в исходные текста языка Ассемблера

НЯчЯІЮ и праскі ^геь&Зраса, І_ІБіРі_ік1ІопАгіс1ге5БЄБ)

Вычислить зіщюпіжк кэчдаэи секции файла

■І55

J-й " '

Инщиа лиэироваг ты 1} «витает процессоре:

2 ї ста: исследуемого файла; 3) ЙЕН, РЕВ, ТЕВ;

А \ спроецировать э адресное пространство исследуемого фдапэ все чипор™ру!яиь»е библиотям

||Р = ЕЭЕР (оригинальная точка в.щца. из списка экспортируемых фу три)

* кУ

Конец Ке*ип ^АОсЗгезвЗрасе, ІШРі, лшІійпАгігігййййй^

Рис. 3. Блок-схема алгоритма распаковки упакованного исполняемого файла

Список использованных истчников

1. Белкин П.Ю., Михальский О.О. и др. Программно-аппаратные средства обеспечения информационной безопасности. Защита программ и данных: Учебное пособие для вузов. - М.: Радио и связь, 1999. - 168 с.

2. Касперски К. Фундаментальные основы хакерства. Искусство дизассемблирования. - М.: СОЛОН-Пресс, 2004. - 448 с.

Кравец О.Я., Крючкова И.Н.

ИССЛЕДОВАНИЕ ЧУВСТВИТЕЛЬНОСТИ НЕЙРОСЕТЕВОЙ МОДЕЛИ К НАЛИЧИЮ ВРЕМЕННОГО ЛАГА В ЗАДАЧЕ ПРОГНОЗИРОВАНИЯ ВРЕМЕННЫХ РЯДОВ

Воронежский государственный технический университет Международный институт компьютерных технологий, г.Воронеж

При решении задачи прогнозирования временных рядов возникает проблема корректного определения обучающего, тестирующего и контрольного множеств. При формировании указанных выборок предполагается, что значения независимых переменных и зависящей от них исследуемой величины определены в одной и той же временной точке. Однако известно множество примеров [1, 2, 3], когда влияние одного события на другое проявляется по прошествии некоторого времени, величину которого называют временным лагом А. В случае наличия неизвестного временного лага задача нейро-сетевого моделирования временных рядов существенно усложняется, так как появляется неопределенность выбора обучающих примеров. Исследованию чувствительности нейросетевой модели к сдвигам временных рядов, описывающих поведение факторов, влияющих на прогнозируемую величину, посвящена данная работа.

Обычно целью нейросетевого прогнозирования является предсказание значения некоторой переменной на основе ее предыдущих значений. Обучающий пример формируется путем наложения на массив исходных данных временного «окна». Следующий пример формируется сдвигом «окна» на один временной интервал вперед.

В [4, 5] показано, что учет значений не только прогнозируемой величины, но и факторов, значимо влияющих на нее, позволяет повысить точность прогнозирования. В этом случае каждый обучающий пример содержит историю значений по факторам, значимо влияющим на значение прогнозируемой величины и историю значений самой прогнозируемой величины, а также требуемый выход нейросети [6]. Ширина временного «окна», то есть количество предыдущих значений, на основе которых формируется прогноз, может быть определено с помощью анализа графиков автокорреляционных функций входных факторов.

С учетом отсроченного влияния одного или нескольких значимых факторов на прогнозируемую величину, появляется необходимость более точно определять ширину временного окна по каждому фактору. При ширине окна меньшей, чем временной лаг, «сдвинутое» значение фактора, соответствующее значению прогнозируемой величины в определенной

i Надоели баннеры? Вы всегда можете отключить рекламу.