(Microsoft Word Document, 431kb)

реклама
МИНИСТЕРСТВО ТРАНСПОРТА РОССИИ
ГОСУДАРСТВЕННАЯ СЛУЖБА ГРАЖДАНСКОЙ АВИАЦИИ
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ
Кафедра вычислительных машин, комплексов, систем и сетей
Курсовой проект защищён
с оценкой _____________
_______________________
(подпись руководителя, дата)
Курсовой проект по дисциплине
"Схемотехника ЭВМ"
Тема: "Расчет сложных электрических цепей. Традиционное исследование и
статистический анализ (метод Монте-Карло). По дисциплине «Электроника и
электротехника»(для учебной практики студентов специальности 230101)"
Работу выполнилa:
Студент группы ЭВМ 3-2
Похильчук С И 051005
(Ф.И.О.)
___________________________
(подпись, дата)
Руководитель: Резников Б.Л.
___________________________
доцент, кандидат ф.-м. наук
(степень, звание, Ф.И.О)
Москва 2008г.
Содержание
Введение
Практически в каждой современной интегрированной среде разработки
для Windows присутствует отладчик. Отладчик является модулем среды
разработки или отдельным приложением, предназначенным для поиска
ошибок в программе. Отладчик позволяет выполнять пошаговую
трассировку, отслеживать значения переменных в процессе выполнения
программы, устанавливать точки или условия останова и т. д. Половину
своей профессиональной жизни программист проводит в отладке, поэтому
производители сред разработки - коммерческих или бесплатных - снабжают
свою продукцию этими немаловажными инструментами. Однако до сих пор
не вымерли и отдельно стоящие, не зависящие ни от какой среды отладчики.
Яркий пример тому - отладчик OllyDbg(рис. 1).
Рис.1 Окно отладчика OllyDbg.
OllyDbg — бесплатный 32-битный отладчик уровня ассемблера для
операционных систем Windows, предназначенный для анализа и
модификации откомпилированных исполняемых файлов и библиотек,
работающих в режиме пользователя.
Возможности отладчика OllyDbg
Во-первых, серьёзным плюсом является графический пользовательский
интерфейс - то есть программа обладает полноценными окнами, с которыми
мы привыкли работать в Windows. На первый взгляд, это может показаться
смешным, но на самом-то деле далеко не все отладчики до сих пор
обзавелись полноценным графическим интерфейсом. Не знаю, конечно, как
вам, но мне приятнее и удобнее работать с программой, имеющей
графический интерфейс, нежели с той, которая имеет DOS-подобный
консольный. Конечно, в ряде случаев последний предпочтительнее, но таких
случаев всё же меньшинство. Причём стоит отметить, что настроек
интерфейса в OllyDbg очень много, так что "под себя" подогнать можно цвет
фона, шрифты, а также многое другое.
Второй немаловажный параметр, характеризующий отладчики, поддерживаемые процессорные архитектуры и расширения. Что это значит?
Это значит, что старый отладчик может не справиться с новой программой,
потому что не будет знать всех команд процессора, которые эта программа
использует. OllyDbg в этом плане не бежит впереди планеты всей, но
поддерживает множество широко используемых фирмами Intel и AMD
технологий: MMX, 3DNow!, Athlon extensions, SSE.
Поддерживаются форматы отладочной информации Microsoft (COFF) и
Borland (OMF). Дампы памяти можно также выводить в разных форматах:
шестнадцатеричном, текстовом (в кодировках ANSI или Unicode), в виде
адресов памяти, а также в некоторых других, менее распространённых
форматах.
Приятной особенностью является возможность отладки динамически
компонуемых библиотек (DLL). Отладчик сам запускает вызывающее
функции из DLL приложения и отслеживает все вызовы библиотеки. Причём
если функции экспортируются не в именованном виде, а в индексном
(ordinal), то OllyDbg восстанавливает вид функции по передаваемым ей
параметрам. Кстати, отладчик умеет не только запускать приложения под
своим надзором, но и присоединяться к уже запущенным. Отлаживать можно
не только простые, но и многопоточные приложения. Причём с потоками в
OllyDbg можно работать достаточно полно: добавлять или удалять потоки,
переключаться с одного на другой. Каждый поток отлаживается в своём
собственном окне, так что путаницы и мешанины, по идее, не возникает.
Встроенный в OllyDbg анализатор - наиболее значимая, по словам
разработчиков, часть их детища. Анализатор распознаёт в отлаживаемой
программе циклы, условные переходы, а также константы и строки,
внедрённые программистом прямо в код программы, "хитроумные"
конструкции (которыми особенно славятся C-программисты), вызовы APIфункций, импортируемые функции и прочее. Анализатор делает двоичный
код более читабельным, облегчает отладку, уменьшает вероятность
неправильного дизассемблирования. При этом анализатор не ориентируется
на какой-то один компилятор и может быть одинаково полезен при отладке
любого 32-битного Windows-приложения. При распознавании функций
анализатор для ускорения процесса использует таблицу, содержащую имена
и аргументы более 2300 наиболее часто используемых функций стандартной
библиотеки C и Windows API. Впрочем, таблицу можно самостоятельно
пополнить.
Большие возможности программисту OllyDbg предоставляет в области
поиска: можно искать одну процессорную команду или же целую их
последовательность,
константы,
двоичную
или
текстовую
последовательность байтов. Можно задать поиск команд, соответствующих
какому-то адресу или диапазону адресов памяти; поиск функций, которые
вызывают какую-либо другую функцию, или обращаются к какому-то
определённому модулю. Если в ходе поиска найдено несколько мест в
программе, соответствующих заданным условиям поиска, OllyDbg выводит
их полный список, позволяющий быстро переключаться между ними.
Отладчик следит за всеми окнами, которые создаёт приложение, и
помещает их в список. Таким образом, можно следить за всеми
сообщениями, которые получает от системы данное окно. Удобно
организована работа со строковыми ресурсами, которые можно отслеживать
и изменять, не отрываясь от процесса отладки. Работа с другими типами
ресурсов более ограничена: их можно просматривать и изменять только в
двоичном виде.
OllyDbg поддерживает работу со всеми возможными видами точек
останова (breakpoints). В исключительных случаях можно задать вызов
прерывания INT 3 для остановки выполнения приложения после каждой
команды в отлаживаемом модуле. Кроме точек останова, поддерживается
просмотр значений в регистрах и по конкретным адресам памяти. Помимо
всего этого, в операционных системах на базе ядра Windows NT OllyDbg
может отслеживать все дескрипторы (handles), используемые отлаживаемым
приложением. Под Win9x этого делать он не умеет, зато там можно следить
за размещёнными в куче блоками памяти.
Помимо непосредственно отладчика, в OllyDbg есть встроенный
профилировщик - инструмент проверки скорости работы кода. Обычно этот
инструмент предлагается отдельно от отладчика, однако подход,
использованный разработчиком OllyDbg, мне кажется более разумным,
поскольку профилировка и отладка часто неразделимы.
Интересной особенностью программы является поддержка работы с
самораспаковывающимися архивами. Если в качестве отлаживаемого файла
указать самораспаковывающийся архив с другим исполняемым файлом
внутри, OllyDbg должен начать отладку не самораспаковщика, а того файла,
который будет распакован им.
Также полезной и интересной особенностью OllyDbg является поддержка
плагинов, которые подключаются к отладчику и расширяют его
функциональность. В стандартную поставку входят плагины для работы с
закладками и командной строкой. Впрочем, на сайте OllyDbg можно найти
SDK (Software Development Kit - комплект для разработки программного
обеспечения), с помощью которого можно создать свой плагин,
реализующий недостающие возможности.
Системные требования
 586/100 процессор (рекомендуется 586/300+);
 Операционная системы Microsoft Windows 95, Windows 98, Windows
