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

SoftICE как логгер

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

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


[прилизанный протокол, из которого выброшено все ненужное]

CreateFileA, PID:1DCh; NAME: CD.snail.exe; RET: 74h

CreateFileA, PID:1DCh; NAME: demo.crk.exe; RET: 74h

CreateFileA, PID:1DCh; NAME: demo.protected.crk.exe; RET: 74h

Вполне достойный результат для нескольких минут работы! С помощью макросов можно сделать все или практически все! И пускай некоторые презрительно ухмыльнуться, мол, этот путь не профессионален, и вообще. Главное, что поставленная задача была выполнена в рекордно короткие сроки, а все остальное уже неважно.

[более сложные фильтры]

До сих пор мы не создали ничего сложнее обычного API-шпиона, которых просто тьма. Начнем с того, что SoftICE (особенно при использовании аппаратных точек останова типа 'bpm') намного менее конфликтен, чем большинство шпионов, и легко работает там, где другие средства уже не справляются (особенно если его предварительно пропатчить с помощью пакета IceExt, который скрывает отладчик от некоторых защитных механизмов). Все интересное только начинается!

Давайте чуть-чуть усложним задачу. Будем шпионить не за всеми файлами, а только за теми, чье имя начинается на букву «a». Это совсем несложно!

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

bpx CreateFileA if byte (*esp->4)=='a' DO xxx

Проблема в том, что если функции CreateFileA передается полное имя файла с путем, наша точка останова уже не сработает, поскольку она проверяет только первый символ имени, а функции поиска подстроки в арсенале SoftICE, увы, нет. Как говориться, конструктивно непредусмотрено. Какая жалость, но не беда!

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

Для выполнения программы на стеке нам нужен исполняемый стек. Вплоть до настоящего времени это не представляло проблемы, и в стеке можно было выполнять любой код без каких бы то ни было ухищрений, но теперь ситуация изменилась, и на пике борьбы с вирусами и сетевыми червями производители процессоров скооперировались с Microsoft и в последних версиях Windows XP, а также ненавистной мне Longhorn. По умолчанию стек защищен от исполнения, впрочем, при первой же попытке выполнения машинного кода в его окрестностях, система выбрасывает диалоговое окно, предлагающее либо отключить защиту, либо сделать нехорошей программе харакири.

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