Средства отладки и взлома программ

Федеральное агенство по образованию

Государственное учреждение

Высшего профессионального образования

«Пятигорский государственный

Лингвистический университет»

 

 

 

 

Реферат

 на тему:

 

«Средства отладки и взлома программ»

 

 

 

Выполнила:

Студентка ИИМСИКТ

  группы 301 ЗИ

Образцова Елена

 

Руководитель:

Козлов В. И.

 

 

 

Пятигорск – 2013

Средства отладки и взлома программ

В настоящее  время современные хакеры используют обширный инструментарий. Его можно  подразделить на следующие группы:

  • отладчики реального режима
  • отладчики V86
  • эмуляторы
  • автоматические распаковщики
  • дизассемблеры
  • прочие программы

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

Отладчики реального  режима

Наиболее известные:

  1. TurboDebugger by Borland International 
    Созданный в 1988 году двумя братьями Chris'ом и Rich'ем Williams Содержит множество ошибок, активно используемых защитами, таких как:
    1. использование стека отлаживаемой программы
    2. использование int 1, int 3 для трассировки
    3. перехват прерываний int 0, int 1, int 3
    4. некорректная работа с видеобуфером
    5. некорректное выставление начальных значений регистров

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

  1. CodeView by Microsoft 
    По своим ошибкам ничем не отличается от TurboDebugger'a. Поддерживает собственный формат отладочной информации. В силу устройства самого ядра отладчика не приспособлен в качестве среды для взлома.
  2. AFD 
    Созданный в 1988 году H.Puttkamer'ом отладчик предоставляет следующие возможности: пошаговый режим исполнения инструкций, пошаговое исполнение подпрограмм, сохранение точек останова в пользовательском файле, поиск данных в памяти, создание макросов и запись их в файл. Для использования в качестве среды для взлома не предназначен.
  3. Debug 
    Одним из самых первых отладчиков, существовавших для IBM PC, является отладчик DEBUG, поставляемых с операционной системой MsDos. Содержит все ошибки отладчиков реального режима. В настоящее время нигде не используется.

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

Отладчики защищенного  режима

  1. TurboDebugger/386 by Borland International 
    Надстройка над TD, представляющая device-driver TDH386.Sys (низкоуровневый интерфейс сопроцессором) и запускающую программу TD386, вводящую процессор в режим V86. Полностью поддерживает ошибки своего предшественника. Предоставляет возможность установки аппаратных точек останова: по обращению на чтение/запись байта в памяти, перекрытие обращения к портам (не всегда корректно обрабатываемое).
  2. Soft-Ice by Nu-Mega Techologies 
    Hаиболее мощный отладчик. Поддержка VCPI. Есть разновидности под Win95/WinNT 
    Содержит также некоторые ошибки:
    1. Hе является полностью stealth-отладчиком, так как оставляет кусок своего кода в conventional memory V86 машины.
    2. Существует API между программой и отладчиком
    3. S-Ice можно обнаружить по устройству SOFTICE1
    4. Загрузчик LDR неправильно выставляет значение SP
    5. некорректное выставление начальных значений регистров

Предоставляет API через int 3, функции 09-13h. Поддерживает отладочную информацию Microsoft ('NB' в начале отладочной информации), Borland (db 0FB52h)

  1. Soft-Ice/W by Nu-Mega Techologies 
    Отладчик под Windows 3.xx. Обнаруживается по присутствию VxD устройства WINICE. Отслеживает конструкции вида cs:pushf.
  2. Deglucker by S.Gorokhov & A.Ilyushin 
    Ошибки:
    1. Переключение в нестандартный видеорежим
    2. Hевозможность перехвата портов ввода/вывода
    3. запирание клавиатуры через i/o портов 60h/64h

Предоставляет API через int 15h функции 0FFxxh. Трассирует программу  через DRx (аппаратные регистры останова).

Эмуляторы

  1. EDB by Serge Pachkovsky 
    Эмулятор 80286 процессора. Крайне убогий интерфейс, на уровне DEBUG. Имеется возможность просмотра/изменения памяти, несколько режимов эмуляции.
  2. Soft Debugger 
    Полноценный эмулятор 80386, без поддержки функций защищенного режима. Поддерживает отладочную информацию компиляторов Borland International. Отслеживает изменение байтов в конвейере, имеется несколько режимов эмуляции: с вызовом собственного int 1/int 3, режим Full Tracing, Auto Tracing и другие.
  3. SD by Dmitry Groshev 
    Удобный и мощный сервис. Гибкие возможности для работы с самыми разнообразными структурами данных. Может подгpyжать сеpвисные модyли.

