Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #84, ДЕКАБРЬ 2005 г.

SoftICE как логгер

крис касперски ака мыщъх

Хакер, номер #084, стр. 084-112-1


Рассказ об ассемблере, низкоуровневом отладчике и макросах

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

У меня тоже давно чесались лапы написать статью на тему логгинга. Взять хотя бы тех же API-шпионов. Все программы, которые я видел, очень часто падали без всяких видимых причин или обходились вирусами/защитными механизмами, оставляя самые ценные API-функции за пределами лога. К тому же, размер сгенерированных логов просто ошеломлял. Среди миллионов бестолковых строк не было практически ничего интересного, а система фильтрации функций (даже если она и присутствовала) тупее моего хвоста. Можно было, конечно, пропустить лог через внешний фильтр, написанный на Perl'е или Си, но ведь это же сколько программировать надо! Не говоря уже о том, что нам может потребоваться информация, отсутствующая в логе, скажем, следует ли за данной API-функцией команда TEST EAX,EAX или нет. А если мы захотим шпионить не только за API, но и за чем-нибудь совершенно другим? Например, перехватить протокол обмена с драйвером или железом.

SoftICE дает нам такую возможность! Мы просто создаем условную точку останова с хитрыми параметрами и заставляем отладчик вместо всплытия на экран, выводить всю информацию в лог, причем какие данные выводить и в каком порядке, опять-таки определяем мы сами. Система макросов великая вещь, но далеко не все хакеры используют ее на полную. Хотим получить гибкий и конфигурабельный логгер с практически неограниченными возможностями? Ну, так чего же мы ждем?!

[легкая разминка]

Прежде чем использовать SoftICE как логгер его необходимо правильно настроить. Запускам Symbol Loader, лезем в Edit -> SoftICE initialization setting и увеличиваем размер буфера истории (history buffer) до нескольких мегабайт. Точное значение зависит от конкретной задачи. Чем больше информации нам необходимо собрать за один сеанс, тем длиннее должен быть буфер. Поскольку буфер устроен по принципу кольца, то при его заполнении никакого переполнения не происходит, просто свежие данные затирают самые старые. Во вкладке Macros Definition можно увеличить количество одновременно используемых макросов с 32 (по умолчанию) до 256. Но это уже по желанию. Для большинства задач лимит в 32 макроса мешать никому не будет.

Теперь попробуем в качестве разминки проследить за вызовом функции CreateFileA, использующимся для открытия устройств и файлов. Создадим условную точку останова следующего вида: 'bpx CreateFileA DO "x;"'. Ключевое слово DO определяет последовательность команд отладчика, которые тот должен выполнить после того, как эта точка сработает. Команды разделяются точкой с запятой и подробнее об их синтаксисте можно прочитать в главе Conditional Breakpoints руководства пользователя по отладчику. В данном случае здесь стоит только команда 'x', означающая немедленный выход из отладчика.

Содержание  Вперед на стр. 084-112-2