Jump to content
regist

Удаление ключей реестра при удаление задачи

Recommended Posts

AVZ до сих пор (перепроверил на AVZ версии 5.05 private build [13.09.2018  9:17:58] ) не дочищает в реестре хвосты от заданий при их удаление. В результате порой задания (в частности на win 10) после удаления стандартной командой AVZ не отображаются в логе, но при этом продолжают отрабатывать. А хвосты от заданий приходится дочищать другими утилитами (либо изначально при удаление задания приходится использовать "костыли").

Share this post


Link to post

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

Share this post


Link to post

И тогда не надо будет указывать полный путь к файлу задания для удаления, а только относительно базового каталага заданий? Мне кажется хороший вариант.

Share this post


Link to post

Версия обновлена, текущая 5.07.

В ней:

1.  В отчете, в разделе с заданиями планировщика, добавлен интерактивный элемент под именем задания - "Удалить задание планировщика". При его нажатии в скрипт вставляется команд удаления задания

2. В скрипт-язык добавлена новая процедура, DeleteSchedulerTask. Она удаляет задание планировщика, после чего вычищает связанные с ним ветки реестра (важно - запускаемые заданием исполняемые файлы она не трогает, речь идет только о задании). У процедуры два аргумента - первый обязателен и содержит имя задания:

begin
 DeleteSchedulerTask('Некое зловредное задание');
end.

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

0 - значение по умолчанию, чистит реестр только в случае, если задание с указанным именем найдено и успешно удалено.
1 - независимо от результата поиска и удаления задания чистит x32 ветку реестра с настройками планировщика (поиск следов в реестре ведется по имени задания)
2 - независимо от результата поиска и удаления задания чистит x64 ветку реестра с настройками планировщика (поиск следов в реестре ведется по имени задания)
3 - чистка x32 и x64 ветки

Пример:

begin
 DeleteSchedulerTask('Некое зловредное задание', 3);
end.

 

Share this post


Link to post

Проверил чистку хвостов в реестре от вчера удалённого задания, таким скриптом.

begin
 DeleteSchedulerTask('Test2', 3);
end.

Итог:

Удалило ключ:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Test2]
"Id"="{83B7C672-6D79-469B-9FB2-52563FBFCFB8}"
"Index"=dword:00000003

Но не дочистило ключи

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Plain\{83B7C672-6D79-469B-9FB2-52563FBFCFB8}
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{83B7C672-6D79-469B-9FB2-52563FBFCFB8}

 

Edited by regist

Share this post


Link to post

Это глюк. Сборка обновлена, актуальная сборка 5.08, в ней алгоритм максимально широкий:
1. Удаляет задание, если оно есть
2. Удаляет ключ задания в TaskCache\Tree, предварительно извлекая из него ID задания
3. Чистит по ID ветки Tasks\, Plain\, Logon\ и Boot\
4. На случай, если ключ в Tree\ был удален и ID через него не определить, сканирует Tasks\ и  по параметру Path пытается найти следы задания. Если находит - то удаляет, и зачищает по ID следы по аналогии с п.п. 3

Share this post


Link to post

Протестировал удаление заданий.

1) Удаление XML задания на windows 7 - вроде всё удаляет и чистит нормально.

2) Удаление .job задания на XP. Там в html логе по прежнему генерируется команда

 DeleteFile('C:\WINDOWS\Tasks\Test.job','');

Это так и задумано? Разве не лучше удалять все задания одной командой, а не думать, когда какую надо использовать (порой скрипт составляется вручную, а не по HTML логу от AVZ).

На всякий случай протестировал DeleteSchedulerTask('Test.job');  - не отработала (но наверно и не должна была).

3) Ещё интересно было бы проверить удаление .job на системах выше Vista, но меня нет таких заданий (и не знаю как их там создать), чтобы проверить.

Share this post


Link to post

Кстати, для заданий .job полное их удаление заключается не только в удалении файла задания, но и зачистке:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\CompatibilityAdapter\Signatures, <Job name>

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\CompatibilityAdapter\Signatures, <Job name>.fp

 

Share this post


Link to post

Задание для тестов на Vista+ создать просто, в командной строке нужно выполнить:

at 12:00 "test_at_task.exe"

Я обновил сборку, версия 5.09, в ней:

1. унифицировано удаление заданий, задания старого типа (AT*) и нового чистятся новой функцией DeleteSchedulerTask
2. добавлена чистка HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\CompatibilityAdapter\Signatures

Share this post


Link to post

Отлично, надо будет потестировать в темах лечения.

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

Edited by regist

Share this post


Link to post

Zaitsev Oleg , в связи с тем что изменился способ удаления задания и теперь для удаления задания больше не не нужно указывать полный путь, а нужен относительный. То если можно просьба вернуть/изменить поведение введённое в одной из тестовых версий AVZ 5.xx