Автоматические  распаковщики

К автоматическим распаковщикам  относятся программы, запускающие  в автоматическом или полуавтоматическом режиме защищаемую программу и отслеживающие  типовые участки startup-кода и соответственно настраивающие relocations.

Функция автоматических распаковщиков - сдирание защиты с файла и получение  работоспособного EXE файла. Физика данного  процесса такова: перехватывая первое программное прерывание, вызванное  программой после отработки защиты, распаковщик снимает дамп памяти с уже расшифрованным кодом защищенной программы. Первый этап работы по снятию - нахождение этого самого первого прерывания. Это делается при помощи любого отладчика. Не будем вдаваться в подробности отлова первого прерывания, замечу лишь одно - все программы написанные на C/C++ и откомпилированные компилятором любой фирмы одной из первой командой проверяют версию OS:

B4 30  mov ah, 30h

CD 21  int 21h

В программах, написанных на Паскале идет перехват векторов 00 и некоторых других:

B4 35  mov ah, 35h

CD 21  int 21h

Если посмотреть ссылку на это место, то можно увидеть, что этот фрагмент вызывается после  двух far call-ов:

call far Initturbo

call far SwapVectors

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

  1. Autohack by BCP group 
    Предоставляет три варианта запуска:
    1. Распаковка трассировкой. В данном режиме работают почти все распаковщики программ. В данном режиме возможна распаковка программ, не защищенных от трассировки. Режим работает следующим образом: программа загружается в память, перехватывается первое прерывание, возводится флажок пошаговой трассировки (поэтому распаковка в этом режиме относительно медленно работает), управление передается загруженной программе, далее обработчик первого прерывания анализирует сегмент кода трассируемой программы и ждет смены регистра CS (число смен регистра CS запрашивается во время запуска под именем "глубина трассировки"). После этого сбрасываются дампы памяти, и операция повторяется с загрузкой программы с другого начального адреса.
    2. Стандартный режим взлома. Режим работы программы основанный на режиме перехвата определенных моментов после отработки механизма защиты и сброса дампов памяти.
    3. Режим взлома с поддержкой таблиц компиляторов. Идентичен второму режиму, но нацелен на определенные компиляторы, поэтому взламывает более корректно. о если взламывается программа откомпилированная неизвестным AutoHack-у компилятором, то произойдет запуск взламываемой программы с последующими глюками.
  2. Intruder by Creat0r 
    Отслеживает startup-код.
  3. SnapShot by Dale Co.
  4. CUP by Cyberware products
  5. UNP by B.Castricum
  6. Tron
  7. TSUP

Дизасемблеры

Дизасемблер переводит  выполняемый код в листинг  на асемблере.

Прочие программы

К прочим программам можно отнести программы ориенитированные на специальные языки, например:

  • Clipper

Valkyrie Declipper 5, Version 1.0, Revision K

"+" Есть  возможность анализиpовать низкоуpовневый  код, декомпиляция до исходных  текстов 
"-" Может pаботать только с известными ему линковщиками, если линковщик ему не известен, то он отказывается pаботать.

Hackers Declipper v1.3 by KrK //UCL

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

Rescue5 v1.0 CA-Clipper decompiller

"+" Декомпиляция до  исходников. 
"-" Понимает очень мало линкеpов, нет возможности анализиpовать псевдокод

  • FoxPro

ReFox

Программы типа Hiew (Hacker's view by SEN), позволяющие просмотреть код, изменить его, дизасемблировать участки кода.

 

ОТЛАДКА СИСТЕМ РЕАЛЬНОГО ВРЕМЕНИ

Обзор

К.А. Костюхин, НИИСИ РАН

Содержание

  • 1. Введение
    • 1.1. Основные определения
    • 1.2. Особенности отладки в системах реального времени
    • 1.3. Ошибки в системах реального времени
  • 2. Средства активной отладки
    • 2.1. Архитектура средств активной отладки
    • 2.2. Отладочные действия
    • 2.3. Пользовательский интерфейс
    • 2.4. Интеграция со средствами разработки ПО
  • 3. Средства мониторинга
    • 3.1. Архитектура средств мониторинга
    • 3.2. Отладочные действия
    • 3.3. Пользовательский интерфейс
    • 3.4. Интеграция со средствами разработки ПО
  • 4. Особенности отладки многоплатформных распределенных систем
    • 4.1. Особенности архитектуры
    • 4.2. Некоторые подходы к отладке распределенных приложений
    • 4.3. Способы представления данных
  • 5. Заключение
  • Список литературы

1. Введение

1.1. Основные определения

Предметом настоящего обзора является отладка систем реального времени.

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

Существующие СРВ являются многозадачными. Многозадачность реализуется через  многопроцессность*) и многопоточность.

 

