Эксплоит для сетевого чата sba (sba@list.ru) Спецвыпуск: Хакер, номер #048, стр. 048-034-2 Дизассемблируем Насси Как известно, дизассемблирование – это превращение машинного кода в код Ассемблера. Мы делаем дизассемблирование для того, чтобы получить возможность свободно анализировать код Насси. Самый лучший программный дизассемблер - это Interactive Disassembler (IDA) (www.datarescue.com). Получив ассемблерный листинг программы, можно в спокойной обстановке исследовать процедуру, в которой находится переполняемый буфер. А вот саму процедуру будем искать с помощью дебагера. Дебагаем Насси В нашем деле без дебагера обойтись совершенно невозможно. Его первоначальное предназначение было в исправлении программных багов. В нашем же случае мы будем использовать дебагер для проверки протокола Насси, более того, он нам окажет просто бесценную помощь в написании самого эксплоита. Здесь есть два варианта – Soft-Ice (www.compuware.com/products/driverstudio/softice.htm) и Olly Debugger (home.t-online.de/home/Ollydbg). Первый может работать как из-под ring0, так и из-под ring3, второй же - только под ring3. Однако преимущество Olly Debugger заключается в том, что он выступает как отдельная программа с замечательным GUI-интерфейсом, и мы можем свободно делать свою работу помимо того, что еще загружен отладчик, а Soft-Ice этого нас лишает. Итак, у исследователей появилась возможность изменять память Насси. Что нам это дает? В принципе, все что угодно. Те, кто использует Network Assistant, знают, что в настройках есть такие функции, как удаленный просмотр процессов, просмотр экрана, и многие-многие другие. Как правило, пользователи запрещают эти возможности, и мы не можем удаленно посмотреть на экран собеседника. Как открыть доступ как к просмотру процессов, так и к другим фичам? Надо как-то убрать в опциях этот флажок. А как же мы это сделаем, да еще и удаленно? Найдем тот самый флажок, только в памяти. Вообще проверку стандартного CheckBox делают с помощью специальной API-функции IsDlgButtonChecked. Но Network Assistant написан на Borland Delphi 7, а Delphi использует свои специальные функции для проверки состояния кнопок. В данном случае это будет что-то наподобие CheckBox1.Checked, которая возвращает значение 1 или 0, то есть выбрано или нет. Дизассемблер не показывает нам этих специальных функций, в нем эта функция выглядит примерно так: call xxxxxxxx, где xxxxxxxx – ее адрес. Что же делать? Хитрые программеры, которые задались этим вопросом задолго до нас, изобрели специальную утилиту, которая называется Decompiler Delphi, или DeDe (www.dafixer.cjb.net). DeDe показывает не «call xxxxxxxx», а название функции Delphi. Конечно, такой программы, как полноценный декомпилятор Delphi-кода, не существует. DeDe так назвали потому, что она проводит анализ и выдает ассемблерный код с комментариями на функции, то есть ставит комментарии, если эта функция принадлежит Delphi. Давай сделаем простенькую программку с CheckBox и кнопкой. Кнопка нужна только для проверки, работает ли CheckBox. |