Это могло бы стать новым делом Шерлока Холмса, однако он уже фактически раскрывал его дважды, как вы увидите дальше. Еще одна вариация не тянет на новую главу, но все-таки дело было любопытное ввиду сложных условий!
Однажды ко мне обратился читатель Максим с просьбой помочь вычислить источник окон командной строки, которые периодически появляются группой при входе в Windows и быстро исчезают. Я уверен, что многие из вас их тоже видели и до сих пор наблюдают иногда.
Максим читал Дело об автозагрузке Windows, однако оно не совсем подходило под его случай.
[+] Сегодня в программе
Диагностика читателя
Права администратора у подписчика были. Но компьютер в организации, а установка сторонних программ запрещена и отслеживается. Это лишало возможности записать процесс загрузки с помощью Process Monitor (дело об автозагрузке) или Windows Performance Analyzer (WPA).
Читатель был в курсе, что начиная с Windows 10 в состав системы входит консольная утилита wpr.exe (Windows Performance Recorder). С ее помощью можно сделать фактически такой же лог загрузки, как утилитой xbootmgr из ADK (хотя почему-то за вычетом собственно графика этапов загрузки). Но в то время была сломана команда wpr -stop
🤦♂️ Впрочем, даже если бы утилита wpr работала, я не знаю, чем из коробки проанализировать ее ETL с записью запуска системы (сам использую WPA из ADK).
Более того, злосчастные окна появляются лишь иногда, причем нерегулярно. Поэтому в принципе затруднительно отловить их с помощью записи загрузки.
Максим изучил все расположения автозапуска в файловой системе и реестре, а также включил историю заданий планировщика и проанализировал ее после появления окон. Но так ничего и не нашел. Тогда читатель пришел ко мне.
Мои варианты диагностики
Я сходу предложил заглянуть в логи WDI — диагностической инфраструктуры Windows. Ведь я разбирал в блоге то самое дело об автозагрузке Windows в новом ракурсе. Но вы не поверите — тогда в Windows не работала еще и запись событий загрузки! 🤦♂️🤦♂️ Поэтому никаких логов там не было.
Немного поразмыслив, я предложил включить аудит создания процессов. После этого на каждое создание процесса в журнал записывается событие 4688, причем в нем отражается команда запуска и родительский процесс. Дальше нужно дождаться появления окон и прошерстить все недавние события в поисках cmd.exe
(например, приспособив мой скрипт PowerShell). Это сработало!
Но поскольку с тех пор логи WDI починили, проще и быстрее посмотреть в XML-файлах из папки %WinDir%\System32\wdi\LogFiles\StartupInfo
. Там пять последних перезагрузок, поэтому может даже и не понадобится ждать следующего появления окон. Найдутся примерно такие записи:
<Process Name="C:\Windows\System32\cmd.exe" PID="2304" StartedInTraceSec="54.364"> <StartTime>2024/02/15:07:26:59.1816645</StartTime> <CommandLine><![CDATA["C:\Windows\System32\cmd.exe" /q /c del /q "C:\Program Files\Microsoft OneDrive\Update\OneDriveSetup.exe"]]></CommandLine> <DiskUsage Units="bytes">0</DiskUsage> <CpuUsage Units="us">10381</CpuUsage> <ParentPID>1964</ParentPID> <ParentStartTime>2024/02/15:07:26:58.9753454</ParentStartTime> <ParentName>runonce.exe</ParentName> </Process> <Process Name="C:\Windows\System32\cmd.exe" PID="3432" StartedInTraceSec="54.485"> <StartTime>2024/02/15:07:26:59.3032408</StartTime> <CommandLine><![CDATA["C:\Windows\System32\cmd.exe" /q /c del /q "C:\Program Files\Microsoft OneDrive\StandaloneUpdater\OneDriveSetup.exe"]]></CommandLine> <DiskUsage Units="bytes">0</DiskUsage> <CpuUsage Units="us">10639</CpuUsage> <ParentPID>1964</ParentPID> <ParentStartTime>2024/02/15:07:26:58.9753454</ParentStartTime> <ParentName>runonce.exe</ParentName> </Process>
Это OneDrive с помощью cmd убирает за собой мусор! Родительский процесс — runonce.exe, потому что OneDrive вносит команды в пользовательский раздел реестра RunOnce, т.е. HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
Выглядит это примерно так:
В канале Telegram я как-то копался в нюансах этого древнего способа для однократного запуска команд. И там был намек именно на это дело! Цитирую:
Более того, клиент OneDrive с первого выпуска Windows 10 и по сей день использует этот раздел для самообслуживания 😎
Поскольку команды удаляются сразу после выполнения, никаких следов в реестре и автозагрузке не остается.
Дело раскрыто!
Max 04
OneDrive не использую, потому таких окон не видел. Но спасибо, будем знать о таком)))
Nikolay Kolesnik
https://imgur.com/a/gSBVRPr
Ещё onedrive делает вот так, и перечеркнутые множатся
Vadim Sterkin
Не видел у себя такого.