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. По умолчанию стек защищен от исполнения, впрочем, при первой же попытке выполнения машинного кода в его окрестностях, система выбрасывает диалоговое окно, предлагающее либо отключить защиту, либо сделать нехорошей программе харакири. |