- [Digital Virus Labs #11] - [Page 31] - Резидентность при помощи реестра Windows 98 (Или Псевдо-резидентность) (c) by Gobleen Warrior/SMF ВВЕДЕНИЕ. Что такое реестр WINDOWS наверняка знают все. Если кто-то не знает, то это структура, в которой WINDOWS хранит все свои настройки. Там же сохраняют свои настройки и программы под WINDOWS типа WORDа, PHOTOSHOPа, и многих, многих других. О реестре написаны целые книги, поэтому просто невозможно рассказать обо всем в одной статье. Я обращу внимание только на то, что показалось интересным мне, и, надеюсь, покажется таковым тебе, о, уважаемый читатель! Большая часть статьи посвящена одной конкретной теме - резидентности и стелс-функциям при помощи реестра. В конце статьи в разделе ДУРАЦКИЕ ШУТКИ приведены некоторые данные, которые могут использоваться как прикольные эффекты. Точнее говоря, данная резидентность не есть истинная резидентность, как ее принято понимать, поэтому и называть ее лучше псевдо-резидентностью, но для краткости далее мы эту подробность опустим. Многое из того, что будет описано далее, можно сделать при помощи стандартных диалогов WINDOWS, но это я не буду описывать потому как эта статья посвящена реестру, а не WINDOWS. РЕЗИДЕНТНОСТЬ ПРИ ПОМОЩИ РЕЕСТРА. Я, конечно, прекрасно понимаю, что тема, которую я собираюсь затронуть, возможно, не нова, возможно, гораздо профессиональнее было бы достигнуть резидентности более продвинутыми путями, но почему-то я все-таки хочу рассказать, как это сделать через реестр. Для начала некоторые справочные данные: При двойном щелчке на значке файла, он будет открыт в ассоциированным с ним приложении. Файлы *.DOC откроются в WORD, *.VBS - выполнятся при помощи WSCRIPT.EXE, и т.д. Это ни для кого не новость. Как WINDOWS определяет, к какому приложению относится конкретный тип файла? По расширению. Если данное расширение зарегистрировано в системе, то WINDOWS запускает (или проделывает иные действия) с данным файлом. Если данный тип файла не зарегистрирован, WINDOWS будет говниться. Как регистрируются файлы, где и в каком виде хранится информация о них? Вся информация о типах файлов и командах, применимых к данному типу хранится в ветви реестра HKEY_CLASSES_ROOT. Каждому типу файлов должны соответствовать два подраздела. Первый подраздел определяет расширение файла и содержит идентификатор, который используется как имя для второго подраздела, в котором хранятся описания команд, применяемых к данному файлу. Схематически это выглядит так: HKCR- | |- .ext = Идент. |-... |-... |-Идент. = <Описание> - | - Shell - | | -... | - Глагол = ---> | -... | -... ---> = <Название пункта меню> - | - Command = "Командная строка" ПРИМ.: HKCR - условное обозначение HKEY_CLASSES_ROOT. Текст в угловых скобках (<>) не является обязательным. Рассмотрим данную схему на конкретном примере: файлах *.VBS. Ищем в HKCR подраздел ".vbs" (регистр не имеет разницы - ".VBS" и ".vbs" для реестра одно и то же). Смотрим значение идентификатора - по умолчанию это "VBSFile", хотя может быть и любое другое. Далее ищем подраздел "VBSFile". Он содержит несколько подразделов, из которых нам важен только "Shell". В нем содержится информация о том, какие действия WINDOWS может производить с данным типом файлов. Данный подраздел по умолчанию содержит четыре подраздела - "Edit", "Open", "Open2", "Print". Эти подразделы иногда называются "глаголами". Они могут быть любыми, но существуют некоторые, которые WINDOWS использует по умолчанию. Данные - из этого числа. Смысл действий "Edit" и "Print" пояснять не надо. "Open" содержит команды для выполнения *.VBS файлов в оболочке WINDOWS, а "Open2" - из командной строки DOS. Каждый из этих четырех разделов содержит подраздел "Command". Этот подраздел всегда называется именно так. Данный подраздел содержит командную строку для приложения, которое будет запущено при выборе данного глагола из контекстного меню, появляющегося при нажатии правой кнопкой на значке файла. В нашем случае нас интересует глагол "Open". Подраздел "Command" в нем содержит строковый параметр "(По умолчанию)", содержащий строку (при установках по умолчанию) "C:\WINDOWS\WScript.exe "%1" %*". Что нам это дает? А вот что: если мы заменим эту строку на другую, например на такую: "C:\WINDOWS\Wscript.exe C:\WINDOWS\Handler.VBS ### "%1" %*" то получится, что каждый раз при запуске файлов VBS будет вызываться файл C:\WINDOWS\ Handler.VBS, которому будут передаваться все параметры командной строки. Значок "###" необходим для того, чтобы Handler.VBS знал, что сейчас нужно принять из командной строки имена файлов, подлежащих заражению (естественно, что Handler.VBS должен обрабатывать командную строку всякий раз при запуске, чтоб знать, когда ТОТ-САМЫЙ раз, а когда файл просто так запущен). Этот значок я поставил только потому, что в своих экспериментах я использовал его. Он может быть каким угодно, может и отсутствовать вообще. Просто мне так проще было передать сигнал к началу работы. Конечно, все эти изменения будут заметны при запуске диалога ВИД/СВОЙСТВА ПАПКИ/Типы файлов и далее по тексту, но этого можно и избежать! Как - указано дальше. STEALTH ЭЛЕМЕНТЫ. STEALTH ПРИ ОПЕРАЦИЯХ С ФАЙЛАМИ Здесь все понятно. Если пользователь откроет зараженный файл для редактирования, он, естественно, обнаружит там чуждые строки, что заставит его задуматься о причине их появления. Что сделать, чтобы этого не было? Ответ очевиден - нужно сделать так, чтоб при открытии пользователь не увидел оного тела. Сделать это можно опять же путем подмены строки в реестре. Как было сказано выше в разделе "Shell" находятся подключи-глаголы "Edit" и "Print". По умолчанию их содержимое практически идентично: в подразделах "Command" в обоих глаголах содержится строки "C:\WINDOWS\ Notepad.exe %1" ("Edit") и "C:\WINDOWS\Notepad.exe /p %1" ("Print"). Точно также заменяем их на строку, примерно такого вида: "C:\WINDOWS\Wscript.exe C:\WINDOWS\Handler.VBS ### "%1". При выборе этих пунктов в контекстном меню правой кнопки будет вызываться обработчик, который должен удалять тело из зараженного файла, выполнять запуск Notepad.exe с соответствующими параметрами. Обработчик должен каким-то образом проверять закрыт ли Notepad.exe, или нет, и после закрытия опять заражать файл. STEALTH В СИСТЕМНЫХ МЕНЮ Чтобы пользователь случайно не заметил подмену, необходимо слегка подправить деятельность меню ВИД/СВОЙСТВА ПАПКИ/Типы файлов. Именно там находится диалог просмотра/изменения настроек типа файла. Вернемся ко второму подразделу, описывающему команды, применимые к типу файла. В нашем случае (по умолчанию) это подраздел называется "VBSFile". Этот подраздел содержит двоичный параметр EditFlags, который предназначен для разрешения/запрещения изменений установок для зарегистрированного типа файла. Изменение этого параметра повлечет те или иные действия, соответствующие новому значению EditFlags. Возможные значения приведены: 01 00 00 00 - Скрыть имя зарегистрированного файла во вкладке "Типы файлов" 08 00 00 00 - Запрещение кнопки "Изменить" во вкладке "Типы файлов" 10 00 00 00 - Запрещение кнопки "Удалить" во вкладке "Типы файлов" 20 00 00 00 - Запрещение кнопки "Создать" в диалоге "Изменение свойств типа файла" 40 00 00 00 - Запрещение кнопки "Изменить" в диалоге "Изменение свойств типа файла" 80 00 00 00 - Запрещение кнопки "Удалить" в диалоге "Изменение свойств типа файла" 00 01 00 00 - Запрещение текстовой панели "Описание" в диалоге "Изменение свойств типа файла" 00 02 00 00 - Запрещение кнопки "Изменить значок" в диалоге "Изменение свойств типа файла" 00 04 00 00 - Запрещение кнопки "По умолчанию" в диалоге "Изменение свойств типа файла" Можно также комбинировать эти значения, если необходимы действия в отношении нескольких кнопок или текстовых панелей. Для этого надо сложить значения каждого столбца из необходимых значений. Обратите внимание: все значения ШЕСТНАДЦАТЕРИЧНЫЕ! Пример: Необходимо запретить кнопки "Удалить" и "Изменить" в диалоге "Изменение свойств файла. Для этого складываем: 4 + 8 = С. Следовательно, цифра в первом столбце будет С (Шестнадцатеричное 12). Строка целиком будет выглядеть так: С0 00 00 00. Записав эту строку в реестр, получим необходимый результат. Значения в 5 - 8 столбцах тоже имеют смысл: xx xx 01 00 - Запрет появления диалога "Открыть из текущего места / Сохранить на диске" при загрузке файла в Internet Explorer. Выбранные файлы будут всегда открываться автоматически. STEALTH РЕДАКТОРА РЕЕСТРА При желании можно открыть редактор реестра Regedit.exe и найти все изменения. Чтобы усложнить этот процесс можно запретить допуск к средствам редактирования реестра. Для этого надо в подразделе HKEY_CURRENT_USERS\ Software\Microsoft\Windows\CurrentVersion\Policies\System создать параметр DWORD, назвать его "DisableRegistryTools" и придать ему значение 0х00000001. Правда возможность импорта/экспорта *.REG файлов при определенных условиях остается доступной, но не так уж много людей умеет это делать. ПРИМ: Можно также использовать соответствующий подраздел в HKEY_USERS. В обоих случаях этот трюк будет работать только для текущего пользователя. ДУРАЦКИЕ ШУТКИ. 1. Как скрыть диск в окне "Мой Компьютер". Для сокрытия дисков необходимо создать параметр DWORD в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ Explorer, если необходимо изменить профиль конкретного пользователя (активного в данный момент), либо в разделе HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows\CurrentVersion\Policies\Explorer (для изменения во всех пользовательских профилях). Имя этого параметра должно быть NoDrives, а значение - отдельная тема. (ПРИМ. Если раздел \Explorer отсутствует, создайте его) Всего возможно 26 имен дисков (Согласно книжке (1)). Параметр DWORD является набором битовых флагов. Всего флагов возможно 26, как и дисков. Соответственно единица в первом справа бите отключит диск 1, диск А - дисковод. Во втором - диск В, в третьем - диск С и так далее. Единственная возможная сложность - перевод из двоичного вида в шестнадцатеричный. Для данного перевода хорошо использовать калькулятор, входящий в поставку WINDOWS. Пример: Необходимо отключить диски С и D. Битовая маска будет выглядеть так: 1 1 0 0 (отсчет битов справа налево). В шестнадцатеричном виде это будет С. Записываем число 0х0000000С в параметр NoDrives, перезапускаем оболочку, и получаем необходимый результат. Для отключения ВСЕХ дисков в системе, соответственно используется битовая маска из 26 единиц - шестнадцатеричное число 3ffffff. В параметр NoDrives записываем значение 0x03ffffff. 2. Как убрать десктоп. Для того чтобы убрать десктоп, необходимо создать двоичный параметр в разделе \Microsoft\Windows\CurrentVersion\Policies\Explorer либо в HKEY_CURRENT_USER, либо в HKEY_LOCAL_MACHINE. Разница рассмотрена чуть выше. Имя параметра должно быть NoDesktop, а значение - 00000001. 3. Как скрыть команду ЗАВЕРШЕНИЕ РАБОТЫ. Товарищи из MICROSOFT сделали одну нехорошую вещь: многие из ключей реестра, отвечающих за полезные функции, работают только в ветке HKEY_CURRENT_USER, что означает то, что фунциклировать они будут только в сеансе текущего пользователя. Данный ключ - один из таких. Вернее наполовину такой. Если прописать его в соответствующий раздел HKEY_LOCAL_MACHINE, то он будет работать наполовину - команда исчезнет только из меню "ПУСК". В меню, вызываемом по ALT-CTRL-DEL, она останется. Для того, чтобы скрыть команду ЗАВЕРШЕНИЕ РАБОТЫ нужно в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ Explorer создать параметр DWORD, обозвать его "NoClose" и придать ему значение 0х00000001. 4. Как ограничить доступ к программам. Чтобы ограничить доступ к программам (а по сути разрешить доступ только к определенным программам) нужно в подразделе HKEY_LOCAL_MACHINE\ Software\Microsoft\Windows\CurrentVersion\Policies\Explorer создать параметр DWORD с именем RestrictRun, и значением 0х00000001. Также нужно создать подраздел, назвать его ResrictRun и помещать в него строковые параметры с числовыми именами, начиная с единицы (1, 2, 3, 4 и т.д.), записывая в них как значения имена файлов, которые допускается запускать. Пути при этом не обязательны. ВНИМАНИЕ: При наличии на машине одного пользовательского профиля для всех пользователей очень велик шанс полностью запороть работы системы! ПОСЛЕСЛОВИЕ Все примеры в этой статье были проверены в WINDOWS 98. Работоспособность их в других версиях высоковероятна, но не обязательна, в силу небольших отличий реестров Win95, Win98 и WinNT. Win2000 вообще не рассматривается, в силу отсутствия какой-либо информации о структуре ее реестра. За все ошибки и недочеты прошу прощения. Все пошлые выпады в мою сторону мне пох. ИСПОЛЬЗОВАННЫЕ ИСТОЧНИКИ ИНФОРМАЦИИ 1. Г. Борн. РЕЕСТР WINDOWS 98. Пер. с англ. Санкт-Петербург, 2000. 2. Статьи из интернета. 3. Собственные опыты. СПАСИБО: Всем мемберам SMF за то что вы есть. Protagor'у за письма, SlageHammer'у за общение, Гюнтеру Бору за книжку, Яблочкову за лампочку, Рудольфу Дизелю за двигатель, марсианам за наше спокойствие и всем уважаемым читателям, если они не будут сильно ругаться на эту статью. ОГРОМНОЕ СПАСИБО: Людям (они знают, кто они), которые мне очень помогли (они знают в чем :)))). Спасибо огромное! Пусть у вас всегда все будет хорошо! Gobleen Warrior//SMF