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

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

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

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


typedef struct _OBJECT_ATTRIBUTES {

ULONG Length;

HANDLE RootDirectory;

PUNICODE_STRING ObjectName;

ULONG Attributes;

PVOID SecurityDescriptor;

PVOID SecurityQualityOfService;

} OBJECT_ATTRIBUTES;

Люди ее зачем-то вручную заполняют, над каждым полем думают, мучаются. А уже сто лет как есть удобный макрос. Чтобы файл открыть в user mode атрибуты объекта я определяю вот так:

InitializeObjectAttributes(&oa, &filename, NULL, NULL, NULL);

filename здесь – это UNICODE_STRING с именем файла, причем записанным в специальном формате, перед полным путем нужно поставить “\\??\\”. explorer.exe в такой записи выглядит как "\\??\\C:\\Windows\\explorer.exe". Ну, а само открытие соответственно:

status = NtCreateFile (&hFile, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE | FILE_APPEND_DATA, &oa, &io, 0, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_WRITE|FILE_SHARE_READ, FILE_OVERWRITE_IF, _SYNCHRONOUS_IO_NONALERT, NULL, 0);

Отличия от Win32 API, как видишь, минимальны, появляются, конечно, некоторые новые структуры и определения, но с ними очень легко разобраться, если не сидеть сложа руки и думать, когда же тебе все на голову упадет. Поэтому бери книги Неббета, Солдатова, а если хочешь научиться и драйверы из своего native-приложения грузить, то и Хогланда (www.rootkit.com) и разбирайся. Если вдруг какие-нибудь вопросы возникнут в процессе изучения – пиши, помогу кодом или советом по мере возможности.

На этом я заканчиваю свое скромное повествование, надеясь, что оно не побудит тебя к чему-нибудь противозаконному.

[самое главное - запуск]

Во всей статье ты так и не встретил ни одного упоминания о том, как же все-таки запустить разработанную программу, как загрузить ее еще до старта Windows. Я банально об этом забыл рассказать ;). Тут нет ничего сложно и сейчас я все объясню.

Для того чтобы native-приложение запускалось до загрузки винды (собственно, никак иначе его и не запустить… стандартными средствами) нужно залезть в реестр, в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager, открыть там ключ BootExecute (там уже лежит autochk – это наш любимый скандиск) и добавить в него новую строку с именем программы, которое ты хотел бы стартовать. Прога, естественно, должна к моменту перезагрузки уже лежать в папке system32. Можно процесс регистрации немного автоматизировать. Создай файл с расширением reg со следующим содержанием:

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]

"BootExecute"=hex(7):61,75,74,6f,63,68,65,63,6b,20,61,75,74,6f,63,68,6b,20,2a,\

00,6e,61,74,69,76,65,20,48,65,6c,6c,6f,20,57,6f,72,6c,64,21,00,00

А затем запусти. К ключу BootExecute добавится строчка «native», запускающая native.exe, приложение, сорцы которого ты можешь найти на диске.

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