Под процессом понимается держатель  ресурсов (например, память, данные, дескрипторы  открытых файлов), которые не разделяются с другими процессами. В рамках одного процесса выполняются один или несколько потоков. Они совместно используют ресурсы процесса.

 

Многопроцессность в СРВ имеет  существенные недостатки, поскольку  требует поддержки времени выполнения для доступа к памяти, и, следовательно, при переключении контекстов системе нужно выполнить дополнительные действия.

Многопоточность - это наиболее распространенный подход при проектировании систем реального  времени, при котором СРВ представляет собой один процесс, в рамках которого запущено несколько потоков.

Недостатком многопоточности является возможность модификации чужих  данных какой-либо задачей (из-за отсутствия защиты). В связи с этим в СРВ  представлены средства синхронизации, то есть средства, обеспечивающие задачам доступ к разделяемым ресурсам. К таким средствам относятся семафоры (бинарные и счетчики), мьютексы, очереди сообщений (см. [1],[3],[25]).

Структура СРВ приведена на рис.1, где прикладной код - это совокупность пользовательских потоков управления, ОСРВ - операционная система реального времени, обеспечивающая планирование, синхронизацию и взаимодействие пользовательских потоков управления.

 
Рис. 1. Структура системы реального времени

Будем называть распределенную систему распределенной системой реального времени (РСРВ), если корректность ее функционирования зависит также и от ограничений, накладываемых на время обмена между компонентами системы.

1.2. Особенности отладки в системах  реального времени

Отладка в СРВ направлена на обнаружение и исправление ошибок в прикладном коде. Она является одним из этапов кросс-разработки, схему которой можно представить следующим образом. Разработка приложения ведется как минимум на двух машинах: инструментальной и целевой. На инструментальной платформе происходит написание исходного текста, компиляция и сборка. На целевой - загрузка приложения, его тестирование и отладка.

Ввиду того, что целевая платформа, как правило, обладает более ограниченными  ресурсами, чем инструментальная, отладка распределенных систем реального времени может быть двух видов.

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

Второй способ - удаленная отладка (кросс-отладка). Кросс-отладка позволяет  использовать ресурсы инструментальной системы при изучении поведения некоторого процесса в целевой системе.

Эффективность удаленной отладки  зависит от типа связи инструментальной и целевой машин, а также от поддержки средств отладки со стороны целевой архитектуры.

Ключевым требованием к средствам отладки является возможность наблюдать и анализировать весь процесс выполнения отлаживаемых задач, а также системы в целом. В данной работе рассматриваются два метода отладки: активная отладка и мониторинг.

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

Под мониторингом понимается сбор данных о задаче (значения регистров, переменных, и.т.д) или о системе в целом (стадии выполнения задач, происходящие события, и.т.д).

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

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

1.3. Ошибки в системах реального  времени

Отмеченные выше методы отладки  позволяют выявлять и устранять ошибки следующего характера:

  1. Ошибки в программном обеспечении, влекущие неправильное выполнение задачи (безотносительно времени). Обычные ошибки, обнаруживаемые средствами активной отладки. Эти средства будут рассмотрены в разделе 2.
  2. Ошибки в ОСРВ: ошибки планирования, синхронизации и связи.Для отладки, в этом случае, надо использовать один из способов мониторинга. Подробно средства мониторинга описаны в разделе 3.
  3. Логические ошибки, связанные с асинхронностью. Пример такого рода ошибок и способы их устранения будут приведены в разделе 4.
  4. Ошибки, связанные с тем, что данные задачи были изменены другой задачей. Локализацию ошибок лучше проводить, используя мониторинг, а именно: осуществлять периодический контроль целостности данных, временно запрещать другим задачам доступ к некоторым участкам кода или данных.

2. Средства активной отладки

2.1. Архитектура средств активной  отладки

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

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

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

Общая структура активного кросс-отладчика  приведена на рис.2.

 
Рис. 2. Активный кросс-отладчик

