Введение 6
1. Алгоритмы дизассемблирования 7
1.1 Базовый алгоритм дизассемблирования 7
1.2 Алгоритм линейной развертки 7
1.3 Алгоритм рекурсивного спуска 8
2 Общая характеристика Delphi 11
3. Общая характеристика дизассемблера Диздек 19
4. Формат машинной команды архитектуры IA-32 20
5. Принцип построения дизассемблера Диздек 25
6. Пример работы 28
7.Охрана труда 36
Заключение 39
Список используемых источников 40
Приложение А. Листинг программы на Delphi 41
Приложение Б. Презентация
Дизассемблирование - преобразование программы на машинном языке к ее ассемблерному представлению. Декомпиляция - получение кода языка высокого уровня из программы на машинном языке или ассемблере. Декомпиляция - достаточно сложный процесс. Это обусловлено следующими причинами:
Процесс компиляции происходит с потерями. В машинном языке нет имен переменных и функций, и тип данных может быть определен только по производимым над ними операциям. Наблюдая пересылку 32 -х бит данных, требуется значительная работа, чтобы определить, являются ли эти данные целым числом, дробью или указателем. - Компиляция — это операция типа множество-множество. Компиляция и декомпиляция могут быть выполнены множеством способов. Поэтому результат декомпиляции может значительно отличаться от исходного кода. - Декомпиляторы в значительной степени зависимы от конкретного языка и библиотек. - Необходимо точное дизассемблирование исполняемого файла. Любая ошибка на фазе дизассемблирования размножатся в результирующем коде.
Цель инструментов дизассемблирования заключается в содействии исследованию функционирования программ, когда их исходные коды не доступны. Наиболее распространенные цели дизассемблирования: - анализ вредоносного программного обеспечения; - анализ уязвимостей программного обеспечения с закрытым исходным кодом; - анализ совместимости программного обеспечения с закрытым исходным кодом; - валидация компилятора; - отображение команд программы в процессе отладки.
В данной работе было разработано выполняющее, дизассемблирование и декомпиляцию. Приложение имеет интуитивно понятный интерфейс, в котором пользователь может выбирать необходимые ему процедуры. После чего можно наблюдать за ходом выполнения работы.
Приложение разрабатывалась с использованием объектно ориентированного языка программирования Delphi. Язык удовлетворяет требованию строгой статистической типизации переменных, что повышает наглядность и читаемость кода. Также средства языка позволили относительно просто анализировать заданные алгоритмы.
В дальнейшем приложение можно улучшить, добавив новую функцию, позволяющую выполнить дизассемблирование и декомпиляцию динамического кода.
В ходе выполнения работы, были получены навыки о приложения. Улучшены навыки разработки в среде Delphi 2007. Получен дополнительный опыт и расширены знания по языку Delphi.
1. Владислав Пирогов. Ассемблер и дизасемблирование. — СПб.: «БХВ- Петербург», 2006.
2. В.И. Юров. ASSEMBLER, 2-е издание. — СПб.: «Питер», 2003.
3. М.Ю.Гусенко. Вопросы обратной трансляции программного обеспечения специального назначения — Информационные технологии, №4, 2002.
4. М.Ю.Гусенко. декомпиляция типов данных исполняемых программ —