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

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

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

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

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

 

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

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

SoftICE
SoftICE

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

Логотип Syser
Логотип Syser

На текущий момент по большому счету у хакера есть выбор только из двух по-настоящему годных отладчиков: 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-версии имеется продвинутый пользовательский интерфейс «Десятки» (кстати, весьма удобный при работе на большом экране).

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

Продолжение доступно только подписчикам

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

Подпишись на «Хакер» по выгодной цене!

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

Крис Касперски

Крис Касперски

Известный российский хакер. Легенда ][, ex-редактор ВЗЛОМа. Также известен под псевдонимами мыщъх, nezumi (яп. 鼠, мышь), n2k, elraton, souriz, tikus, muss, farah, jardon, KPNC.

Юрий Язев

Юрий Язев

Программист, разработчик компьютерных игр. Старый автор журнала «Хакер»

6 комментариев

  1. Mr-r00t

    27.11.2018 at 12:31

    Не IDA, где можно построить схему визуально, не x64dbg — WinDbg. Только хадкор ?

  2. robotobor

    28.11.2018 at 04:03

    Спасибо, как же это все интересно, продолжай!

  3. devbutch

    28.11.2018 at 21:09

    Юрий, хорошо пишите! Слог очень похож на слог Криса. Спасибо за материал!

  4. crabovwik

    02.12.2018 at 02:18

    Отличная статья! Афтар красавО!

Оставить мнение

Check Also

Задачи на собеседованиях. Задачи от компании Abbyy

Вопросы на собеседовании в стиле «почему крышка от канализационного люка круглая?» — это с…