SoftICE как логгер крис касперски ака мыщъх Хакер, номер #084, стр. 084-112-3 bpx CreateFileA DO "? PID; D esp->4 L 20; P RET; ? EAX; x;" Команда '? PID' выводит идентификатор процесса, 'P RET' выполняет API-функцию, дожидаясь возврата, а '? EAX' сообщает содержимое регистра EAX, в котором находится код возврата из API-функции, и все вместе это работает так: [полная версия протокола] Break due to BPX KERNEL32!CreateFileA DO "? PID; D esp->4 L 20; P RET; ? EAX; x;" 000001DC 0000000476 "?" ; PID 0010:0012138C 43 44 2E 73 6E 61 69 6C-2E 65 78 65 00 61 5F 65 CD.snail.exe.a_e 0010:0012139C 2E 65 78 65 00 00 00 00-00 00 00 00 00 00 00 00 .exe............ 00000074 0000000116 "t" ; код возврата Break due to BPX KERNEL32!CreateFileA DO "? PID; D esp->4 L 20; P RET; ? EAX; x;" 000001DC 0000000476 "?" ; PID 0010:0012138C 64 65 6D 6F 2E 63 72 6B-2E 65 78 65 00 61 5F 65 demo.crk.exe.a_e 0010:0012139C 2E 65 78 65 00 00 00 00-00 00 00 00 00 00 00 00 .exe............ 00000074 0000000116 "t" ; код возврата Break due to BPX KERNEL32!CreateFileA DO "? PID; D esp->4 L 20; P RET; ? EAX; x;" 000001DC 0000000476 "?" ; PID 0010:0012138C 64 65 6D 6F 2E 70 72 6F-74 65 63 74 65 64 2E 63 demo.protected.c 0010:0012139C 72 6B 2E 65 78 65 00 00-00 00 00 00 00 00 00 00 rk.exe.......... 00000074 0000000116 "t" ; код возврата Согласитесь, что с таким отчетом можно и поработать! Мы уже достигли функционала стандартного API-шпиона, однако при желании фильтр легко усложнить, добавив новые критерии отбора проб. Формат протокола отчета также легко обогатить новыми деталями, выводя все необходимые подробности, которые только потребуется (например, содержимое стека вызовов). Конечно, этот путь не обходится без проблем. Постоянно всплывающий SoftICE противно мерцает и жрет производительность. Можно ли как-нибудь заставить его ввести протокол, не всплывая? Можно! Отладчик поддерживает специальную функцию BPLOG, всегда возвращающую TRUE и подавляющую всплытие отладчика. К сожалению, вместе с этим подавляется и последовательность команд, следующая за DO, а значит, создание подробных отчетов становится невозможным, так что для наших целей такой способ не годится. Других «антивсплывающих» средств в нашем распоряжении нет. Еще одним источником головной боли становится мусор в протоколе. Полезные данные перемешиваются с прочей информацией, выводящейся на экран, и... Какая там легкость чтения! Без написания специального форматера отчетов мы буквально утонем. Но программировать на Perl'е лениво, и на помощь приходят... правильно! Макросы! Только на этот раз не из SoftICE, а те, что встроены в FAR. Нажимаем <F4> (в FAR'e) и внимательно смотрим на наш отчет. Как видно, каждая порция отчетной информации начинается со строки "break due to". Вот ее-то мы и будем искать! Нажимаем <Ctrl-.> для начала записи макросов, затем <F7> "break due to" <ENTER>. Теперь <Shift-стрелка вправо> пока мы не выделим все лишнее до "CreateFileA", <Crl-Del>, чтобы вырезать его нафиг, <Ctrl-Shift-стрелка вправо>, чтобы перейти на "DO", которое мы также удаляем вместе с остатком строки и т.д. и т. п. Кромсаем текст, как хотим. Это тяжело описывать словами, легче показать конечный результат. После того как макрос будет создан, достаточно будет его применить к протоколу заданное число раз (просто нажать назначенную ему комбинацию клавиш и не отпускать), в результате чего получится следующее: |