Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Секреты Windows: статьи о реестре, rundll32.exe, программах Книга 'Недокументированные возможности WIndows XP'. Часть 6


Другие наши рассылки:
  • Новости IT-мира: Ежедневно ссылки на новости и статьи сайтов ixbt.com, thevista.ru, xakep.ru, securitylab.ru, oszone.ru, inattack.ru, ht.ua, overclockers.ru, центр загрузки Microsoft, softportal.com, realcoding.net, 3dcenter.ru, ladoshki.com, smti.ru, seonews.ru, ibm.com и др.

Продолжение, начало в выпусках: 4 6 9 11 13

Глава 1. Rundll32.exe, Часть 6. Файловая система

А теперь давайте рассмотрим несколько команд rundll32.exe, предназначенных для работы с файловой системой Windows. С помощью данных команд можно как создавать файлы (но нельзя указать содержимое файлов), так и удалять уже созданные файлы и каталоги Windows.

Создание файлов

Например, для создания файла можно воспользоваться командой rundll32.exe admparse.dll, CheckDuplicateKeysA «путь и имя файла с расширением». Данная команда имеет один большой минус — после своего выполнения она вызывает ошибку. Тем не менее, со своей работой она справляется — после ее выполнения будет создан или заново переписан указанный в параметре функции файл.

Например, подобные команды можно использовать для очистки файлов логов при входе пользователей в систему, указывая их в одном из параметров реестра, предназначенных для автозагрузки.

Удаление файлов а папок

Также с помощью команд rundll32.exe можно удалить каталог или файл. Для этого достаточно воспользоваться командой rundll32.exe ADVPACK.dll, DelNodeRundll32.exe «путь к каталогу или файлу». Функция DelNodeRundll32.exe была написана специально для вызова с помощью команды rundll32.exe, поэтому никаких ошибок при своей работе она не выдает.

Существует еще одна команда, с помощью которой можно выполнить удаление. Но с ее помощью можно удалить только содержимое каталога, а не сам каталог (то есть, переписать необходимый каталог). Это команда rundll32.exe IEAKENG.dll, BToolbar_SaveA «путь к папке». Если указанная в данной команде папка уже существует, она будет автоматически удалена, а потом заново создана.

Существует один интересный плюс этой команды — с ее помощью можно создать папки даже там, где пользователю это сделать нельзя. Например, в каталоге %userprofile%\Local Settings\Temporary Internet Files\Content.IE5.

И последняя команда, которую мы рассмотрим — rundll32.exe WININET.dll, RunOnceUrlCache «путь к каталогу». Это очень страшная и непредсказуемая команда. Алгоритм ее работы примерно такой: сначала она пытается открыть все содержащиеся в указанной папке файлы и папки. Если при попытке открытия файла или папки система вернула данной команде флаг FILEATTRIBUTETAGINFORMATION, тогда команда удаляет соответствующий файл или папку.

Данная команда используется браузером Internet Explorer для удаления временных файлов из папки %userprofile%\Local Settings\Temporary Internet Files при закрытии окна браузера, если значение параметра DWORD-типа Persistent из ветви реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache, равно 0.

Выполнение файлов

А теперь давайте рассмотрим несколько команд для выполнения или регистрации файлов. Например, как можно установить inf-файл с помощью команды rundll32.exe? Для этого применяется несколько команд rundll32.exe, каждая из которых используется для отдельной версии inf-файлов.

Чтобы установить обычный inf-файл, необходимо воспользоваться следующей командой — rundll32.exe setupapi.dll, InstallHinfSection «раздел в файле для начала установки», «флаг», «путь и имя файла». При этом флаг может принимать следующие значения:

  • 0 — не перезагружать компьютер после установки inf-файла;
  • 1 — перезагружать компьютер после установки inf-файла;
  • 2 — спрашивать о перезагрузке компьютера после установки inf-файла;
  • 3 — если нужно, то перезагружать компьютер после установки inf-файла;
  • 4 — если нужно, то спрашивать о перезагрузке компьютера после установки inf-файла;

Например, с помощью данной команды можно выполнить следующие действия.

rundll32.exe setupapi.dll, InstallHinfSection DefaultInstall 132 wsh.inf. Восстановить в реестре настройки сервера сценариев Windows, а также расширений, ему необходимых.

rundll32.exe setupapi.dll, InstallHinfSection DefaultInstall 132 sr.inf. Восстановить в реестре настройки службы ВОССТАНОВЛЕНИЕ СИСТЕМЫ, а также ярлык на программу ВОССТАНОВЛЕНИЕ СИСТЕМЫ в меню ПУСК.

rundll32.exe setupapi.dll, InstallHinfSection DefaultInstall 132 %17%\PCHealth.inf. Восстановить настройки службы для работы с центром справки и поддержки.

