Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #111, МАРТ 2008 г.

Энциклопедия антиотладочных приемов

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

Хакер, номер #111, стр. 111-072-1

За свою кодокопательскую жизнь я нарыл обширную (и достаточно полную) коллекцию антиотладочных приемов, надерганную из протекторов, вирусов, crack-me'сов – плюс включающую мои собственные идеи и разработки. Систематизировав разрозненные факты и разложив их по полочкам, я решил разделить эти заначки с хакерским миром. Вот так и возникла идея рубрики «антиотладка», главным образом посвященной NT- и UNIX-подобным операционным системам (W2K, XP, Vista, Linux, BSD) и x86-платформе. Виртуальные машины JVM и .NET так же как и 64-разрядные архитектуры пока еще находятся в исследовательской стадии, но однажды я доберусь и до них!

Антиотладочными приемами называют способы противостояния отладчику, затрудняющие реконструкцию подопытной программы, – от простого детекта до захвата ресурсов, жизненно необходимых отладчику для работы. Хотя отладчик далеко не единственный хакерский инструмент, нельзя объять необъятное, поэтому в статье мы решили сосредоточиться исключительно на антиотладке.

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

Я поставил перед собой несколько задач. Во-первых, систематизировать всю имеющуюся информацию и протестировать каждый антиотладочный прием под десятком популярных отладчиков. Во-вторых, показать каким образом и с помощью каких плагинов их можно обойти – и как распознать эти плагины и нейтрализовать их. Вот такая рекурсивная тема получается: отладка -> антиотладка -> антиантиотладка -> антиантиантиотладка. И рекурсивный спуск на этом не останавливается – ведь количество приставок "анти" ничем не ограничено! :)

Боевой арсенал

В качестве базовой операционной системы для проведения экспериментов выбрана W2K SP0 и Knoppix 4.7 (Debian-based Linux с ядром 2.4.х). Отличия остальных осей будут упоминаться по ходу статьи (если в этом возникнет необходимость).

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

Список отладчиков с их кратким описанием и указанием версий приведен ниже:

Olly Debugger 1.10

В просторечии «Ольга» или «Олли». Самый продвинутый ring-3 отладчик на сегодняшний день, к тому же бесплатный. Основное преимущество — огромное количество плагинов, способных решить практически любую задачу и обломать рога даже крутым защитам. Недостаток — «движок» отладчика работает через MS Debugging API, страдающий кучей врожденных ограничений, оставляющий за собой множество трудноудаляемых следов и представляющий легкую мишень для антиотладочных технологий. Для борьбы с последними приходится писать довольно сложные плагины, зачастую работающие на уровне нулевого кольца (т. е. устанавливающие свой собственный драйвер). Другой недостаток — графический интерфейс, причем часть действий выполняется только мышью, ненавистной хакерам старого поколения, предпочитающим консоль и клаву.

Olly Debugger 2.00с pre-alpha 3

Экспериментальный отладчик с полностью переписанным debug engine и жестко урезанным функционалом (по сравнению с версией 1.10). Тем не менее, debug engine по-прежнему использует MS Debugging API и это ring-3 отладчик со всеми вытекающими отсюда ограничениями.

IDA Pro Advanced 5.2

Включает в себя довольно примитивный ring-3 отладчик, работающий через MS Debugging API (в NT) и через библиотеку ptrace (в UNIX), что делает ее легкой добычей для защитных механизмов. Готовых антиантиотладочных плагинов под ИДУ раз два и обчелся, но при наличии SDK всегда можно написать свой собственный (правда, вместе с этим придется писать еще кучу недостающего функционала, уже реализованного у конкурентов). Пожалуй, единственное преимущество интегрированного отладчика — возможность отладки подопытного кода прямо «на месте» (just in the place), без выхода из дизассемблера. Поддерживаются как графические, так и консольные режимы (в UNIX – только консоль). IDA Pro – коммерческий продукт, причем большинство «варезных» версий, гуляющих в сети, работают крайне нестабильно и постоянно падают, поэтому имеет смысл остановиться на бесплатной (и, естественно, нереально урезанной) версии 4.9.

Microsoft Debugger 6.8.4.0

Входит в состав WDK (Windows Driver Kit — бывший Driver Development Kit или DDK), а также в комплект Debugging Tools. Оба они бесплатны, но WDK намного больше по объему и требует предварительной регистрации для получения Windows Live ID (проверка валидности Windows при этом не осуществляется), в то время как Debugging Tools раздается без регистрации вместе с SDK, в которую входит документация, заголовочные файлы, библиотеки и несколько примеров, как надо писать плагины. К сожалению, сторонних плагинов под Microsoft Debugger очень немного.

Microsoft Debugger может работать как на прикладном уровне (ring-3), так и на уровне ядра. Вплоть до XP ядерная отладка требовала, как минимум, двух машин, соединенных COM-шнурком, но теперь достаточно и одной.

Поставляется в двух редакциях: windbg.exe – графический интерфейс и cdb.exe — интерфейс командой строки. И та и другая являются лишь тонкими обертками вокруг dbgeng.dll, в которой, собственно, и реализован основной отладочный «движок», документированный протокол обмена. Поэтому, чтобы в очередной раз не писать трассер с нуля, dbgeng.dll можно использовать в качестве «фундамента» при написании универсальных распаковщиков исполняемых файлов.

Soft-Ice 2.6.0 (Build 336)

