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

SoftICE как логгер

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

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


Нажмем <Ctrl-D> для возврата в Windows и попробуем пооткрывать файлы, а когда это надоест, вызовем Symbol Loader и сохраним историю SoftICE в файл протокола (File -> Save SoftICE history as). После непродолжительного шуршания на диске образуется файл winice.log (по умолчанию). Посмотрим что там?

[наш самый первый протокол]

Break due to BPX KERNEL32!CreateFileA DO "x;" (ET=1.44 seconds)

Break due to BPX KERNEL32!CreateFileA DO "x;" (ET=940.19 milliseconds)

Break due to BPX KERNEL32!CreateFileA DO "x;" (ET=14.51 seconds)

Break due to BPX KERNEL32!CreateFileA DO "x;" (ET=19.23 milliseconds)

Break due to BPX KERNEL32!CreateFileA DO "x;" (ET=13.88 milliseconds)

Мы видим множество строк, каждая из которых описывает причину срабатывания точки останова и время. Вроде бы хорошо, а по сути ничего хорошо. Какой файл открывался в каждой строке? Завершилась ли эта операция успешно или нет? В общем, наша точка останова нуждается в существенной доработке.

Вот улучшенный вариант (внимание, SoftICE не позволяет ставить две точки останова на одну функцию и перед тем, как создавать новую, старая должна быть удалена командой 'bc 0'):

[условная точка останова, распечатывающая имена всех открываемых файлов]

bpx CreateFileA DO "D esp->4 L 20; x;"

Что изменилось? Появился вывод имени файла: 'D esp->4 L 20', где 'D' - команда отображения дампа, 'esp->4' - указатель на первый аргумент функции CreateFileA (что открывать), а 'L 20' - сколько байт выводить (конкретное значение выбирается по вкусу). Протестируем обновленный вариант. Нажимаем <Ctrl-D>, выходим из отладчика, запускам какую-нибудь программу, за которой хотим пошпионить (например, FAR), затем вновь нажимаем <Ctrl-D>, заходим в отладчик и говорим 'bd 0' для прекращения шпионажа. Выходим из SoftICE, заходим в Symbol Loader и сохраняем историю на диск.

На этот раз мы получаем:

[усовершенствованный протокол с именами открываемых файлов]

Break due to BPX KERNEL32!CreateFileA DO "d esp->4 L 20;x;" (ET=3.64 seconds)

0010:004859E8 43 4F 4E 4F 55 54 24 00-43 4F 4E 49 4E 24 00 49 CONOUT$.CONIN$.I

0010:004859F8 6E 74 65 72 66 61 63 65-00 4D 6F 75 73 65 00 25 nterface.Mouse.%

Break due to BPX KERNEL32!CreateFileA DO "d esp->4 L 20;x;" (ET=8.98 milliseconds)

0010:004859F0 43 4F 4E 49 4E 24 00 49-6E 74 65 72 66 61 63 65 CONIN$.Interface

0010:00485A00 00 4D 6F 75 73 65 00 25-63 00 25 30 32 64 3A 25 .Mouse.%c.%02d:%

Break due to BPX KERNEL32!CreateFileA DO "d esp->4 L 20;x;" (ET=16.93 milliseconds)

0010:00492330 43 3A 5C 50 72 6F 67 72-61 6D 20 46 69 6C 65 73 C:\Program Files

0010:00492340 5C 46 61 72 5C 46 61 72-45 6E 67 2E 6C 6E 67 00 \Far\FarEng.lng.

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

[финальная точка останова ]

Назад на стр. 084-112-1  Содержание  Вперед на стр. 084-112-3