Категория > Новости > Фундаментальные основы хакерства. Знакомство с отладчиком - «Новости»

Фундаментальные основы хакерства. Знакомство с отладчиком - «Новости»


26-11-2018, 21:00. Автор: Adamson

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

Способности отладчиков

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

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

Как именно это делает отладчик, пока понимать необязательно, достаточно знать, что он это умеет, и все. Куда актуальнее вопрос, какой отладчик умеет это делать.

 

Герои прошлого

В оригинальной книге Крис в качестве отладчика использовал широко известный среди хакеров старой школы SoftICE. Это действительно мощный, до сих пор не превзойденный инструмент — его неоспоримым преимуществом была возможность отладки ядра Windows с помощью одного компьютера. Между тем не без давления Microsoft в 2006 году его разработку прекратили. А поскольку SoftICE очень сильно зависит от операционной системы Windows, в ее более поздних версиях он просто не запустится. Последней версией Windows, в которой работал SoftICE, была Windows XP SP2, в SP3 уже нет.

Хакеры, конечно, приуныли, но не стали посыпать голову пеплом, а начали изобретать альтернативные отладчики — мы увидели старт сразу нескольких интересных проектов, но какую картину мы в итоге получили? Очень печальную — сегодня нет ни одного нового хорошего отладчика! Например, в те времена передовым был коммерческий Syser от китайских разработчиков. Ему пророчили светлое будущее, думали, что он заменит в наших сердцах SoftICE, однако где он сейчас? Его нет! То есть его, конечно, можно найти на файловых свалках, но он давно не развивается.


На текущий момент по большому счету у хакера есть выбор только из двух по-настоящему годных отладчиков: WinDbg и OllyDbg. Последний предназначен только для исследования приложений пользовательского режима, тогда как с помощью первого можно также заниматься ядерной отладкой Windows. В этом случае придется использовать два компьютера, объединенных COM-шнурком, локальной сетью или USB-проводом.


 

Современный инструмент кодокопателя

Когда-то хакеры пренебрегали WinDbg, но со временем он вырос и стал действительно мощным и полезным инструментом кодокопателя. Не стоит забывать, что именно он используется командой разработки Windows. Для него можно изготавливать расширения путем подключаемых DLL. Начиная с Windows XP, движок отладки включен непосредственно в операционную систему. Он состоит из двух DLL: dbgeng.dll и dbghelp.dll. Кроме непосредственно средств отладки, среди которых и WinDbg, движок отладки используется в том числе «Доктором Ватсоном» (drwtsn32.exe).


Средство отладки для Windows состоит из четырех приложений, использующих dbgeng.dll:


cdb и ntsd — отладчики пользовательского режима с консольным интерфейсом. Они различаются только одним: при запуске из существующего консольного окна ntsd открывает новое консольное окно, a cdb этого не делает;

kd — отладчик режима ядра с консольным интерфейсом;

WinDbg может использоваться как отладчик либо пользовательского режима, либо режима ядра, но не одновременно. Утилита предоставляет графический интерфейс.

Следовательно, непосредственно WinDbg — это только оболочка для отладки с помощью движка.


Второй — вспомогательный файл dbghelp.dll, который используется внешними тулзами для исследования внутренностей Windows. Под внешними тулзами мы понимаем, например, OllyDbg, Process Explorer от Sysinternals Марка Руссиновича.


У WinDbg есть две версии: классическая и UWP. Первая устанавливается вместе с набором тулз Debugging Tools for Windows. Этот набор содержит две версии WinDbg, соответственно предназначенные для отладки 32-разрядных и 64-битных приложений. UWP-версию можно скачать из Windows Store, она имеет только 32-битную версию. Обе 32-разрядные версии абсолютно равноценны, не считая того, что в UWP-версии имеется продвинутый пользовательский интерфейс «Десятки» (кстати, весьма удобный при работе на большом экране).


Для наших экспериментов я буду применять последний. Разницы в их использовании практически нет, разве что могут немного различаться команды в пользовательском интерфейсе (именно надписи на элементах интерфейса, но не команды встроенного языка — их логическая нагрузка не изменяется).



Перейти обратно к новости