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

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

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

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


Так, допустим, форматирование нам сейчас и не нужно, но вот возможность модифицировать некоторые файлики может оказаться очень кстати. Взять, подправить чуток sfc.dll, капельку explorer.exe, совсем немного kernel32.dll и живи себе – радуйся, с новыми экстравагантными способами обхода файрвола, невидимости и автозапуска. Ой, опять я об «этом» заговорил. Успокою любителей мирного программирования: большинство задач, требующих прямого и беспрепятственного доступа к диску решаются именно с помощью разработки native-приложений. Вот, незаменимый Partition Magic, например, когда ему требуется хардкорно перелопатить весь диск, после рестарта уползает как раз на приятный дозагрузочный светло-голубой фон, где и осуществляет свое не самое темное дело.

В конце концов, native-приложения нужны хотя бы для того, чтобы у приятелей твоих челюсть отпала от вида Hello World! еще до загрузки Windows. Это ведь не какой-нибудь банальный MessageBox, это preload-программа.

[что нужно для...]

Раз ты дочитал до этого места, вопрос «зачем?» у тебя уже не стоит. Следующий вопрос, наверное, «как?». Что ж, как обычно – очень просто. В старой доброй студии напишем проект, скомпилируем, проапдейтим запись в реестре и все – геморроя не очень много.

Первое с чем надо разобраться, так это с тем, как написать при относительно обычных условиях приложение, использующее только native API и ничего кроме него. То есть, что для этого требуется. Оказывается, не очень много:

+ Visual Studio .NET, в которой компилируются все представленные мной ранее проекты на Си. Я не буду изменять своей привычке.

+ Windows DDK, набор для создания драйверов. Он нам нужен не как среда для разработки, а как источник драгоценных определений структур ядра и типов данных, активно используемых native API, уже не говоря о том, что библиотеку ntdll.lib в других местах задолбаешься искать.

+ Заголовочный файл nt.h, взятый мной откуда-то из Сети. Ранее он имел немного другое название, но я его подредактировал, подправил для использования в native-приложениях и поэтому переименовал. В нем содержатся описания функций, экспортируемых ntdll.dll. Как это ни печально, в ntddk.h описана лишь малая часть необходимых для работы native-функций, поэтому приходиться использовать отнюдь не родные заголовки.

Обладая всем необходимым можно самым непосредственным образом приступать к программированию здраствуймир’а.

[структура приложения]

Марк Руссинович (www.sysinternals.com) советует писать нативные программы, пользуясь исключительно DDK. Для тех кто всю жизнь разрабатывает драйвера это, конечно, идеальный вариант, но мне, честно говоря, привычнее визуальная студия (причем не самая новая). Я создал в ней самый обычный Win32-проект и просто чуть-чуть подкорректировал: убрал все, что можно было убрать из настроек, оставил все либо «по-умолчанию», либо «взять из исходника», а в самом сорце я написал следующее:

Назад на стр. 082-114-1  Содержание  Вперед на стр. 082-114-3