NT 4.0 (Service Pack 2 or higher), Windows 2000, Windows XP;
 64 MB оперативной памяти (рекомендуется 128 MB);
 Более 2 MB свободного дискового пространства;
 VGA дисплей(рекомендуется SVGA с разрешением 800x600 и
более);
 Мышь(рекомендуется).
Для отладки программ в ОС Windows NT, Windows 2000 или Windows XP
могут потребоваться права администратора.
Сфера применения
В каждой современной среде разработки присутствует собственный
отладчик. И, тем не менее, зачем-то же автор OllyDbg, некто Oleh Yuschuk,
занялся разработкой отдельного отладчика и довёл её, разработку, до
победного конца.
Дело, прежде всего, в том, что отладчик, встроенный в среду разработки,
предназначен для отладки тех программ, которые созданы именно в этой
среде. Такой отладчик специально "затачивается" под конкретный язык
программирования и конкретный компилятор. И отладка в 99,9% случаев
происходит при наличии у программиста исходного текста программы.
OllyDbg одинаково подходит для всех Win32-приложений и предназначен, в
основном, для отладки тех приложений, исходный текст которых
отсутствует. По большому счёту, для такой отладки совсем даже и не нужно
знать, на чём программа написана. Именно этой направленностью и
объясняется присутствие в OllyDbg средств для изменения исполняемого
файла.
Сама по себе задача отладки программы без исходных текстов может
возникать в ряде случаев. Например, самый простой - когда тексты
программы по причине банального разгильдяйства или атаки злобных
вирусов были утеряны. Тогда, если остался более-менее стабильный
исполняемый файл, можно завершить его отладку без исходных текстов и
выпустить продукт в заданный срок. Как вариант первого случая, бывает, что
в какой-то используемой программой DLL-библиотеке обнаруживаются баги,
а исходный текст библиотеки недоступен. Либо, опять-таки, утерян, либо
поставщик библиотеки, если она написана кем-то со стороны, просит за него
слишком много денег. Тогда не остаётся ничего (особенно, если баги
злобные, и появление новых версий библиотеки никоим образом не
предвидится), кроме как отлаживать уже имеющийся на руках исполняемый
файл.
Ну и, конечно, самый частый вариант отладки без исходного текста - это
взлом. Формально это может считаться отладкой, поскольку для того, чтобы
бороться с защитой коммерческой программы, нужно хорошо понимать, как
эта защита работает. На разработчика тут надежды мало: вряд ли он
расскажет взломщику, как оптимально быстро и качественно сломать защиту
его собственной программы и лишить себя, любимого, честно заслуженных
денег. И, хотя разработчик OllyDbg и просит в лицензионном соглашении не
использовать этот отладчик в незаконных целях, вряд ли большинство
взломщиков обратит на эти тщетные мольбы хоть какое-нибудь внимание.
Тем более, некоторые возможности OllyDbg просто таки подарок для
взломщика: например, работа с самораспаковщиками позволяет упростить
взлом программ, защита которых основана на них. Конечно, нельзя
утверждать, что OllyDbg пригодится только тем, кто будет использовать его
незаконно, но, думаю, такие пользователи у этой программы имеются, и их
не так уж и мало.
Тем не менее, не следует использовать его в незаконных целях - максимум
для исследования защиты программ с целью написания собственной
качественной защиты.
Работа с OllyDbg
Для начала работы необходимо запустить отладчик (OllyDbg.EXE). Затем
нажмите F3 (Open File), и выберите необходимый какой-нибудь файл с
расширением EXE(например, c:\windows\system32\notepad.exe). OllyDbg
остановится на EP (Entry Point - адрес, по которому располагается первая
команда программы). Запустите программу, нажав F9 (или Debug -> Run, или
щелкнув по кнопке - синий треугольник). Установите подсветку jump
(переходов) и call (вызовов) в кодах программы – кликните на окне CPU
правой кнопкой мыши и выберите «APPEARENCE -> HIGHLIGHTING ->
JUMPS AND CALLS».Теперь call’ы подсвечены лазурным цветом, а
переходы – жёлтым.
Рассмотрим наиболее важные команды OllyDbg:
 F7: Выполняет одну строку кода (если находимся на CALL, то
переходим внутрь вызванного участка кода)
 F8: Выполняет одну строку кода (если находимся на CALL, то
просто выполняет вызов без перехода внутрь и переходит на
следующую за CALL строку).
 F2: устанавливает обычную точку останова на отмеченной линии.