rundll32.exe setupapi.dll, InstallHinfSection DefaultUninstall 132 %17%\PCHealth.inf. Удалить настройки службы для работы с центром справки и поддержки.

rundll32.exe setupapi.dll, InstallHinfSection DefaultInstall 132 %17%\dfrg.inf. Восстановить настройки оснастки dfrg.msc и функции BootDefrag.

rundll32.exe setupapi.dll, InstallHinfSection RestoreBrowserSettings 132 %17%\iereset.inf. Восстановить настройки браузера Internet Explorer.

Чтобы зарегистрировать расширенный inf-файл, вам понадобится команда rundll32.exe ADVPACK.dll, LaunchINFSectionEx «имя файла», «имя раздела», «имя cab-файла», «флаг». Данная команда для своей работы требует как стандартные параметры функции установки — имя inf-файла и раздел в нем, с которого начинается выполнение установки — так и специальные параметры:

  • Имя cab-файла, который содержит в себе все файлы, которые устанавливает данный расширенный inf-файл при своей работе;
  • Флаг работы процесса установки, наиболее полезные значения которого следующие: 4 — не выводить промежуточные результаты установки inf-файла; 16 —обновить оболочку операционной системы после установки inf-файла; 32 —выполнить резервное копирование данных перед установкой; 64 — выполнить откат установленного inf-файла; 256 — не строить список файлов при установке inf-файла; 512 — при установке inf-файла принудительно задерживать регистрацию ActiveX-объектов, которые должны быть зарегистрированы с помощью данного inf-файла;

Кроме inf-файлов библиотека ADVPACK.dll позволяет выполнить регистрацию отдельного ActiveX-объекта. Каждый ActiveX-объект поставляется в виде файла с расширением .ocx, регистрация которого происходит с помощью команды rundll32.exe ADVPACK.dll, RegisterOCX «путь и имя файл .ocx».

И напоследок давайте рассмотрим набор команд rundll32.exe, предназначенных для открытия файлов Windows, имеющих специальные расширения и содержимое.

rundll32.exe CdfView.dll, OpenChannel «путь и имя файла канала». Открыть данный файл канала.

rundll32.exe CdfView.dll, Subscribe «путь и имя файла подписчика». Сделать данный канал доступным автономно.

rundll32.exe CRYPTEXT.dll, CryptExtAddCER «файл сертификата безопасности». Добавить данный файл сертификата безопасности.

rundll32.exe CRYPTEXT.dll, CryptExtAddCRL «файл списка отзывов сертификатов». Добавить данный список отзыва сертификатов.

rundll32.exe CRYPTEXT.dll, CryptExtAddCTL «файл списка доверия сертификатов». Добавить данный список доверия сертификатов.

rundll32.exe CRYPTEXT.dll, CryptExtAddP7R «файл ответа на запрос сертификата». Добавить данный файл ответа на запрос сертификата.

rundll32.exe CRYPTEXT.dll, CryptExtAddPFX «файл обмена личной информацией». Добавить данный файл обмена личной информацией.

rundll32.exe CRYPTEXT.dll, CryptExtAddSPC «файл сертификата PCKS #7». Добавить данный файл сертификата PCKS #7.

rundll32.exe CRYPTEXT.dll, CryptExtOpenCAT «файл каталога безопасности». Открыть данный файл каталога безопасности.

rundll32.exe CRYPTEXT.dll, CryptExtOpenCER «файл сертификата безопасности». Открыть данный файл сертификата безопасности.

rundll32.exe CRYPTEXT.dll, CryptExtOpenCRL «файл списка отзывов сертификатов». Открыть данный файл списка отзывов сертификатов.

rundll32.exe CRYPTEXT.dll, CryptExtOpenCTL «файл списка доверия сертификатов». Открыть данный файл списка доверия сертификатов.

rundll32.exe CRYPTEXT.dll, CryptExtOpenP10 «файл запроса на сертификат». Открыть данный файл запроса на сертификат.

rundll32.exe CRYPTEXT.dll, CryptExtOpenP7R «файл ответа на запрос сертификата». Открыть данный файл ответа на запрос сертификата.

rundll32.exe CRYPTEXT.dll, CryptExtOpenPKCS7 «файл сертификата PCKS #7». Открыть данный файл сертификата PCKS #7.

rundll32.exe CRYPTEXT.dll, CryptExtOpenSTR «файл хранилища сертификатов». Открыть данный файл хранилища сертификатов.

rundll32.exe dsquery.dll, OpenSavedDsQuery «файл запроса к службе каталогов ActiveDirectory». Вызов данной команды пытается выполнить файл запроса к каталогу ActiveDirectory.

rundll32.exe msconf.dll, NewMediaPhone «путь к файлу». Открыть данный файл телефонии. Эта команда используется программой NetMeeting для открытия соответствующих файлов.

