Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Завершение процесса по пути

290
08 июня 2012 года
Patr1ot
458 / / 09.02.2008
Добрый день!
Столкнулся с проблемой, в процессах два одноименных процесса один из них нужно убить не убивая второй, PID у этих процессов на разных ПК соответственно разный а путь один и тот же. Подскажите методы если кто знает.
Спасибо.
465
08 июня 2012 года
QWERYTY
595 / / 25.03.2012
Вы не разу не упомянули после завершения этого процесса он запускается вновь или нет.

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


Код:
На си такого не делал

procedure TForm1.Button1Click(Sender: TObject);
var
ProcessEntry: ProcessEntry32;
NextProcess: BOOL;
SnapProcess: CARDINAL;
Path: WIDECHAR;
begin
  SnapProcess := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  ProcessEntry.dwSize := SizeOf(ProcessEntry);
  NextProcess := Process32First(SnapProcess, ProcessEntry);
  while NextProcess do
  begin
    if ProcessEntry.szExeFile = 'lsass.exe' then
    begin
       HProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, ProcessEntry.th32ProcessID);
       GetModuleFileNameEx(HProcess,  0, @Path,  укажите размер чтоб принять всю строку);
       if Path = 'ВАШ ПУТЬ К ЗЛОВРЕДНОМУ ВИРУСУ'  then  TerminateProcess(HProcess, тут почитайте нужно чё или 0 сойдёт);
       CloseHandle(HProcess);
    end;  
    NextProcess := Process32Next(SnapProcess, ProcessEntry);
    end;
  CloseHandle(SnapProcess);
 
end;
Если это нужно раз в сутки или реже то много времени от вашей жизни не отнимет, даже если это не оптимальный путь.
Сравнивать размеры не обязательно, он и так идентифицируется достаточно точно в вашей ситуации.
У себя проверил, lsass.exe пока слава богу один :)

Финальная версия, пытался оптимизмровать, и загнался. Вызывал GetModuleFileNameEx до того как получен HProcess
414
08 июня 2012 года
CassandraDied
763 / / 24.05.2012
Можно попробовать через снэпшоты получить список всех процессов и найти в нём несколько одинаковых, взять их id и тогда можно уничтожить.
Но как ты отличишь один процесс от другого, даже зная id?
290
08 июня 2012 года
Patr1ot
458 / / 09.02.2008
Вот этот момент я и не могу решить...
290
08 июня 2012 года
Patr1ot
458 / / 09.02.2008
вообще очень удобно было бы выяснить подобный метод, вирусы очень часто используют имя процесс схожего с системным, единственное отличие это путь к exeшнику
414
08 июня 2012 года
CassandraDied
763 / / 24.05.2012
Зачем вообще процесс убивать?
290
08 июня 2012 года
Patr1ot
458 / / 09.02.2008
Вот у меня щас в конторе появился вирус, запускает процесс lsass.exe, убивая все процессы lsass.exe комп вырубается...
414
08 июня 2012 года
CassandraDied
763 / / 24.05.2012
Ключи запуска. Ну и ещё по родительскому ID, если удастся узнать ID вируса.
Почему бы просто не удалить вирус из системы?
290
08 июня 2012 года
Patr1ot
458 / / 09.02.2008
блин у нас более 1000 ПК... с ограниченными правами... разбросаны они по 40 городам, далеко не везде могу сделать это руками, если я спросил возможность сделать это программно значит мне нужно решение сделать это программно... ясно понятно что руками все это убирается. этот то вирус мы победили вообще нужно это на будущее... хочу создать службу которая при определенной команде подгружает dll, в которой собственно и будет описание по удалению этой бойды.... в зависимости от задачи dll можно будет заменять...
1
08 июня 2012 года
kot_
7.3K / / 20.01.2000
Цитата: CassandraDied
Можно попробовать через снэпшоты получить список всех процессов и найти в нём несколько одинаковых, взять их id и тогда можно уничтожить.
Но как ты отличишь один процесс от другого, даже зная id?


ну так они же отличаются путем к exe-файлу? я честно говоря возможно не совсем понял в чем проблема?
Хотя ТС отличается упорством в поиске веревок достаточной длинны, что бы можно было выстрелить себе в голову. Почему просто не удалить вирус действительно?

