Скриптовый метод для поиска и уничтожения процесса с использованием определенной библиотеки DLL - PullRequest
0 голосов
/ 22 января 2019

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

Описание проблемы: у нас есть проблема, когда DLL блокируется иэто останавливает IIS от обработки запросов.Есть несколько DLL, которые могут быть проблемой.Мы установили их как исключения для Защитника Windows, но проблема все еще возникает.

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

Этонаходится на Windows 2016 Server.

Требование: очевидно, что требуется долгосрочное исправление, и мы работаем над этим.Пока мы находим это исправление, мы ищем способ найти процесс, использующий dll, и уничтожить этот процесс.

SysInternals ProcessExplorer может идентифицировать процесс, который обращается к файлу dll (это функция бинокля).И как только мы узнаем, какой процесс, мы можем также убить этот процесс в ProcessExplorer.

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

Примечания: В идеале мы исправим проблему, но она продолжается, поэтому мы хотим смягчить симптомы.Некоторые из вас, возможно, предложат решить проблему, и если у вас есть решение, отправьте его. А пока вот несколько вопросов, которые могут быть заданы ... Что является причиной проблемы - если бы мы знали об этом ...!Эта проблема возникает после запуска обновления подписи Защитника Windows.Такое ощущение, что когда Windows Defender перезагружается для загрузки новых сигнатур угроз, DLL-библиотека, находящаяся в памяти, как-то воспринимается как угроза.Может быть, это угроза без косточек - нет, потому что мы отсканировали ее вручную, и она оказалась чистой.

1 Ответ

0 голосов
/ 06 апреля 2019

Вы могли бы вы использовать PowerShell. Вот начало.

Примечания:

  • Он не выполняет никаких проверок, чтобы увидеть, был ли процесс завершен.
  • Он использует PID для выдачи завершения, так как он будет безопаснее, чем имя процесса.
  • Он использует полный путь к модулю, чтобы сделать обнаружение более точным.
  • Код по умолчанию не убивает процесс, измените переменную KillIt на $ true, как только будете счастливы.

Было бы полезно, если бы общая концепция определила процессы для вас и остановочный процесс по умолчанию работает для рассматриваемого процесса (ов):

$ModulePathToFind = "C:\\Windows\\System32\\msxml6.dll"    
$KillIt           = $false

foreach ($p in Get-Process)
{
    foreach ($m in $p.modules)
    {
        if ( $m.FileName -match $ModulePathToFind)
        {
            write-host "Found:" $m.FileName "in" $p.Name "ID:" $p.id

            if ($KillIt)
            {
                write-host "In 'Kill' mode."
                Stop-Process -Id $p.id -Force
            }
            else
            {
                write-host "Not in 'Kill' mode."
            }
        }
    }
}
...