rundll32.exe msconf.dll, OpenConfLink «путь к файлу» Эта команда также используется программой NetMeeting. Именно с помощью этой команды создаются ярлыки на различные конференции (для автоматического соединения с другими сетевыми компьютерами).

rundll32.exe netshell.dll, InvokeDunFile. Открыть dun-файл (Dialup Networking File).

rundll32.exe SHDOCVW.dll, OpenURL «путь к файлу». Открыть файл ярлыка Интернет (имеет расширение .url), указанный в качестве параметра функции.

rundll32.exe shell32.dll, Control_RunDLL «имя CPL или DLL-файла». Вызов данной команды приводит к запуску соответствующего CPL-файла, или определенной функции файла DLL. Например, после вызова команды rundll32.exe shell32.dll, Control_RunDLL main.cpl, произойдет запуск апплета МЫШЬ. Если вы разочарованы, тогда могу сказать об еще одной особенности работы данной функции — с ее помощью можно указать вкладку, на которой будет открыт апплет. Например, вызов команды rundll32.exe shell32.dll, Control_RunDLL main.cpl,,2 приведет к открытию апплета МЫШЬ, открытого на вкладке ПАРАМЕТРЫ УКАЗАТЕЛЯ. Аналогично можно открывать и любые другие вкладки различных апплетов (при этом вкладки нумеруются, начиная с нуля). Также функция Control_RunDLL используется и в таких командах:

  • rundll32.exe shell32.dll, Control_RunDLL desk.cpl desk,@Appearance — открыть диалог Свойства: Экран на вкладке Оформление;
  • rundll32.exe shell32.dll, Control_RunDLL desk.cpl desk, @Appearance /Action:OpenMSTheme /file:«путь к файлу темы рабочего стола» — выполнить установку файла стиля оформления Windows XP;
  • rundll32.exe shell32.dll, Control_RunDLL desk.cpl desk, @Appearance /Action:OpenTheme /file:«путь к файлу темы рабочего стола» — выполнить установку файла стиля оформления Windows XP;
  • rundll32.exe shell32.dll, Control_RunDLL desk.cpl desk, @Desktop — открыть диалог Свойства: Экран на вкладке Рабочий стол;
  • rundll32.exe shell32.dll, Control_RunDLL desk.cpl desk, @Settings — открыть диалог Свойства: Экран на вкладке Параметры;
  • rundll32.exe shell32.dll, Control_RunDLL NetSetup.cpl,@0,WNSW — отобразить окно мастера создания беспроводной сети;
  • rundll32.exe shell32.dll, Control_RunDLL NetSetup.cpl — отобразить окно мастера настройки сети;

Особо стоит сказать о двух командах Control_RunDLL, использующих для своей работы библиотеки Windows:

  • rundll32.exe shell32.dll, Control_RunDLL hotplug.dll — вызов данной команды отображает диалог «горячего» удаления флешки или другого внешнего устройства (Рис.1.43).
  • Рисунок 1 Рис. 1.43. Результат выполнения команды rundll32.exe shell32.dll, Control_RunDLL hotplug.dll

  • rundll32.exe shell32.dll, Control_RunDLL input.dll — вызвать диалог ЯЗЫК И СЛУЖБЫ ТЕКСТОВОГО ВВОДА.

При выполнении приведенной выше команды без указания какого-либо CPL или DLL-файла, будет открыто окно Панель управления.

rundll32.exe shell32.dll, OpenAs_RunDLL «путь и имя файла». С помощью данной команды можно отобразить диалоговое окно ОТКРЫТЬ С ПОМОЩЬЮ… для открытия указанного в параметре функции файла. Например, с помощью данной команды можно открыть исполняемый файл программы в блокноте или с помощью другой программы (по умолчанию исполняемые файлы нельзя вызывать с помощью диалога ОТКРЫТЬ С ПОМОЩЬЮ…).

rundll32.exe shimgvw.DLL, ImageView_Fullscreen «путь к файлу изображения». С помощью данной команды можно открыть указанный файл изображения с помощью программы просмотра изображений и факсов.

Выполнение команд

