Jump to content
AndreyKondaurov

SetupAVZ не работает при вызове из вложенного скрипта

Recommended Posts

В справке AVZ написано:

Вызываемые с помощью ExecuteScript скрипты используют общую папку карантина и могут менять единые настройки AVZ

Но на самом деле это не работает. Например, запускаем скрипт отключающий эвристику:

begin
    SetupAVZ('EvLevel=0');
end.

И видим как в интерфейсе эвристика отключается. Но если сохранить этот скрипт в файл и запустить через команду ExecuteScript, то настройка не меняется.

Share this post


Link to post
И видим как в интерфейсе эвристика отключается. Но если сохранить этот скрипт в файл и запустить через команду ExecuteScript, то настройка не меняется.

Так оно и должно быть в общем-то ... Скрипт, запускаемый из скрипта, может менять что-то как максимум в собственном контексте. Настройки AVZ может менять основной скрипт ( запущенный из окна выполнения скрипта) или скрипт, запускаемый через командную строку параметром script=xxx. Но есть и исключения, самое характерное:

- протокол

- карантин

- операции работы с файлами

- операции работы с реестром

- операции с INI файлами

Т.е. эти команды работают независимо от того, как запущен скрипт (карантин и протокол понятное дело общий для всех запускаемых скриптов).

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

Share this post


Link to post
Так оно и должно быть в общем-то ... Скрипт, запускаемый из скрипта, может менять что-то как максимум в собственном контексте.

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

Например, если на 64 битной системе запускать скрипт:

begin
    AddToLog('This test show ProductId');
    if IsWOW64 then
    begin
      SetupAVZ('X64R=NN');
      AddToLog(RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows NT\CurrentVersion','ProductId'));
      SetupAVZ('X64R=YY');
    end;
end.

То при запуске через интерфейс получим значение ProductId, а через команду ExecuteScript пустую строку.

В общем, интересует именно параметр X64R.

 

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

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

Share this post


Link to post
Пожелание такое: скрипты должны работать по возможности одинаково не зависимо от способа запуска. Те настройки, что возможно изменять, должны изменятся на время работы вложенного скрипта. То, что изменить не возможно, должно быть описано в справке к функции ExecuteScript.

Присоединяюсь.

Share this post


Link to post
Пожелание такое: скрипты должны работать по возможности одинаково не зависимо от способа запуска. Те настройки, что возможно изменять, должны изменятся на время работы вложенного скрипта. То, что изменить не возможно, должно быть описано в справке к функции ExecuteScript.

В принципе пожелание логично. Внес изменения - теперь скрипт любого уровня вложенности получил возможность менять любую настройку. avz.exe и avz_mini.exe обновлены, можно пробовать.

Share this post


Link to post
В общем, интересует именно параметр X64R.

Я планирую изменить ряд функций, например

вместо DeleteFile('c:\windows\system32\troyan.exe'); будет DeleteFile('c:\windows\system32\troyan.exe', 'x64');

Т.е. явное указание, в каком режиме редиректора мы должны выполнять данную функцию

Share this post


Link to post

Это будет обязательный параметр, или для сохранения совместимости будет работать и старый вариант, т. е. DeleteFile('c:\windows\system32\troyan.exe'); ?

Share this post


Link to post
Это будет обязательный параметр, или для сохранения совместимости будет работать и старый вариант, т. е. DeleteFile('c:\windows\system32\troyan.exe'); ?

Совместимость конечно будет, как же без нее. Просто я рассуждал так:

1. DeleteFile('c:\windows\system32\troyan.exe'); - работает как сейчас, т.е. x32 по дефолту, или что указано через SetupAVZ

2. DeleteFile('c:\windows\system32\troyan.exe', 'x32'); - явное переключение редиректора на X32 каталог, на x32 системе исполняем как п.п. 1

3. DeleteFile('c:\windows\system32\troyan.exe', 'x64'); - явное переключение редиректора на X64 каталог (т.е. выключение редиректа), , на x32 системе исполняем как п.п. 1

4. DeleteFile('c:\windows\system32\troyan.exe', 'x32, x64'); - п.п. 1 на x32 системе, п.п. 2+3 - на x64

 

Годится ?

Share this post


Link to post
Я планирую изменить ряд функций, например

вместо DeleteFile('c:\windows\system32\troyan.exe'); будет DeleteFile('c:\windows\system32\troyan.exe', 'x64');

Т.е. явное указание, в каком режиме редиректора мы должны выполнять данную функцию

Было бы не плохо. Так будет код скриптов короче и нагляднее, чем с вызовом SetupAVZ. Разве что, x86 или IA32 вместо x32, вроде так принято писать?

Share this post


Link to post
Было бы не плохо. Так будет код скриптов короче и нагляднее, чем с вызовом SetupAVZ. Разве что, x86 или IA32 вместо x32, вроде так принято писать?

Под x32 я имел в виду разрядность системы, x - просто префикс. Можно проще сделать - DeleteFile('c:\windows\system32\troyan.exe', '32,64'); - указывая разрядность

А сделать я это хочу именно для сокращения размера скриптов и проблем с их авто генерацией по HTML логу

Share this post


Link to post

Олег, может, полиморф с расширением DeleteFile выпустить? Проще будет понять, хорошо ли оно, попробовав.

Надеюсь, ошибка с заданиями в нём будет пофикшена, а ещё было бы неплохо, если бы в скрипт команда удаления задания вставлялась сразу с учётом разрядности системы:

DeleteFile('C:\Windows\Tasks\Test', '32');

или

DeleteFile('C:\Windows\Tasks\Test', '64');

Edited by Vadim Vygovsky

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.