А конкретней, в XML логе в параметре SHPath (SchHeduller Path) выводить путь относительно папки планировщика, а не относительно корня диска.

Share this post


Link to post
В 14.09.2018 в 09:51, Zaitsev Oleg сказал:

добавлена новая процедура, DeleteSchedulerTask.

Будет ли она добавлена в справку? Как понимаю, это пока недокументированная возможность AVZ?
Она пригодилась бы при решения ситуаций описанных в этой теме или  в этом топике. https://forum.kasperskyclub.ru/index.php?showtopic=61437

Share this post


Link to post
В 25.12.2018 в 15:17, ANGElDRAGON сказал:

Будет ли она добавлена в справку? Как понимаю, это пока недокументированная возможность AVZ?
Она пригодилась бы при решения ситуаций описанных в этой теме или  в этом топике. https://forum.kasperskyclub.ru/index.php?showtopic=61437

Будет конечно - вот справка по этой функции: https://z-oleg.com/secur/avz_doc/index.html?script_deleteschedulertask.htm

Share this post


Link to post
7 минут назад, Zaitsev Oleg сказал:

вот справка по этой функции: https://z-oleg.com/secur/avz_doc/index.html?script_deleteschedulertask.htm

Цитата

0 (1) - выполнить принудительную чистку x32 ветки реестра с настройками планировщика заданий, поиск и чистка ведется по названию задания из ATaskName.

 1 (2) - выполнить принудительную чистку x64 ветки реестра с настройками планировщика заданий, поиск и чистка ведется по названию задания из ATaskName.

 

Как несложно заметить, значение AForceRegMode=3 приведет к максимальной принудительной чистке реестра.

В справке в явном виде не указано, что AForceRegMode=3 будет чистить в обоих ветках - это надо догадываться, либо искать эту тему и читать тут

В 14.09.2018 в 06:51, Zaitsev Oleg сказал:

3 - чистка x32 и x64 ветки

 

Share this post


Link to post
4 часа назад, regist сказал:

В справке в явном виде не указано, что AForceRegMode=3 будет чистить в обоих ветках - это надо догадываться, либо искать эту тему и читать тут 

 

А как-же:

Цитата

Как несложно заметить, значение AForceRegMode=3 приведет к максимальной принудительной чистке реестра.

?

Share this post


Link to post

Zaitsev Oleg можно сделать так, чтобы в разделе задачами в отчетах "avz_sysinfo.htm" и т.п. (стандартные скрипты 2,7,9) при нажатие на "Удалить" в пункте Имя задания вставлялся " DeleteSchedulerTask('Некое зловредное задание', 3);" ?

Share this post


Link to post
2 часа назад, Zaitsev Oleg сказал:

А как-же: 

Это надо сначала додумать (догадаться), а что произойдёт при указание флага 3. Либо тогда уже правильней будет писать, "несложно догадаться, значение AForceRegMode=3 приведет ...". Повторюсь в явном виде, что 3 чистит в обоих ветках нет.

 

1 час назад, ANGElDRAGON сказал:

при нажатие на "Удалить" в пункте Имя задания вставлялся " DeleteSchedulerTask('Некое зловредное задание', 3);" ?

чтобы заниматься вредительством? Как сейчас сделано с точки зрения чистки самый оптимальный (и безопасный) вариант. В реестре будет чистка задания только той разрядности, которое в данном скрипте удаляется.

 

Share this post


Link to post
16 часов назад, regist сказал:

чтобы заниматься вредительством? Как сейчас сделано с точки зрения чистки самый оптимальный (и безопасный) вариант. В реестре будет чистка задания только той разрядности, которое в данном скрипте удаляется.

Согласен, с вредительством нужно бороться. Я упростил инструкцию и сделал ее более подробной - см. https://z-oleg.com/secur/avz_doc/index.html?script_deleteschedulertask.htm

Так пойдет ?

Share this post


Link to post
36 минут назад, Zaitsev Oleg сказал:

Я упростил инструкцию и сделал ее более подробной - см. https://z-oleg.com/secur/avz_doc/index.html?script_deleteschedulertask.htm

Так пойдет ?

Да, теперь всё хорошо и подробно описано.

Только я всё равно немного попридираюсь к формулировкам.

Цитата

выполнить принудительную чистку xNN ветки реестра с настройками планировщика заданий.

Исходя из такой формулировки как бы получается, что чистится средствами планировщика заданий (а как ещё понять с его настройками?). А на самом деле это не так и чистка отработает даже если планировщик заданий не работает.

Вместо этого предлагаю формулировке написать, что-то вроде: чистку xNN ветки(ок) реестра хранящие (содержащие) задания планировщика.

и чтобы не затерялось напомню ещё про просьбу из поста немного выше.

 

Edited by regist

Share this post


Link to post

×
×
  • Create New...

Important Information

We use cookies to make your experience of our websites better. By using and further navigating this website you accept this. Detailed information about the use of cookies on this website is available by clicking on more information.