Легендарный отладчик ядерного уровня всех времен и народов. Работает в обход MS Debugging API, что значительно усложняет антиотладку, однако, учитывая, что для разработчиков защит soft-ice – враг номер один, практически все протекторы легко распознают его присутствие в системе. Поэтому никак не обойтись без специальных расширений (которые упомянем дальше).

Названая версия не является последней, но она стабильна и хорошо совместима с хакерскими плагинами, «вгрызающимися» в отладчик без всякого API (путем bit-hack'а). С более поздними версиями хакерские плагины несовместимы. С другой стороны, Soft-Ice поддерживает плагины, написанные для MS Debugger, а вот обратной совместимости, увы, не наблюдается.

В настоящее время поддержка soft-ice прекращена и продукт похоронен. Он еще совместим с XP и Server 2003 (хотя на многоядерных процессорах уже наблюдаются серьезные проблемы), но в долгосрочной перспективе soft-ice обречен и необходимо искать ему замену. Чем скорее, тем лучше!

Syser 1.95.19000.0894

Достойная альтернатива умирающему soft-ice. Ядерный отладчик, поддерживающий многопроцессорные машины и всю линейку NT-подобных систем – по Висту включительно. Это коммерческий продукт, написанный двумя китайскими хакерами – Wu YanFeng и Chen JunHao – предоставляющими всего лишь семидневный бесплатный триал. Это оскорбительно мало, однако, поскольку я вливался в Syser team, то рассказывать о том, как ломать его – не собираюсь (хотя ломается он легко). В настоящий момент готовится книжка «Техника отладки II» с полной версией Syser'а на компакт диске, так что осталось лишь немного подождать, чтобы заполучить это чудо.

Нас ждет графический интерфейс, к которому поначалу трудно привыкнуть, но в остальном — это все тот же самый soft-ice, во всяком случае с точки зрения синтаксиса команд. Будучи в team'е, я работаю над усилением обороноспособности этого отладчика (в смысле стойкости против антиотладки). Плюс разрабатывается возможность подключения внешних плагинов (правда, плагины для Syser'а мне неизвестны, кроме пары штук, написанных им самим в порядке эксперимента).

GDB 6.1

GNU Debugger – основной отладчик под UNIX, ориентированный на совершенно иной тип мышления, чем все вышеперечисленные отладчики. Это не просто интерактивный отладчик, скорее это станок с программным управлением, гибким и мощным интерфейсом. Отлаживать с его помощью «честные» программы — одно удовольствие, но в плане антиотладки дела обстоят плохо. GDB даже не пытается сопротивляться и работает через библиотеку ptrace (которая на самом деле никакая не библиотека, а системный вызов). GDB принципиально неспособен отлаживать программы, которые не х, чтобы их отлаживали. А такие программы мало-помалу начинают появляться (взять хотя бы упаковщик исполняемых файлов от Shiva).

Версия 6.1 собрана в 2004 году и к новым билдам, очевидно, не относится. Но так как основной debug engine реализован не в GDB, а сосредоточен в ядре системы, то номер версии решающего значения не имеет.

Естественно, помимо GDB существуют и другие отладчики, например, Lin-Ice, но поскольку антиотладочные технологии под UNIX только-только начинают развиваться, для наших экспериментов вполне сгодиться и GDB.

Ядро NT включает в себя интегрированный отладчик, способный устанавливать точки останова и вести мониторинг множества системных событий. При этом его активность невозможно запеленговать с прикладного режима! Функции недокументированы, но открыто экспортируются ядром NTOSKRNL.EXE и начинаются с префикса Kd*. Их прототипы описаны в NTDDK, а краткое описание каждой из них можно нарыть в независимых ресурсах типа ReactOS, ORS.com, wine. Стоит только начать курить в сторону KdEnableDebugger/KdDisableDebugger, как все остальное приходит само.

Для запуска soft-ice под VM Ware необходимо добавить в конфигурационный файл виртуальной машины (*.vmx) следующие строки (остальные отладчики на ней запускаются и без этого):

svga.maxFullscreenRefreshTick = "2";

vmmouse.present = "FALSE";

paevm = TRUE;

processor1.use = FALSE;

Категорически не рекомендуется использовать антиотладочные приемы в своих собственных программах (равно как и задействовать отвечающие за это опции протектора). Немного существует «честных» антиотладочных приемов, и все они легко обходятся отладчиками. Нечестные же конфликтуют с операционной системой, различными сторожевыми программами, новыми типами процессоров и виртуальными машинами, в результате чего отдел поддержки взрывается тысячей звонков недовольных пользователей. А хакеры, ну взломают они программу не за час, так за полтора, пускай даже за неделю. Да, это задержит их, но какой ценой?

INFO

Название «soft-ice» позаимствовано из фантастического романа Уильяма Гибсона «Нейроматик» (William Gibson: «Neuromantic»). В роли льда там выступали защитные механизмы, которые хакерам приходилось рубить, соответственно, soft-ice – дословно «мягкий лед» – это легкий хакинг.

WWW

Olly-Debugger 1.10:

Olly-Debugger 2.00c pre-alpha 3:

IDA Pro 5.2 (commercial):

IDA Pro 4.9 Freeware:

Microsoft Debugging Tools for Windows:

Windows Driver Kit (WDK) для всех систем по Висту включительно:

Windows Server 2003 SP1 DDK:

Soft-Ice:

Syser 1.95.19000.0894:

GDB:

Содержание