Jump to content
Sign in to follow this  
Nikkollo

ExecuteRepair(1) не справился

Recommended Posts

Олег, приветствую.

 

ExecuteRepair(1) не справился при нарушении ассоциации exe. (и ExecuteWizard('TSW',2,2,true) тоже).

Вероятно из-за прав на соответствующие ветки реестра.

Тема на VI: http://virusinfo.info/showthread.php?t=124406

Share this post


Link to post
Олег, приветствую.

 

ExecuteRepair(1) не справился при нарушении ассоциации exe. (и ExecuteWizard('TSW',2,2,true) тоже).

Вероятно из-за прав на соответствующие ветки реестра.

Тема на VI: http://virusinfo.info/showthread.php?t=124406

Мне известно уже 3 таких случая, причем во всех из них совершенно непонятно, что происходит. На чистой системе не воспроизводится. Есть подозрение, что это конфликт в каким-то защитным ПО или проделки какой-то малвари. Рассматривался вариант нехватки привилегий - но в визарде TSW есть команды сброса привилегий на состояние "всем можно все" на исправляемые ключи реестра. Рассматривался вариант, что это следствие работы визарда AVZ - тесты это не подтверидили, да и в в скриптах восстановления визарда нет операций удаления - он просто пишет эталонные значения повех существующих, если что-то не запишет - не страшно. Еще одна гипотеза - совместная работа AVZGuard и некоей утилиты, которые пересоздает ключи реестра (стирает и создает заново - Guard даст стереть, но не даст создать), хотя это также крайне маловероятно.

Судя по логу в CleanAutoRun.1.2.0.0_07.09.2012_23.02.46_log.txt из темы видно, что ключи реестра на проблемном ПК или убиты, или к ним нет доступа. Утилита не смогра починить ключи реестра, также как и визард AVZ - что наводит на определенный размышления о том, что что-то активно мешает этому процессу.

Рекомендации:

1. необходимо на проблемном ПК любым методом забекапить ключи реестра для изучения, лучше всего через и через AVZ (меню "Файл\Резервное копирование", там отметить и выполнить операцию номер 2 - в итоге в папке Backup будет создан файл User_RunFiles.reg), и из редактора реестра (чтобы потом сравнить их). Это даст понимание того, что находится в данном ключе реестра.

2. крайне желательно выяснить, какие права доступа установлены на ключи реестра HKEY_CLASSES_ROOT\.exe и HKEY_CLASSES_ROOT\exefile

Share this post


Link to post

Угу, спасибо. Постараюсь выполнить рекомендации при похожих случаях.

 

2. крайне желательно выяснить, какие права доступа установлены на ключи реестра HKEY_CLASSES_ROOT\.exe и HKEY_CLASSES_ROOT\exefile

Кстати, в скрипт-языке не хватает функции типа GetRegKeySecurity (или что-то подобное) для выяснения прав.

Но пока можно будет попросить пользователя посмотреть в редакторе реестра (если конечно его удастся запустить).

Share this post


Link to post
Угу, спасибо. Постараюсь выполнить рекомендации при похожих случаях.

Кстати, в скрипт-языке не хватает функции типа GetRegKeySecurity (или что-то подобное) для выяснения прав.

Но пока можно будет попросить пользователя посмотреть в редакторе реестра (если конечно его удастся запустить).

Да, что-то типа GetRegKeySecurity необходимо (точнее нужна функция, позволяющая понять, есть ли у скрипта привилегии на запись в данный ключ или нет). Подумаю над этим, плюс в визарде AVZ тесты показали, что при определенных условиях работа скрипта может прерваться в случае нехватки прав (он выводит сообщение об оошибке и далее не работает - т.е. быть может он бы и починил проблему, если бы продолжил работу). Это я уже пофиксил, работа скрипта не будет прерываться в такой ситуации, плюс я думаю в отладочный лог выводить такие ошибки - чтобы при лечении можно было предметно понять, при записи каких ключей возникли проблемы

Share this post


Link to post

Черновое решение есть:

function CheckKey(ARoot, AKey : string) : integer;
begin
Result := 0;
if RegKeyExistsEx(ARoot, AKey) then 
  Result := 1;
if (Result = 1) then
  if not(RegKeyExists(ARoot, AKey)) then 
   Result := 2;
end;

procedure CheckKeyLog(ARoot, AKey : string);
begin
AddToLog(ARoot+'\'+AKey+' = ' + inttostr(CheckKey(ARoot, AKey)))
end;

begin
CheckKeyLog('HKCR', '.exe');
CheckKeyLog('HKCR', 'exefile');
CheckKeyLog('HKCU', '_Test_not_exists');
CheckKeyLog('HKCU', '_Test');
end.

В данном примере функция CheckKey возвращает:

0 - ключа нет

1 - ключ есть и доступен (по крайней мере на чтение)

2 - ключ есть, но недоступен, так как на него нет прав

 

Пример работы:

HKCR\.exe = 1
HKCR\exefile = 1
HKCU\_Test_not_exists = 0
HKCU\_Test = 2

Share this post


Link to post
Sign in to follow this  

×
×
  • 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.