NTCALL v0.1 alpha by Peter K. - Я знаю одну планету, там живет такой господин с багровым лицом. Он за всю жизнь ни разу не понюхал цветка. Ни разу не поглядел на звезду. Он никогда никого не любил. И никогда ничего не делал. он занят только одним: складывает цифры... Антуан Де Сент-Экзюпери. "Маленький принц" Зачем нужна ntcall? =================== В 1996 году, Марк Руссинович (см. http://www.sysinternals.com написал простую программку ntcrash, генерирующую случайные системные вызовы NT. С помошью этой программы было обнаружено несколько системных вызовов, не производящих необходимую проверку своих параметров. Если "везло", то мусор в параметрах к вызову приводил к "синему экрану смерти" на NT, тем самым выдавая "плохой" системный вызов. При желании, знание таких системных вызовов может быть использовано для написания эксплоитов. С тех пор, Microsoft закрыла очень много ошибок сервис паками, в том числе и "плохие" системные вызовы. Марк Руссинович написал, что сделал следующий вариант утилиты ntcrash2, которая генерирует параметры к вызвам более интеллектуально, с точки зрения критических параметров. К сожалению, я не нашел саму эту утилиту, и поэтому написал свой "интеллектуальный" вариант ntcrash. Результаты тестирования ntcall на SP3 показали ее гораздо большую еэффективность по сравнению с ntcrash (экран смерти возникает после ~3 секунд работы.) Принцип работы: =============== NTCALL в отличие от ntcrash содержит в себе таблицы параметров для вызовов. (Размер параметров в стеке.) Эта информация позволяет пропускать вызовы без параметров, а также экономить время при генерации случайного стека. Кроме того, упор в ntcall сделан на генерацию "неправильных" адресных параметров, которые, практически, и являются основной проблемой. Использование: ================ ntcall Опции идут через пробел и начинаются с символа '-' или '/'. Опции следующие: ntoskrnl - делать вызовы в ядро (системные вызовы 0x00-0xd2) (по умолч.) win32k - делает вызовы в win32k.sys (системные вызовы 0x00-0x20a) nolog - не писать лог последнего сгенерированного вызова. (crash.log) Если лог пишется, после перезагрузки можно посмотреть какой вызов привел к "экрану смерти". crash - режим работы на разрушение. Отключен лог, отключен вывод на экран, запускается 30 потоков. help - встроенная помошь. ntcall пытается читать файл badcalls.cfg. Все вызовы, объявленные в этом файле игнорируются ntcall при генерации вызовов. Это нужно для пропуска уже известных "плохих" вызовов, или вызовов, приводящих к зависанию самого ntcall. Пример файла badcalls.cfg: ; Only one directive - NoSysCall. ; Examples: ; NoSysCall 0x0-0xdc (disable all syscalls) ; NoSysCall 0xdc,0x1003,0x44-0x47\ ; NoSysCall 0x28 ; etc.. NoSysCall 0xca ; This NtCall can halt current process --------------------------------------------------------------------------- Все замечания пишите на peter_k@vivos.ru, или 2:5020/931.255@fidonet Peter Kosyh aka Gloomy, Melancholy Coding'2000