414
08 июня 2012 года
CassandraDied
763 / / 24.05.2012
Так сразу и нужно было писать суть задачи. Если говоришь, что есть ограничение прав, то не все методы подойдут. Получить снэпшот и подключиться к процессу, например, без отладочных привелегий может и не получиться.
7
08 июня 2012 года
@pixo $oft
3.4K / / 20.09.2006
[quote=Patr1ot]PID у этих процессов на разных ПК соответственно разный а путь один и тот же[/quote]Если один и тот же путь(как проверял,кстати),то тут идентификация не столь проста.Надо определять по командной строке,загруженым модулям и прочим параметрам
Расписывай подробнее—ты ведь как-то определяешь,какой из процессов надо прибить.Может,я даже что-нибудь напишу для автоматизации

P.S.Это ж надо умудриться—заразить 40 распределённых групп машин одной и той же фигнёй…
277
08 июня 2012 года
arrjj
1.7K / / 26.01.2011
cmd методы тыц

c++ методы тыц тыц и дальше по ссылкам
290
08 июня 2012 года
Patr1ot
458 / / 09.02.2008
Админские права у меня есть(можно запустить под с правами админа), просто у юзеров они ограничены. отличается процесс по описанию, то есть у нормального lsass в описание написано Local Security. А у вируса написано lsass,)) ну и собственно разные пути, системный lsass хранится в system32, а вирус в С:\OptionalComponents,
277
08 июня 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: arrjj
cmd методы тыц

c++ методы тыц тыц и дальше по ссылкам

465
08 июня 2012 года
QWERYTY
595 / / 25.03.2012
Цитата: Patr1ot
Админские права у меня есть(можно запустить под с правами админа), просто у юзеров они ограничены. отличается процесс по описанию, то есть у нормального lsass в описание написано Local Security. А у вируса написано lsass,)) ну и собственно разные пути, системный lsass хранится в system32, а вирус в С:\OptionalComponents,



Ну если вы настаиваете, тогда перечислите все процессы. Я использовал для этих целей тулхелр32, и код выкладывать не буду, т.к. вам это легче будет сделать через пс апи.
А потом в цикле проверить пути функцией GetModuleFileNameEx. Совпал путь с вашим, вызываем TerminateProcess.

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

414
08 июня 2012 года
CassandraDied
763 / / 24.05.2012
Искать нужный процесс через снэпшоты - действительно тормознуто и не круто вообще. Стоит посмотреть, как это делает стандартный диспетер задач. Он там такие штуковины вытворяет, с недокументированными функциями - просто закачаешься, что быстрее и более функциональнее. К некоторым процессам мне не удавалось достуччаться даже с отладочными привелегиями, ко всяким там локал сервисам. Ну это так, оффтопик почти.
Вот, создать бы сигнатурку доверенных файлов, хэш там какой, а потом, при старте системы, проверять некоторые пути по базе хэшей, смотреть совпадение имён файлов и проверять хэш, вот. И, если хэши не совпали, то помечать подозрительный файл для удаления после перезагрузки и предлагать юзеру сохранить все изменения, а потом ребутнуть машину, ну или какие другие продвинутые способы удаления файлов использовать.
465
08 июня 2012 года
QWERYTY
595 / / 25.03.2012
Цитата: arrjj
[quote=QWERYTY;81087]
Вам бы лучше не с путями разбираться, а как там автостарт организован.


А толку? Большинство вирусни мониторят свои методы загрузки и восстанавливают их при малейшем чихе.

Цитата: QWERYTY

А вообще лучше попытаться удалить.


КЭП епт! Чтоб удалить нужно прибить процесс сначала.[/quote]

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

А удалить я имею в виду не только ехе который связан с процёссом, а всё что связанно с вирусом. Антивырусом каким

465
08 июня 2012 года
QWERYTY
595 / / 25.03.2012
Кто поставил минус, прокоментируйте.

Особенно интересно увидеть коментарий автора вопроса, если это он.
Ответ не является ответом на этот вопрос?
290
08 июня 2012 года
Patr1ot
458 / / 09.02.2008
Цитата: QWERYTY
Кто поставил минус, прокоментируйте.

Особенно интересно увидеть коментарий автора вопроса, если это он.
Ответ не является ответом на этот вопрос?

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

290
08 июня 2012 года
Patr1ot
458 / / 09.02.2008
да забыл.. после перезагрузки запускается вновь если не удалить все файлы вируса, успели отследить загрузчика, им оказалась другая программа находящаяся в другой директории, мне было не понятно, как вирус смог создать скрытые системные папки в каталоге С:\ с правами обычных доменных пользователей у которых доступа туда даже для чтения нет.... А за код спасибо очень полезная вещь, как раз то что нужно...
465
08 июня 2012 года
QWERYTY
595 / / 25.03.2012
Я спрашивал запускается ли он после завершения, а не запускается ли он после перезагрузки. Из вашего сообщения можно сделать вывод что не запускается, но это домыслы, а не достоверная информация.

