7

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

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

Существуют ли способы для Windows 7, чтобы отслеживать, как процесс запускается?

3 ответа3

9

Есть вещь, которая называется PPID (Parent Process ID), но ее довольно сложно найти в Windows, потому что это не столбец, показанный в диспетчере задач, и я даже не вижу его для столбцов в Process Explorer.

Два способа сделать это

Method 1 - WMIC
Method 2 - Process Monitor

Оба эти метода довольно быстрые

Метод 1 - WMIC

Я буду использовать ответ о том, как найти PPID с помощью WMIC отсюда https://stackoverflow.com/questions/7486717/finding-parent-process-id-on-windows

И это делает остальное довольно простым

C:\blah>wmic process get processid,parentprocessid
ParentProcessId  ProcessId
0                0
0                4
4                320
392              572
320              656
648              664
392              688
688              740
688              756
688              764
...              ...

Остальное довольно очевидно.

Итак, давайте предположим, что вы хотите найти, кто запустил calc.exe

и calc.exe вы видите из диспетчера задач, это PID 7384

C:\blah>wmic process get processid,parentprocessid | find "7384"
10896            7384

PPID             PID


C:\crp>

WMIC показывает связь между PID и PPID. Затем найдите 10896 в диспетчере задач (10896 - это PPID, указанный для calc.exe PID 7384), и в диспетчере задач я вижу, что процесс с PID 10896 - это cmd.exe, который я использовал для запуска calc. exe И действительно, cmd.exe является родительским процессом, который породил calc.exe

Метод 2 - Монитор процесса

Вы можете сделать это в мониторе процессов sysinternals.

нажмите filter..filter в строке меню и добавьте фильтр, фильтрующий имя или путь или PID процесса, например, имя процесса calc.exe или фильтр для пути, и введите c:\windows\system32\calc.exe

Я случайно использовал имя процесса

Сделайте ОК .. и файл .. захват, если он еще не захватывает.

Дважды щелкните нужный процесс, поэтому в этом случае загрузите образ calc.exe и откроется диалоговое окно свойств, перейдите на правильную вкладку «процесс», и вы увидите PID и PPID(идентификатор родительского процесса).

И, конечно, когда вы знаете PPID, как сейчас, вы можете найти его в диспетчере задач, чтобы узнать, какой процесс его породил.

3

Если бы это был процесс, который выполнялся в фоновом режиме, я бы, вероятно, использовал бы Process Explorer или подходы wmic процессов, описанные Barlop или Robert Koritnik . Если процесс временный и запускается / завершается очень быстро, а времени для выполнения необходимых щелчков и нажатий клавиш не хватает, я бы использовал Process Monitor, как указано в nixda.

Я немного опоздал на эту вечеринку, но ради завершения:

Другой альтернативой этому (если по какой-либо причине вы не хотите использовать Process Monitor) является использование встроенного отслеживания процессов. Это можно включить, перейдя в:

Панель управления -> Администрирование -> Локальная политика безопасности -> Локальные политики -> Политика аудита Если административных средств нет в вашей панели управления, можно еще одним способом открыть локальную политику безопасности, нажав кнопку «Пуск» и введя secpol.msc.

Вы должны увидеть несколько вариантов аудита, включая отслеживание процессов аудита. Включите это для категории успеха.

Теперь в « Просмотр событий» -> «Журналы Windows -> Безопасность» вы увидите событие для "создания процесса"(это идентификатор события 4688), а также имя / путь создаваемого процесса, а также поле с именем « Идентификатор процесса создателя». Он содержит шестнадцатеричное представление PID процесса, который создал этот процесс (вы можете легко преобразовать его, используя calc.exe в представлении Programmer ).

Вы можете найти этот PID (PID этого «процесса-создателя», т. Е. PPID) в диспетчере задач или в выводе чего-то вроде tasklist /svc.
Если процесс больше не существует, вы можете искать другие события с идентификатором 4688 для этого другого PID с момента его создания.

-1

Несколько возможных предложений, чтобы попробовать (в случайном порядке), некоторые из которых могут не дать выполнимых результатов или ваши уже пробовали. Я не пробовал это сам, поэтому я просто делюсь идеями, которые могут пропустить другие. Мозговой ... Имейте в виду, что большинство моих предложений направлены на смягчение проблем, а не на их устранение. это так называемые отчаянные меры или план Z.

1. Информация о командной строке в диспетчере задач

Вы проверили столбец команд в диспетчере задач, предоставляет ли он эту информацию? Я полагаю, вы уже пробовали это.

2. Информация о процессе в Process Explorer

Если команда пуста, я попробую Process Explorer из SysInternals и посмотрю, получу ли я больше информации об этом конкретном процессе.

3. Приостановка процесса

Если вы не можете найти корень своей проблемы, вы можете попытаться приостановить процесс, чтобы он продолжался, но ничего не сделал. Вы можете сделать это либо с помощью Resource Monitor
Приостановка процесса мониторинга ресурсов

или SysInternals Process Explorer
Process Explorer Процесс приостановки

Какой-то неизвестный процесс, который запускает его, скорее всего, проверяет процессы (по имени) и, если видит, что его там нет, запускает его. Если вы сделаете паузу, он будет существовать, поэтому этот процесс инициализации может не породить новый экземпляр.

Это может привести к сбою, если в процессе инициализации используются другие средства обнаружения процесса (межпроцессное взаимодействие), но этот тип обнаружения процесса сложнее разработать, поэтому выигрывает более легкая опция.

4. Пользовательская программа

Мы можем иметь дело с двумя процессами здесь. Первый, который проверяет существование второго процесса и запускает его (то, что вы убиваете). Когда запущен второй, вы можете увидеть его командную строку, но зная, что это не поможет вам даже не запустить его, вы, скорее всего, будете после первого процесса, который фактически все инициирует. Вот незадача.

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

Если вы действительно хороши в низкоуровневой разработке ОС, вы можете написать второй процесс, чтобы также проверить, кто его запустил, если это возможно. Я не уверен, но Windows API должен предоставить такую информацию. Это поможет вам понять суть проблемы.

5. Диспетчер задач

Возможно, ваш процесс не порожден другими процессами, а определенным заданием запланированного задания, выполняющимся каждую минуту. Я не уверен, что вы уже проверили это, но это может быть так.

6. Инфекционная очистка

Считается вирусной инфекцией? Попробуйте обнаружить его и очистить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .