![]() |
Завершение процессов кроме, определенных
Подскажите как написать скрипт,который будет закрывать все процессы кроме мною указанных.
например: которые должны работать svchost.exe services.exe ctfmon.exe explorer.exe и тд А все остальные закрыть! |
вот похожее
http://forum.oszone.net/showthread.php?t=208639 |
O L E G, вот кстати, усовершенствованный вариант скрипта по ссылке ferget, но без WMIC:
Код:
@Echo Off |
Покажите пожалуйста оптимальный вариант "белого списка" для Windows XP.
|
sov44,
Вот мой, ничего лишнего. Но помните, что набор зависит от установленных у вас служб, работающих в фоновом режиме программ, и т.д. - это сугубо персональное дело. |
извените ребят но мне надо что бы через VBS файл запускался а не через командную строку, перепишите плиз
|
Примерно так:
Перед запуском убедитесь, что Вы сохранили все данные: поскольку Вы перечислили не все необходимые для нормальной работы процессы, а я не стал расшифровывать Ваше «и тд», результатом снятия одной из системных служб станет немедленная перезагрузка ОС. |
Проверил скрипт работает но вылает такая ошибка
сторка 28 символ 4 ошибка: Сбой при удаленном вызове процедуры источник: SWbemOmjectEx конечно можно фильтр ошибок поставить, но ошибка эта важная? |
O L E G, приношу Вам свои извинения. У меня эти строки были закомментированы, поскольку я делал только вывод имени процесса для завершения.
Я поправил код в своём предыдущем посте. Пробуйте. |
Iska, Да ладно можно без извенений,вы же мне не обязаны)) я понимаю
перепроверил такая же ошибка по этому адрессу |
O L E G, проверил, работает. Приведите код, который используете Вы.
|
Option Explicit
Dim arrProcesses Dim strComputer Dim objSWbemLocator Dim objSWbemServicesEx Dim objSWbemObjectEx Dim objSWbemEventSource Dim lngThisScriptProcessID arrProcesses = Array("svchost.exe", "services.exe", "ctfmon.exe", "explorer.exe", "winlogon.exe", "csrss.exe", "lsass.exe", "smss.exe") strComputer = "." Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator") objSWbemLocator.Security_.Privileges.AddAsString "SeDebugPrivilege", True Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2") lngThisScriptProcessID = GetScriptProcessID(objSWbemServicesEx) For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process") With objSWbemObjectEx If Not (IsProcessEnabled(arrProcesses, .Name) Or .ProcessID = lngThisScriptProcessID) Then If .Terminate() = 0 Then 'WScript.Echo .Name, "Terminate" End If End If End With Next Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _ "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'") Do With objSWbemEventSource.NextEvent().TargetInstance If Not IsProcessEnabled(arrProcesses, .Name) Then If .Terminate() = 0 Then 'WScript.Echo .Name, "Terminate" End If End If End With Loop Set objSWbemEventSource = Nothing Set objSWbemObjectEx = Nothing Set objSWbemServicesEx = Nothing Set objSWbemLocator = Nothing WScript.Quit 0 '============================================================================= '============================================================================= Function IsProcessEnabled(arrProcesses(), strProcess) Dim elem IsProcessEnabled = False For Each elem In arrProcesses If UCase(strProcess) = UCase(elem) Then IsProcessEnabled = True Exit For End If Next End Function '============================================================================= '============================================================================= Function GetScriptProcessID(objSWbemServicesEx) Dim strPath strPath = """mshta.exe"" " & _ """<HTML><HEAD><HTA:APPLICATION APPLICATIONNAME='GetParentPID' " & _ "WINDOWSTATE='minimize' SHOWINTASKBAR='no'</HEAD></HTML>""" With WScript.CreateObject("WScript.Shell").Exec(strPath) GetScriptProcessID = objSWbemServicesEx.Get("Win32_Process.Handle='" & CStr(.ProcessID) &"'").ParentProcessID .Terminate End With End Function |
Код обрамляется тэгом «code».
В появляющемся окне об ошибке нажмите «Ctrl-C», и результат копирования также вставьте из буфера обмена сюда. |
Код:
--------------------------- |
O L E G, Вы действительно используете:
Код:
strComputer = "." Давайте попробуем вставить ради эксперимента некоторое ожидание вслед за получением PID скрипта: Код:
lngThisScriptProcessID = GetScriptProcessID(objSWbemServicesEx) |
Iska,
использую Код:
strComputer = "." пробовал Код:
lngThisScriptProcessID = GetScriptProcessID(objSWbemServicesEx) |
O L E G, замените в двух местах фрагмент:
Код:
If .Terminate() = 0 Then Код:
WScript.Echo .Name, "Попытка завершения" |
Код:
--------------------------- |
O L E G, даже ни одного имени процесса не выдал? Сразу в ошибку выпал?
Добавьте-ка в arrProcesses — «System Idle Process» и «System». |
извени ребят ,я не успел посмотреть после какого процесса ошибка выскачила но она была.конец рабочего дня был не успел,в понедельник все будет
|
процесс MSHTA.exe -его не удалось завершить
--------------------------- Windows Script Host --------------------------- Сценарий: C:\Documents and Settings\Admin\Рабочий стол\12.vbs Строка: 29 Символ: 4 Ошибка: Не найден Код: 80041002 Источник: SWbemObjectEx --------------------------- ОК --------------------------- |
Код:
arrProcesses = Array("svchost.exe", "services.exe", "ctfmon.exe", "explorer.exe", "system.exe", "winlogon.exe", "smss.exe", "csrss.exe", "lsass.exe", "mshta.exe", "ntoskrnl.exe", "wmiprvse.exe" ) добавил эти процессы вроде закрывается без каких либо ошибок,но мне интересно ,с этим скриптом могут возникнуть проблемы на других машинах? |
Если добавить некоторое ожидание после получения PID скрипта — «mshta.exe», думаю, можно будет исключить: он используется только в начале скрипта и далее не используется. «wmiprvse.exe» — это служба самого Wbem, без неё, конечно, никак.
Цитата:
А какова была конечная Ваша цель, и почему Вы не захотели использовать политики ограниченного использования программ? |
Нашел один косяк, после запуска скрипта те проргаммы что не в списке не возможно открыть, они автоматически закрываются,такую чувство что скрипт в процессах висит и закрывает приложения,в чем проблема может быть
Как и ранее я хотел сделать программу которая меняет данные ресстра и удалеет банеры при Включенной системе, 1. я сделал что бы скрипт запускался по нажатию Win+F1 2. сделал что скрипт запускается через пол часа как заставка, что мне дает 100% гарантию закрытия всех процессов и Explorer и винлокеров и восстановить его заново Explorer. 3. скрипт даже работает по верх Win+L блокировки системы,как бы запускает 2 рабочий стола по верх Блокировщика,что дает возможность изменить реестр и так далее,от вирусов и локеров при активной системы Теперь мне все данные надо соединить в один фунциональный файл и все перепроверить |
Цитата:
Если Вам сие не нужно — удалите эту часть: Код:
Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _ Цитата:
|
Не правильно избяснил мысль,не всех процессов,а тех что не всписке.
1.Заблокировал винлокер систему не возможно что либо запустить 2. мой скрипт через определенное время срабатывает,блокирует полностью автозапуск, исправляет Winlogon,Police и тд 3. Закрывает процессы что не всписке и Explorer то же,открывает его заново,тем самым уже без винлокера и у нас есть доступ к реестру и остальным данных 4. даже если мы системы перезагрузим,у нас будет всеравно заблокирован автозапуск и почишены ветви,тем самым неоткуда будет локеру запуститься |
Я сталкивался с такими случаями инфекций:
* служба, в свойствах которой указана немедленная перезагрузка ОС в случае её завершения; * несколько процессов, каждый из которых следит за наличием остальных и, в случае их отсутствия — немедленно их запускает и восстанавливает пути и методы их запуска. Потому вывод: лучший способ чистить ОС — чистить её не из-под неё самой. |
Думаю, если по сидеть по думать, то все таки перехитрить можно Локеров
Или с помошью Безопасности Заблокировать доступ к веткам, откуда грузиться локер,закрыть процессы, тем самым он незапуститься, а пути в реестре уже не найдет |
O L E G, для одного, конкретного, вируса практически всегда можно подобрать набор определённых действий, ведущих к искомой цели.
|
вопрос, но не по этой теме, скрипт запускается как скрин сейвер через определеноое время,он закрывает Explorer и заново его открывает. Проблема в чем! невозможно закрыть Explorer во 2 раз,так как он находиться в под процессе как его можно закрыть
До wscript.exe, есть еще один процессе но я его не добавил в скрин |
O L E G, как Вы запускаете «explorer.exe»?
|
Код:
wsh.run "Explorer.exe" или wsh.run "Explorer.exe", 0 ,True Код:
wsh.run "Taskkill /IM Explorer.exe /F", 0 ,True |
O L E G, вот Вам пример для Блокнота:
Пытаемся запустить Блокнот, в случае успеха ждём три секунды, пытаемся закрыть тот экземпляр Блокнота, который запустили. В случае же Проводника не всё так однозначно. Во-первых, процесс Проводника может существовать как в единственном экземпляре, так и в двух — когда настройками указано разделять процессы Проводника «Рабочего стола» и папок (вторичные входы здесь не рассматриваем). Во-вторых, если просто попытаться завершить процесс «Рабочего стола» Проводника — «Программа входа в систему Windows NT» (winlogon.exe) его попросту перезапустит (справедливо, по крайней мере для WIndows XP). Отменить подобное поведение можно, указав ненулевое значение «Reason» при вызове метода «.Terminate(Reason)». К тому же, я совсем не понял, зачем снимать процесс, запускать процесс и снова снимать его. Ну, и, утверждение: Цитата:
|
к примеру у тебя стоит блокировка win + L, если снять процесс explorer и запустить его заново он будет по верх этой блокировки,что нам даст полное дествие над ПК
|
Цитата:
|
я пробовал! работает)) 100% поэтому я и задался этим вопросом
|
Значит, это не есть:
Цитата:
|
Iska, а вот с этим скриптом что ты мне дал на примере Блокнотапо верх Блокировки не вылазиет, пытался изменить но выдает ошибку
Код:
--------------------------- оставлял только закрытие процесса. Код:
Option Explicit а открывал по своему Код:
wsh.run "Explorer.exe" |
Вы убрали код для запуска процесса и получения его идентификатора, а затем пытаетесь применить неинициализированную PID'ом (стало быть — нулевую) переменную «lngProcessID» для получения экземпляра процесса с последующим его закрытием.
Не удивительно, что это не работает, ибо в терминах Wbem процесс с нулевым PID'ом — это «System Idle Process» — «ожидание» системы. |
Код:
Option Explicit |
|
Подскажите, как поправить код, чтобы вывести процессы в 3 столбика и убрать их повторы?
Код:
@echo off |
sov44, зачем убирать повторы? Это ведь разные процессы.
|
Цитата:
|
Тогда так:
Код:
Option Explicit |
Iska, благодарю, но интересует реализация скрипта в bat.
VBS для меня пока ещё "лес дремучий" ;) п.с. сорри, что запостил не в той теме. |
|
Вроде сделал, но пока не получается выстроить ровность столбцов. Нужна подсказка.
Код:
@echo off |
Дополнение справа пробелами Вы уже сделали. Просто обрезайте заданное количество символов, например:
Код:
@echo off |
sov44, вот реализация на bat, столбцы ровные, с нумерацией, добавлен ведущий ноль, дубли процессов убраны. Слишком длинные имена обрезаются с добавлением троеточия, но когда скрипт запрашивает подтверждение на убийство процесса, его имя выводится полностью.
Сортировка выполнена через жопу, так пришлось сделать потому, что не хотелось отлавливать system и system idle из прошедшего вначале через sort списка. Код:
@Echo Off UPD: Сделал автовыравнивание не на табах, как у меня было, а воспользовался советом Iska и дополнил пробелами. |
Время: 19:27. |
Время: 19:27.
© OSzone.net 2001-