Аудит и дизассемблирование exploit'ов

>>> Врезка как запустить shell-код под отладчиком


Статические методы исследования, к которым относятся дизассемблеры, не всегда удобны и во многих случаях отладка намного более предпочтительна. Однако, отладчиков, способных отлаживать shell-код не существует и приходится хитрить.

Пишем простую программу наподобие "hello, word!", компилируем. Открываем полученный исполняемый файл в hiew'е, привычным нажатием ENTER'а переключаемся в hex-режим, давим <F8> (header) и переходим в точку входа по <F5>. Нажимам <*> и выделяем курсором некоторое количество байт, такое — чтобы было не меньше размера shell-кода. Нажимаем <*> еще раз для завершения выделения и перемещаем курсор в начало выделенного блока (по умолчанию он будет раскрашен бордовым). Давим <Ctrl-F2>, в появившимся диалоговом окне вводим имя файла (в данном случае shellcode) и после завершения процесса загрузки блока с диска выходим из hiew'а. <F9> можно не нажимать, т. к. изменения сохраняются автоматически. Ругательство "End of input file" означает, что размер выделения превышает размер файла. В данном случае — это нормальная ситуация. Хуже, когда наоборот (если часть файла окажется незагруженной shell-код, естественно, работать не будет).

После этой несложной хирургической операции исполняемый файл можно отлаживать любым отладчиком, хоть soft-ice, хоть OllyDbg, но перед этим необходимо отредактировать атрибуты кодовой секции (обычно она называется .text), разрешив ее модификацию, иначе shell-код выбросит исключение при первой же попытки записи. Проще всего обработать файл с помощью утилиты EDITBIN, входящий в штатный комплект поставки компилятора Microsoft Visual C++, запустив ее следующим образом:

EDITBIN filename.exe /SECTION:.text,rwe



Содержание раздела