Т.е. дойдя до этой точки программа остановит свою раьоту. Чтобы
убрать эту точку останова, надо ещё раз нажать F2.
 Ctrl+F2 - перезапуск программы
 Чтобы временно прекратить выполнение программы, нужно нажать
F12 или DEBUG->PAUSE.
 Чтобы закрыть отлаживаемую программу выберите DEBUG>CLOSE. или нажать Alt + F2
Исследование программы с помощью OllyDbg
Приведем пример исследования 32-битной программы. Для этого нам
понадобятся:
 Отладчик OllyDbg v. 1.10;
 Программа для исследования (TestP.exe).
Первым делом запускаем наш отладчик OllyDbg. Для исследования нам
понадобятся всего 3 окна:
 CPU;
 Breakpoints;
 Patches.
Все остальные окна рекомендую закрыть, чтоб они нам не мешали.
Запустим саму программу TestP.exe(рис.2).
Рис.2. Окно программы TestP.exe.
В появившемся окне будет запрос на ввод ключа. Нам необходимо с
помощью отладчика его узнать.
Для этого необходимо выполнить несколько действий:
1. Открываем нашу программу в отладчике. Для этого открываем меню
File->Open и выбираем нашу тестовую программу. После загрузки в окне
CPU мы увидим вот такую картину (рис. 3).
Рис. 3. Окно CPU после открытия программы в OllyDbg
В левой верхней части
программы(рис. 4).
окна располагается ассемблерный код
Рис. 4. Ассемблерный код программы.
2.Теперь нам надо найти функцию которая выдает окно с запросом ввода
ключа. Для этого выполняем программу пошагово нажимая клавишу F8 до
тех пор пока не появиться окошко с запросом ввода. После нескольких
нажатий появляется окошко ввода (рис.5).
Рис. 5. Окно программы TestP.exe, запущенной в OllyDbg.
Теперь мы знаем что где-то в этой функции (TestP.004523B8) выводится
наше окошко. Нам необходимо докопаться до функции, которая выводит
окно, для этого надо зайти в эту функцию. Теперь перед этой строкой CALL
TestP.004523B8 нам надо поставить точку останова (Breakpoint) для этого
выделяем строку перед ней и нажимаем F2. Для проверки этого действия
необходимо открыть окно Breakpoints (рис. 6).
Рис.6 Окно Breakpoints в OllyDbg.
Мы видим что в нем появилась запись со строкой ассемблерного кода.
Это точка останова. Далее нажимаем кнопку
для того чтоб загрузить нашу
программу заново. Теперь надо дойди до точки останова. Для этого
нажимаем
для того чтоб выполнить нашу программу и видим что
выполнение остановилось на нашей точке останова. Для того чтоб зайти в
функцию нажимаем клавишу F7. Разницу между F8 и F7 в том, что первая
трассирует программу без захода в функции , вторая с заходом в функции. В
левом верхнем окне видим ассемблерный код функции TestP.004523B8 (рис.
7).
Рис. 7. Ассемблерный код функции TestP.004523B8.
Нам надо продолжать пока не найдем функцию, которая выводит окно и
обрабатывает нажатие на кнопку ОК и определяет правильно мы ввели ключ
или нет. Продолжим, также нажимаем F8 пока не появится окно (рис. 8).
Рис. 8.Функция ххх
Опять перед ней ставим точку останова (рис. 9).
Рис. 9. Окно BreakPoints в OllyDbg.
Жмем
и опять
, видим что выполнение остановилось на нашей
первой точке останова, а нам надо перейти ко второй. Дя этого жмем еще раз
выполнение дойдет до второй точки останова. Заходим в функцию
клавишей F7, видим следующее (рис.10).
Рис. 10. Ассемблерный код программы.
Продолжаем дальше, находим очередную функцию (рис.11).
Рис.11. Ассемблерный код функции
Опять ставим точку останова и возвращаемся сюда, заходим в функцию.
После захода в функцию видим следующее (рис.12).
Рис.12.Ассемблерный код функции
Продолжаем искать нажимая F8. Походу нажатия F8 мы видим что
начинают появляться API функции (в правой колонке левого верхнего окна
OllyDbg) (рис. 13).
Рис.13. API функции.
Значит мы уже близко. Нажимаем медленно и следим когда появиться
окно. По ходу трассировки программы в лотке задач появилось наше
окно(рис.14).
Рис. 14. Системный лоток.
Появилось оно на строке CALL TestP.0044EF48 (рис. 15).
Рис. 15 Ассемблерный код функции
Но при нажатии на системный лоток окно не появляется. Э то значит что
мы нашли функцию, которая рисует окно, и где сверяется введенный ключ.
Продолжаем дальше трассировать программу (F8) и видим что на этом
месте (рис. 16)
Рис. 16. Ассемблерный код.
цикл, который постоянно повторяется. Ставим точку останова на первой
строке после цикла (MOV DWORD PTR SS:[EBP-8],EAX)(рис.17).
Рис. 17. Окно Breakpoints в OllyDbg
Нажимаем кнопку и видим что окошко полностью нарисовалось, ждет
от нас ввода(рис.18), программа остановилась тут, в цикле. Далее вводим
любой ключ (у примеру, 23) , нажимаем ОК.
Рис. 18. выввыфвывфвф
Окошко закрылось и мы вернулись в окно отладчика, выполнение
остановилось на нашей точке останова. Теперь нам надо найти функцию в
которой выводит оконо с уведомление что ключ введен неверно. Для этого
трассируем (F8) нашу программу до того момента пока не появится окно с
уведомлением(рис. 19).
Рис. 19. Окно с уведомлением.
Теперь проанализируем код перед вызовом функции (CALL
TestP.00427294) которая выводит окно с уведомлением об ошибке. Первым
делом смотрим в окно регистров(рис.20), которое находиться в окне.
Рис. 20.Окно регистров в OllyDbg.
Мы видим что в регистре EAX лежит адрес введенного нами ключа в
памяти и соответственно, что мы ввели (в примере число 23). А в регистре
EDX – адрес и значение правильного ключа (ASCII “hello”). Проверим
полученный ключ: запустим TestP.exe, введем в поле ключ hello и получим
окно с уведомлением, что ключ принят (рис. 21).
Рис. 21. Окно с уведомлением что ключ принят.
Список используемой литературы
1.
Сайт http://ollydbg.de – официальный сайт OlleDbg.
Похожие документы
Скачать