Существует еще одна интересная возможность, которую можно использовать при разработке файлов скриптов — выполнение команд, записанных в ветви реестра. Для этого применяются функции библиотеки ADVPACK.dll. Например, после выполнения команды rundll32.exe ADVPACK.dll, UserInstStubWrapper «подраздел», система выполнит строку, содержащуюся в параметре строкового типа REALSTUBPATH, расположенном в ветви реестра HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\ACTIVE SETUP\INSTALLED COMPONENTS\«ПОДРАЗДЕЛ». Одновременно плюсом и минусом данной команды является то, что программа, которая будет запущена после обработки содержимого параметра REALSTUBPATH, будет запущена как процесс — то есть, ей будет отказано во взаимодействии с рабочим столом и она не сможет отобразить своего окна. Минус этого и так ясен, а плюс можно определить на примере. Например, если указать в параметре REALSTUBPATH ветви реестра HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\ACTIVE SETUP\INSTALLED COMPONENTS\PARA команду rundll32.exe amovie.ocx, RunDll /play /close e:\music\B-2\волки.wma, которую мы уже рассматривали в первом разделе книги, то после вызова команды rundll32.exe ADVPACK.dll, UserInstStubWrapper para, будет выполнено воспроизведение данного музыкального файла. При этом воспроизведение данного файла можно будет прекратить только выгрузкой из памяти процесса rundll32.exe, который породил это воспроизведение, ведь никакого окна индикации воспроизводимого файла отображено не будет.

Также можно воспользоваться разновидностью приведенной выше команды — rundll32.exe ADVPACK.dll, UserUnInstStubWrapper «подкаталог». После вызова данной команды будет выполнена строка параметра REALSTUBPATH, расположенного в ветви реестра HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\ACTIVE SETUP\INSTALLED COMPONENTS\«ПОДКАТАЛОГ».RESTORE. Например, выполнение команды rundll32.exe ADVPACK.dll, UserUnInstStubWrapper para будет использовать параметр из ветви реестра HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\ACTIVE SETUP\INSTALLED COMPONENTS\PARA.RESTORE.

Кроме функций библиотеки ADVPACK.dll существует еще одна возможность запуска команд из реестра — использование ветви реестра HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUNONCEEX (также данная ветвь присутствует в корневом разделе HKEY_LOCAL_MACHINE). По умолчанию содержимое данной ветви выполняется только при следующем входе пользователя в системы, хотя существует возможность сказать системе, чтобы она обработала содержимое этой ветви немедленно. При этом после своего выполнения все команды из этой ветви автоматически удаляются. Также следует учитывать одну особенность данной ветви — если в ней будет определено несколько запусков программ, тогда все эти программы будут запускаться последовательно. Сначала запуститься первая программа, после того, как пользователь ее закроет, запуститься вторая программа и так далее.

Формат содержимого данной ветви немного отличается от формата подобных ей ветвей, направленных на выполнение команд при входе пользователя в систему (например, HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN). Каждая программа или команда, которая должна быть запущена, записывается в отдельный подраздел данной ветви реестра — название подраздела не имеет значения, но лучше последовательно пронумеровать эти подразделы, чтобы система могла легко определить, какая программа должна запускаться первой. Параметр по умолчанию каждого подраздела определяет название, которое будет отображаться в диалоге индикации установки при выполнении программы, которая определена в соответствующем подразделе реестра. При этом если параметр по умолчанию не определен, тогда в диалоге индикации не будет никакой информации о запуске данной программы или команды, хотя команда будет запущена. Сама же программа или команда записывается в значении строкового параметра соответствующего подраздела (название параметр не имеет значения). При этом в подразделе можно определить несколько команд, записав их в несколько строковых параметров — все эти команды будут выполняться последовательно на данном шаге установки.

Чтобы лучше понять формат данной ветви реестра, давайте рассмотрим один пример. Например, ниже на листинге приведен пример записей данной ветви реестра, экспортированных в reg-файл.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceEx\1]
 ="Запуск cmd.exe и calc.exe"
"cmd"="cmd.exe"
"calc"="calc.exe"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceEx\2]
 ="Запуск блокнотика"
"notepad.exe"="notepad.exe"

Допустим, содержимое приведенного листинга находится в реестре. Теперь мы вводим команду rundll32.exe IERNONCE.dll, RunOnceExProcess. Данная команда как раз и указывает системе, что она должна обработать содержимое ветви HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUNONCEEX. И результат обработки данной ветви можно увидеть на рисунке 1.44.

Рисунок 2 Рис. 1.44. Способ работы запуска команд из ветви реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\Currentversion\Runonceex

Как видно на рисунке, при запуске команды rundll32.exe появляется диалог индикации, в котором указано, какой шаг установки сейчас происходит. При этом был запущен калькулятор, так как при сортировке между названиями параметров в подразделе 1, калькулятор, судя по названию параметра, запускается первым. После того, как вы закроете окно калькулятора, будет открыто окно командного процессора. При этом индикатор будет все еще указывать на первый шаг, ведь еще не началась обработка содержимого следующего подраздела ветви (подраздела 2). После того, как вы закроете окно командного процессора, будет запущен блокнот и при этом индикатор начнет указывать на второй шаг операции установки.

Если вы не укажете значений параметров по умолчанию ни в одном из подразделов данной ветви реестра, тогда индикатор установки отображаться не будет. Тем не менее, сами команда будут выполняться.

Продолжение следует

Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=101

В избранное