Кто плюс поставил? Разбираться будем :)
465
08 июня 2012 года
QWERYTY
595 / / 25.03.2012
Насчёт минуса я так и не понял. Может быть путь решения проблемы и кривой, но в контексте вопроса ответ не считаю чем то из ряда вон.

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


В той части кода где открывается процесс когда будете переделывать на си организуйте проверку, действительно ли хендл его получен.
Возможно этого будет достаточно в вашей ситуации, напишите потом получилось чё или нет.
290
08 июня 2012 года
Patr1ot
458 / / 09.02.2008
))) про плюс думаю придется провести проверку... а вот на счет проверки действиельно лучше ее сделать, поскольку как всегда у пользователей открыта пачка фалов которые они в течение всего дня редактируют и сохраняют только когда уходя домой выключают комп, а если грохнуть не тот процесс а системный, то комп без сохранения чего либо в ребут уходи))).... ох и проблем будет если что...
465
08 июня 2012 года
QWERYTY
595 / / 25.03.2012
Цитата: Patr1ot
..., мне было не понятно, как вирус смог создать скрытые системные папки в каталоге С:\ с правами обычных доменных пользователей у которых доступа туда даже для чтения нет....



Но факт остаётся фактом. Например вот такие чудеса можно найти в интернете:

Код:
function EnableDebugPrivilege():BOOL;
var
HToken, ReturnLength: CARDINAL;
SeDebugNameValue: Int64;
TkP: TOKEN_PRIVILEGES;
begin
  Result := FALSE;
   //Получаем токен нашего процесса
  OpenProcessToken(INVALID_HANDLE_VALUE, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, HToken);
   //Получаем LUID привилегии
  if not LookupPrivilegeValue(NIL,'SeDebugPrivilege', SeDebugNameValue) then
  begin
    CloseHandle(HToken);
    Exit;
  end;
  TkP.PrivilegeCount := 1;
  TkP.Privileges[0].Luid := SeDebugNameValue;
  TkP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   //Добавляем привилегию к процессу
  AdjustTokenPrivileges(HToken, FALSE, TkP, SizeOf(TOKEN_PRIVILEGES), TkP, ReturnLength);
  if GetLastError() <> ERROR_SUCCESS then Exit;
  Result := TRUE;
end;
Может есть ещё какая нибудь подготовка для OpenProcessToken, а дальше тушите свет.

Я уверен в арсенале вирусописателей много всяких интересных фенек.
Так что ничему не удивляйтесь.
465
08 июня 2012 года
QWERYTY
595 / / 25.03.2012
Цитата: Patr1ot
))) про плюс думаю придется провести проверку... а вот на счет проверки действиельно лучше ее сделать, поскольку как всегда у пользователей открыта пачка фалов которые они в течение всего дня редактируют и сохраняют только когда уходя домой выключают комп, а если грохнуть не тот процесс а системный, то комп без сохранения чего либо в ребут уходи))).... ох и проблем будет если что...



Проблем не будет, процесс будeт убит если путь который вы укажите совпадёт.
Я имел в виду прописать что если HProcess <> 0 тогда дальше выполняем.
Если 0, то процесс соответственно не убъётся и нужно чтото посерьёзней придумать.

7
09 июня 2012 года
@pixo $oft
3.4K / / 20.09.2006
Я не понял.Сначала ТС пишет,что «путь один и тот же»,а потом—что разные пути.Ну и как это понимать?

И да,в Windows линейки NT есть одна такая замечательная особенность—запущенный файл можно просто взять и переместить/переименовать(с некоторыми ограничениями,но всё же).Так от немалого числа вирусни и избавляются
252
09 июня 2012 года
koderAlex
1.4K / / 07.09.2005
глупо пытаться убить процесс . обычно такие вирусы создают несколько процессов , которые контролируют друг друга .
так что это будет бесконечным перетягиванием каната .
290
09 июня 2012 года
Patr1ot
458 / / 09.02.2008
Ребят путь один и тот же, этот тип вируса мы с коллегами разобрали, просто у него есть запускная программа, я же не антивирус делаю а устранение только этого вируса, так как мы разобрали его работу, нужно было оперативно его устранить со всех машин где он есть, и там где нет для профилактики. Вот и все... это не глобальный метод избавления от вирусни..... для моей задачи код подходит, остальное я сделаю под свои задачи не понятен был только этот момент... потому и создан вопрос...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог