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

Автор работы: Пользователь скрыл имя, 11 Октября 2013 в 07:35, реферат

Краткое описание

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

Прикрепленные файлы: 1 файл

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

— 187.50 Кб (Скачать документ)

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

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

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

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

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

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

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

Осуществлять сбор данных помогает псевдо-агент (набор инструкций, встроенных в код задачи). Обычно его добавляют на этапе проектирования. Простой пример псевдо-агента - вызов 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) Продолжение/изменение выполнения

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

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

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

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

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

Информация о работе Средства отладки и взлома программ