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

Родные приложения

Николай «gorl» Андреев

Хакер, номер #082, стр. 082-114-1


(gorlum@real.xakep.ru)

Вникаем в Дзен виндовых native-приложений

Наверняка, не раз когда тебе приходилось аварийно завершать работу твоей винды (к примеру, из-за BSoD), при следующем запуске еще до старта оболочки и приятного экспевого «Welcome» тебе предлагалось проверить твой видавший виды жесткий диск на предмет царапин, bad-секторов, потерянных кластеров и прочих повреждений с помощью импровизированного скандиска. Белым шрифтом на светло-голубом фоне он перечислял все возможные неполадки, после чего выплевывал «гуляй, молодой, жить будешь» и продолжал нормальную загрузку Windows. Было ведь такое? А не задавался ли ты вопросом, как работает этот самый скандиск? Что это за программа такая, которая может существовать еще до старта винды с ее замечательным gui-вым интерфейсом, а? Поверь мне, эта тема стоит того, чтобы с ней как следует разобраться.

Нет, ты только не подумай, что мы сейчас будем копаться с тем, как скандиск, если эту программу можно так назвать, ошибки находит. Это нам сегодня абсолютно не в кассу. Мы будем изучать особый тип приложений, вызываемых еще до старта Win32-подсистемы, так называемых native-приложений.

Как ты, наверное, знаешь, отличительная особенность Windows 2000 и более старших ее версий в том, что в ней реализовано несколько подсистем, обеспечивающих работу приложений Win32 (то есть обычных виндовых, использующих так всеми любимые kernel32.dll, user32.dll и еще сотню другую динамически зависающих библиотек), POSIX и OS/2. А отличительная особенность native-приложений, о которых, собственно, и идет сегодня речь, в том, что они не относятся ни к одной из вышеперечисленных подсистем. Они сами по себе. Ключ к пониманию этого факта в самом названии. Что может напоминать слово «native»? Конечно же, API: где native, там и API. Родной системный интерфейс винды, на котором строятся все прочие интерфейсы для работы тех или иных приложений. Так вот, не относящиеся к тем или иным, native-приложения – это программы, использующие исключительно native API, то есть полностью абстрагирующиеся от неприятных наворотов небольшой кучки виндовых подсистем, обеспечивающих почти никому ненужную совместимость. Причем «только native API» означает, что в таблице импорта экзешника уже привычного нам PE-формата мы не сможем встретить ничего кроме ntdll.dll, библиотеки, экспортирующей для пользовательских приложений родной для нтевых форточек набор функций. Запускаются такие программы исключительно системой, если быть точнее то smss.exe (Session Manager), у пользователя выполнить их не получиться.

Круто, - скажешь ты, - но зачем мне вся эта родная майкрософтовская ересь? О, вот здесь в моем рассказе и начнется самое интересное. Характерной особенностью native-приложений, как я уже замечал, является то, что они могут выполняться еще до запуска и инициализации Win32-подсистемы. То есть до того, как в память будут загружены explorer.exe, winlogon.exe и еще чертов миллион библиотек, ими используемых. Собственно, как раз за счет этого скандиск и может беспрепятственно шарить по диску, править сектора и т.п. – ничего еще не загружено, ко всему есть доступ, можно даже диск форматировать!

Содержание  Вперед на стр. 082-114-2