Рассмотрим протокол "менеджер-агент" на примере отладчика VxGDB (Wind River Systems, целевая система - VxWorks). Этот протокол базируется на RPC (Remote Procedure Call). Запросы менеджера можно классифицировать следующим образом:

  1. Запросы работы с модулями  
    Сюда относятся запрос на загрузку модуля, запрос на получении информации о загрузочном файле и запрос на получение информации о символе.
  2. Запросы работы с задачами  
    Это запросы на запуск, остановку и удаление задачи, на присоединение и отсоединение от запущенной задачи, на установку и удаление точки прерывания, на продолжение выполнения остановленной задачи.
  3. ptrace-запросы  
    Агент отладки эмулирует функцию ptrace и передает ей соответствующие запросы на чтение и запись.
2.2. Отладочные действия

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

  • предварительные действия отладчика;
  • прерывание выполнения задачи;
  • получение информации;
  • продолжение/изменение выполнения задачи.

1) Предварительные действия отладчика 

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

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

2) Прерывание выполнения задачи 

Как правило, выполнение задачи может  быть прервано в результате того, что  произошло одно из следующих событий:

  • Достигнута точка прерывания.

Точки прерывания бывают двух видов: программные и аппаратные. Установка  программной точки прерывания состоит  в том, что запоминается инструкция, расположенная по тому адресу, где  будет находиться точка прерывания, затем по этому адресу прописывается так называемая "break"-инструкция, после обработки которой процессором генерируется некоторое исключение (trap exception). Обработчик этого исключения сохраняет регистры задачи, меняет инструкцию точки прерывания на настоящий код и передает управление менеджеру. Недостаток программных точек прерывания в том, что соответствующий адрес должен находиться в той области памяти, куда разрешена запись.

Аппаратная точка прерывания не требует модификации памяти, так  как ее адрес хранится в специальном  регистре (debug register, DR), который просматривается процессором при выполнении очередной инструкции. Если происходят действия, заложенные в контрольный регистр (например, выполнение по заданному адресу или чтение/запись в область, адресуемую значением DR), то процессор генерирует соответствующее прерывание, обработав которое, отладчик получает необходимую информацию.

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

Помимо работы с точками прерывания, устанавливаемыми на конкретный адрес, отладчик работает с так называемыми  прерываниями доступа (access breakpoints), используемыми для определения момента доступа к некоторой области памяти, и прерываниями наступления событий (event detection), которые срабатывают, когда происходит соответствующее событие.

  • Используется режим пошаговой отладки.

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

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

  • Перехвачена исключительная ситуация.

Если в процессе выполнения отлаживаемой задачи возникла исключительная ситуация (например, деление на 0), то отладчик должен корректно ее обработать и  сообщить пользователю.

  • Получен сигнал прерывания от пользователя.

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

При получении сигнала останова отладчик может остановить текущую  отлаживаемую задачу, остановить выполнение некоторой группы задач и остановить всю систему. Такой механизм дает возможность применять средства активной отладки без опасения вызвать новые ошибки, связанные со спецификой СРВ, поскольку система или набор задач, которые могут повлиять на отлаживаемую, будут остановлены, и временные соотношения их выполнения нарушены не будут. Подобный подход реализован в отладчике X-ray (Microtec Division, целевая система VRTX).

3) Получение информации 

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

  • Просмотр содержимого стека.

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

  • Просмотр таблицы символов.

Используя отладчик, можно получать доступ к информации о символах (имена  переменных, функций и типов), определенных в задаче. Эта информация состоит  из имени, типа и адреса соответствующей  переменной или функции.

  • Просмотр исходных файлов.

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

  • Просмотр данных.

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

Кроме того, у пользователя может  возникнуть необходимость осуществить  в процессе сеанса отладки вызов  некоторой функции. Для поддержки этого существуют различные способы, например, можно передать соответствующий запрос агенту отладки, и тот запустит требуемую функцию либо в контексте отлаживаемой в данный момент задачи, либо в некотором специальном контексте. В GDB (GNU debugger, Free Software Foundation) реализован другой механизм, суть которого заключается в том, что все предварительные действия (установка точки выполнения, и.т.д.) производятся на инструментальной стороне, а агенту передается запрос на выполнение с текущего адреса.

4) Продолжение/изменение выполнения

Особенностью активной отладки  является возможность изменения  выполнения задачи.

  • Изменение данных.

Отладчик имеет возможность  изменять значения переменных, содержимое регистров и памяти. Это позволяет  корректировать выполнение задачи, проверяя предположения об ошибках в ее коде.

  • Продолжение выполнения задачи с любого адреса.

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

Средства отладки и взлома программ