Е - Библиотека МИФИ

advertisement
УДК 004(06) Компьютерные системы и технологии
Е.В. КИСЛЯК
Московский инженерно-физический институт (государственный университет)
АВТОМАТИЗАЦИЯ ИНЖЕНЕРНОГО АНАЛИЗА
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
В работе рассматриваются основы инженерного анализа ПО, а также проблема автоматизации задач, которые возникают в процессе дизассемблирования. Предлагается решение этой проблемы с помощью интеграции скриптов ого языка программирования в дизассемблер IDA Pro.
Согласно определению в [1] инженерный анализ ПО - это процесс
анализа системы (ПО) с целью получения представления системы на
более высоком уровне абстракции. Фактически это означает переход
от машинного кода к алгоритмам и данным, используемым программой.
Существуют следующие методы инженерного анализа ПО:
 наблюдение за работой программы. Иногда этот метод называют отладкой, что не является верным, так как помимо собственно отладчика возможно использование различных мониторов, перехватчиков шины (для драйверов) и т.д.;
 дизассемблирование - преобразование машинного кода в ассемблерный листинг и анализ этого листинга;
 декомпиляция - попытка получить исходный текст программы
путем анализа машинного кода.
Наиболее предпочтительным методом исследования является дизассемблирование с постепенным внесением изменений в ассемблерный листинг. Эти изменения являются как результатом анализа листинга, так и результатом использования отладчика или монитора. Это
позволяет постепенно накапливать информацию о программе до тех
пор, пока не будет достигнута поставленная цель.
В настоящее время наиболее популярным дизассемблером является
IDA Pro от Datarescue. Это связано с тем, что в этом продукте впервые
было реализовано интерактивное взаимодействие с пользователем.
Интерактивность позволяет решать такие проблемы как корректное
распознавания кода и данных, восстановление (ввод пользователем)
данных, которые необратимо теряются в ходе компиляции (имена меток, имена функций, операнды), а также позволяет осуществлять навигацию по дизассемблированному листингу.
ISBN 5-7262-0710-6. НАУЧНАЯ СЕССИЯ МИФИ-2007. Том 12
170
УДК 004(06) Компьютерные системы и технологии
В процессе дизассемблирования часто возникают задачи, которые
проще решить алгоритмически, а не управляя дизассемблером вручную. Для этого IDA Pro предоставляет скриптовый язык IDС и набор
функций для манипулирования представлением загруженной программы. Однако, язык IDC не позволяет получить все преимущества от использования скриптов из-за своей примитивности и практически полного отсутствия стандартных библиотек. Более предпочтительным
подходом является встраивание полноценного скриптового языка, в
качестве которого был выбран Ruby [2]. Эта идея реализована в рамках
данной работы.
Для встраивания Ruby в дизассемблер IDA Pro был реализован м одуль расширения дизассемблера, который управляет интерпретатором
Ruby и осуществляет связь скриптов с ядром дизассемблера. Интерфейс функций IDC был полностью сохранен, что позволяет легко перейти к использованию IDARuby вместо IDC.
В качестве примера демонстрируется восстановление импорта при
анализе дампа PE файла и обработка ссылок на строки при анализе
ELF файла, который был скомпилирован компилятором GCC в режиме
PIC.
Эти примеры показывают насколько полезными являются такие
особенности языка Ruby как встроенные хеш-таблицы, массивы, регулярные выражения, блоки и итераторы. Это позволяет использовать
как императивный, так и функциональный подход к разработке алгоритмов.
Список литературы
1. Elliot J. Chikofsky and James H. Cross II. Reverse engineering and design recovery:
A taxonomy. // IEEE Softw., 7(1):13-17, 1990.
2. Ruby Programming Language, http://www.ruby-lang.org/
ISBN 5-7262-0710-6. НАУЧНАЯ СЕССИЯ МИФИ-2007. Том 12
171
Download