# Как вернуть права на ветки реестра (обсуждение)



## Vadim Sterkin (14 Окт 2009)

*Drongo*, наверное, нужно пояснить, на какие конкретно разделы реестра даются права и кому. Заголовок темы слишком общий.

Информация
Выделено из темы "Обсуждения, изменения, дополнения в разделе FAQ"


----------



## Drongo (15 Окт 2009)

*Vadim Sterkin*, Спасибо. Дополнил.


----------



## Ingener (15 Окт 2009)

http://safezone.cc/forum/showthread.php?t=2437

Зачем скачивать и юзать дополнительные утилиты - если данные действия можно произвести в AVZ при помощи функции RegKeyResetSecurity:


> function RegKeyResetSecurity(ARoot, AName : string) : boolean;
> Удаляет все привилегии ключа реестра AName, делая его доступным для всех пользователей. Данная функция полезна для удаления ключей реестра, созданных вредоносными программами - нередко после создания ключа зловред меняет привилегии доступа к нему, блокируя все операции, кроме чтения.
> Совместимость: AVZ 4.32 и выше
> Пример:
> ...


----------



## Вархаммер (15 Окт 2009)

Ingener написал(а):


> function RegKeyResetSecurity(ARoot, AName : string) : boolean;
> Удаляет все привилегии ключа реестра AName, делая его доступным для всех пользователей. Данная функция полезна для удаления ключей реестра, созданных вредоносными программами - нередко после создания ключа зловред меняет привилегии доступа к нему, блокируя все операции, кроме чтения.


Извиняюсь, а можно вопрос? А если я просто в "Редакторе реестра" шелкну "Разрещения" и добавлю себе права, разве не сработает?


----------



## ТроПа (15 Окт 2009)

Вархаммер написал(а):


> Извиняюсь, а можно вопрос? А если я просто в "Редакторе реестра" шелкну "Разрещения" и добавлю себе права, разве не сработает?


Скорее всего сможете, в большинстве случаев, но эта рекомендация на тот случай, когда не получится.


Ingener написал(а):


> Зачем скачивать и юзать дополнительные утилиты - если данные действия можно произвести в AVZ при помощи функции RegKeyResetSecurity:


Во-первых, посмотрите дату создания темы и выпуска АВЗ версии 4.32 и тогда кое-что поймёте, во-вторых относительно Windows, вторична АВЗ, а приведенная утилита разработана специалистами МС. Притом блокируется доступ для того что бы поправить внесённые изменения, например такие как замена systemroot на fystemroot, тут удаление ключа не поможет.


----------



## Ingener (15 Окт 2009)

Вархаммер написал(а):


> Извиняюсь, а можно вопрос? А если я просто в "Редакторе реестра" шелкну "Разрещения" и добавлю себе права, разве не сработает?



Здесь может быть много нюансов:
1) Зловред может отключить редактор реестра.
2) Я не пробывал вручную менять права доступа у ключей созданных зловредами - поятому точно ничего утверждать не могу (получится или нет)...
3) Идёт речь о лечение компьютеров с помощью спец утилит, а не ручной правке реестра - можно например вручную менять ключ запуска проводника на оригинальный, удалять записи о отладчиках процессов (зловреды так блочат запуск зашитного софта), править файловые ассоциации - но проще всё же это сделать с помощью спец утилит...
4) Тут как кому удобнее - у меня напрмер стоит MD - она имеет прямой доступ к файловой системе и реестру - поэтому у неё проблем с нехваткой прав не возникнет - удалит всё что угодно (P.S. исключение TDSS и ему подобные - если он активен на машине до установки MD (он блочит антируткитам прямой доступ к файлам и реестру), так как после её установки и работе - он ничего не сможет сделать)...



ТроПа написал(а):


> Притом блокируется доступ для того что бы поправить внесённые изменения, например такие как замена systemroot на fystemroot, *тут удаление ключа не поможет*.


Вот мой скрипт AVZ для исправления этой проблемы:

```
begin
RegKeyResetSecurity('HKLM', 'SYSTEM\CurrentControlSet\Services\BITS');
RegKeyResetSecurity('HKLM', 'SYSTEM\CurrentControlSet\Services\wuauserv');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Services\BITS', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Services\wuauserv', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
end.
```

Кстати причём тут удаление ключа - я вроде о нём ничего не упоминал...


----------



## Вархаммер (15 Окт 2009)

Ingener написал(а):


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


Еще проще твиками.


Ingener написал(а):


> Вот мой скрипт AVZ для исправления этой проблемы:
> 
> ```
> begin
> ...


Возникает вопрос, а зачем Вам учиться если Вы все знаете? Мне вот например все интересно, так как все в новинку. А Вы судя по подписи, вроде даже с помощью GMER лечите. Я здесь уже почти месяц, а до альтернативных утилит даже еще не дошел.


----------



## Ingener (15 Окт 2009)

Вархаммер написал(а):


> Еще проще твиками.
> 
> Возникает вопрос, а зачем Вам учиться если Вы все знаете? Мне вот например все интересно, так как все в новинку. А Вы судя по подписи, вроде даже с помощью GMER лечите. Я здесь уже почти месяц, а до альтернативных утилит даже еще не дошел.



[OFF]Знаний много не бывает - AVZ, HijackThis и GMER я владею (но у вас тут ещё учат другим утилитам) - не знаю правда какова в них необходимость - так представленного выше набора мне хватает (разве что в очень редких случаях они пригодятся) - но всё равно ознакомится с их работой будет полезно - да и лишняя практика не помешает...

Я вообше придерживаюсь классического подхода при личение - использовать как можно меньше разнообразных утилит - дабы не путать пользователей и не заставлять их делать кучу разных логов в которых нет острой необходимости...[/OFF]


----------



## akok (16 Окт 2009)

Ingener написал(а):


> Зачем скачивать и юзать дополнительные утилиты - если данные действия можно произвести в AVZ при помощи функции RegKeyResetSecurity:



AVZ 4.32 вышла 21.08.2009, а вот тема создана 07.07.2009. Тогда такого функционала в AVZ не предусматривалось.

Да и скрипт по исправлению последствий *fystemRoot* не совсем полон. 



Спойлер: примерный список изменений



Windows Registry Editor Version 5.00

; Registry Search 2.0 by Bobbi Flekman © 2005
; Version: 2.0.6.0

; Results at 14.04.2009 19:13:34 for strings:
; 'fystemroot'
; Strings excluded from search:
; (None)
; Search in: 
; Registry Keys Registry Values Registry Data 
; HKEY_LOCAL_MACHINE HKEY_USERS 


[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\BITS]
; Contents of value:
; %fystemRoot%\system32\svchost.exe -k netsvcs 
"ImagePath"=hex(2):25,00,66,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\
6b,00,20,00,6e,00,65,00,74,00,73,00,76,00,63,00,73,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\wuauserv]
; Contents of value:
; %fystemroot%\system32\svchost.exe -k netsvcs 
"ImagePath"=hex(2):25,00,66,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\
6b,00,20,00,6e,00,65,00,74,00,73,00,76,00,63,00,73,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Services\BITS]
; Contents of value:
; %fystemRoot%\system32\svchost.exe -k netsvcs 
"ImagePath"=hex(2):25,00,66,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\
6b,00,20,00,6e,00,65,00,74,00,73,00,76,00,63,00,73,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Services\wuauserv]
; Contents of value:
; %fystemroot%\system32\svchost.exe -k netsvcs 
"ImagePath"=hex(2):25,00,66,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\
6b,00,20,00,6e,00,65,00,74,00,73,00,76,00,63,00,73,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\controlset004\Services\BITS]
; Contents of value:
; %fystemRoot%\system32\svchost.exe -k netsvcs 
"ImagePath"=hex(2):25,00,66,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\
6b,00,20,00,6e,00,65,00,74,00,73,00,76,00,63,00,73,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\controlset004\Services\wuauserv]
; Contents of value:
; %fystemroot%\system32\svchost.exe -k netsvcs 
"ImagePath"=hex(2):25,00,66,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\
6b,00,20,00,6e,00,65,00,74,00,73,00,76,00,63,00,73,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BITS]
; Contents of value:
; %fystemRoot%\system32\svchost.exe -k netsvcs 
"ImagePath"=hex(2):25,00,66,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\
6b,00,20,00,6e,00,65,00,74,00,73,00,76,00,63,00,73,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv]
; Contents of value:
; %fystemroot%\system32\svchost.exe -k netsvcs 
"ImagePath"=hex(2):25,00,66,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,76,00,63,00,68,00,6f,00,73,00,74,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\
6b,00,20,00,6e,00,65,00,74,00,73,00,76,00,63,00,73,00,00,00

; End Of The Log...



Если и исправлять последствия то в полном объеме.


----------



## Ingener (16 Окт 2009)

akoK написал(а):


> AVZ 4.32 вышла 21.08.2009, а вот тема создана 07.07.2009. Тогда такого функционала в AVZ не предусматривалось.


Тогда не было - сейчас есть - нужно идти в ногу со временем и дополнить статью.



akoK написал(а):


> Да и скрипт по исправлению последствий *fystemRoot* не совсем полон.
> 
> 
> 
> ...



Я привёл вам лишь пример скрипта правящий данные изменения, а вы говорите про конкретный случай заражения - скрипт нужно писать для каждого случая отдельно...
Хотя можно организовать в скипте перебор разделов реестра и внесение изменений при наличие соответствующего раздела - сделать единый скрипт для всех случаев...


----------



## akok (16 Окт 2009)

*Ingener*, а никто и не отказывается. Дополним.


----------



## Ingener (16 Окт 2009)

Кстати для поиска изменённых ключей тоже не нужно дополнительных утилит - AVZ и это делать умеет:


> function RegSearch(ARoot, AName, AValue : string) : boolean;
> Производит сканирование ключа AName раздела реестра ARoot и осуществляет поиск образца AValue. Информация о всех найденных ключах выводится в протокол. Если AName равен пустой строке, то сканируются все ключи раздела ARoot. Сравнение с образцом идет без учета регистра, допускаются частичные совпадения. Функция полезна для поиска в реестре определенных данных, например ссылок на файл с известным именем. Поиск может занять длительное время (до нескольких минут).
> Пример:
> 
> ...


Вот пример скрипта:

```
begin
 RegSearch('HKLM', 'System', 'fystemRoot');
end.
```


----------



## ТроПа (16 Окт 2009)

Ingener написал(а):


> Здесь может быть много нюансов:
> 1) Зловред может отключить редактор реестра.


Если вы не выгнали всех зловредов то смысла в правке реестра практически нет, за редким исключением.



> 2) Я не пробывал вручную менять права доступа у ключей созданных зловредами - поятому точно ничего утверждать не могу (получится или нет)...


Если зловред удалён, то получится.




Ingener написал(а):


> Кстати причём тут удаление ключа - я вроде о нём ничего не упоминал...


Внимательнее прочитайте цитату приведенную в вашем сообщении




Ingener написал(а):


> Я вообше придерживаюсь классического подхода при личение - использовать как можно меньше разнообразных утилит - дабы не путать пользователей и не заставлять их делать кучу разных логов в которых нет острой необходимости...


Вынужден с вами не согласится. т.к. после того как в логе АВЗ нет никаких зловредов, другие утилиты удаляют ещё их, иногда одного-двух, а иногда и десятки.

Тут можно вспомнить пресловутый Кидо, которого долгое время АВЗ в своих логах вообще не отображала, а логи Combofix и Gmer дополняли друг друга, кстати, снова начали встречаться разновидности Кидо, которые АВЗ не видит.


----------



## Ingener (17 Окт 2009)

ТроПа написал(а):


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


Ещё раз повторю то что я уже писал:


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


На это тему можно ещё долго спорить.



ТроПа написал(а):


> Внимательнее прочитайте цитату приведенную в вашем сообщении


Это вам стоит внимательно перечитать цитату и понять что там написано...
Вы просто выдернули из контекста фразу *RegKeyDel* (Данная функция полезна для удаления ключей реестра) и начали говорить об этой функции хотя речь идёт о *RegKeyResetSecurity*, а там лишь упоминалось что при использование команд RegKeyDel и DeleteService - они автоматически вызывают RegKeyResetSecurity в случае необходимости, т.е. не нужно дополнительно прописывать в скрипте RegKeyResetSecurity для удаляемых ключей.
Основная мысль там:


> *RegKeyResetSecurity* - удаляет все привилегии ключа реестра, делая его доступным для всех пользователей.


Ваша цитата:


> Притом блокируется доступ для того что бы поправить внесённые изменения, например такие как замена systemroot на fystemroot, *тут удаление ключа не поможет*.


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



ТроПа написал(а):


> Вынужден с вами не согласится. т.к. после того как в логе АВЗ нет никаких зловредов, другие утилиты удаляют ещё их, иногда одного-двух, а иногда и десятки.
> 
> Тут можно вспомнить пресловутый Кидо, которого долгое время АВЗ в своих логах вообще не отображала, а логи Combofix и Gmer дополняли друг друга, кстати, снова начали встречаться разновидности Кидо, которые АВЗ не видит.


В реальной практике лечения такие случае возникнут редко (имеется ввиду невозможность определить зловреда при помощи связки AVZ + HijackThis + GMER) - поэтому и логи дополнительными утилитами нужно просить делать когда этими утилитами отработали по полной, а проблемы остались (зловред не обнаружен или не добит), т.е. только при реальной необходимости в дополнительных логах, а не сразу - пользователь пришёл лечиться - ему говорят скачайте 10 утилит, разберитесь в их работе, сделайте 10 логов этими утилитами, выложите их и т.д. (цифра 10 так от болды взята) - зачем пользователя изначально загонять в тупик - заставлять делать лишнюю работу - но это чисто моё мнение - я его никому не навязываю...

_Добавлено через 22 часа 48 минут 37 секунд_
Вот уневерсальный скрипт для полного исправления проблемы с *fystemroot* (Большое спасибо *Kuzz* за помощь в написание скрипта!!!):

```
var count:integer;
begin
RegKeyResetSecurity('HKLM', 'SYSTEM\CurrentControlSet\Services\BITS');
RegKeyResetSecurity('HKLM', 'SYSTEM\CurrentControlSet\Services\wuauserv');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Services\BITS', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Services\wuauserv', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
for count:=1 to 9 do
 begin
 if RegKeyExists('HKLM', 'SYSTEM\ControlSet00'+IntToStr(count)) then
  begin
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet00'+IntToStr(count)+'\Services\BITS');
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet00'+IntToStr(count)+'\Services\wuauserv');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet00'+IntToStr(count)+'\Services\BITS', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet00'+IntToStr(count)+'\Services\wuauserv', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  AddToLog('Раздел ControlSet00'+IntToStr(count)+' найден.');
  end;
 end;
for count:=10 to 99 do
 begin
 if RegKeyExists('HKLM', 'SYSTEM\ControlSet0'+IntToStr(count)) then
  begin
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet0'+IntToStr(count)+'\Services\BITS');
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet0'+IntToStr(count)+'\Services\wuauserv');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet0'+IntToStr(count)+'\Services\BITS', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet0'+IntToStr(count)+'\Services\wuauserv', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  AddToLog('Раздел ControlSet0'+IntToStr(count)+' найден.');
  end;
 end;
for count:=100 to 999 do
 begin
 if RegKeyExists('HKLM', 'SYSTEM\ControlSet'+IntToStr(count)) then
  begin
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet'+IntToStr(count)+'\Services\BITS');
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet'+IntToStr(count)+'\Services\wuauserv');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet'+IntToStr(count)+'\Services\BITS', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet'+IntToStr(count)+'\Services\wuauserv', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  AddToLog('Раздел ControlSet'+IntToStr(count)+' найден.');
  end;
 end;
end.
```

Ну как вам скрипт..?


----------



## akok (17 Окт 2009)

Ingener написал(а):


> Ну как вам скрипт..?



Хорошо. Обновляю тему  

Спасибо Kuzz и Вам.




Ingener написал(а):


> В реальной практике лечения такие случае возникнут редко (имеется ввиду невозможность определить зловреда при помощи связки AVZ + HijackThis + GMER)


Из реальной практики. У AVZ есть несколько довольно неприятных недостатков
1. Не логируются файлы, которые не прописаны в автозапуск (и по моим данным расширение функционала в эту сторону не предусматривается, а жаль). И после полного лечения тот же "лже-антивирус" MBAM, а если остались симптомы, то CF удаляют еще не мало.
2. Слабый бортовой антируткит (не так давно и Gmer был под анафемой "лишняя утилита")  вспомним Kido и Tdss

Я тоже в свое время занимал довольно аскетическую позицию по выбору утилит, но чем дальше изучал множество альтернативных инструментов, все больше и больше замечал мутных пятен на "нимбе" AVZ.
Cогласен в одном, выбор инструментария сугубо индивидуальное дело каждого специалиста.


----------



## Drongo (21 Окт 2009)

*Ingener*, Привет. Я с *Delphi* поверхностно знаком. Мне бы хотелось понять не *что именно* этот скрипт делает, а *как* он работает. Тоесть нужно помочь мне его перевести на нормальный человеческий язык (псевдокод.)


Спойлер: Скрипт





```
var count:integer;
begin
RegKeyResetSecurity('HKLM', 'SYSTEM\CurrentControlSet\Services\BITS');
RegKeyResetSecurity('HKLM', 'SYSTEM\CurrentControlSet\Services\wuauserv');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Services\BITS', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Services\wuauserv', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
for count:=1 to 9 do
 begin
 if RegKeyExists('HKLM', 'SYSTEM\ControlSet00'+IntToStr(count)) then
  begin
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet00'+IntToStr(count)+'\Services\BITS');
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet00'+IntToStr(count)+'\Services\wuauserv');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet00'+IntToStr(count)+'\Services\BITS', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet00'+IntToStr(count)+'\Services\wuauserv', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  AddToLog('Раздел ControlSet00'+IntToStr(count)+' найден.');
  end;
 end;
for count:=10 to 99 do
 begin
 if RegKeyExists('HKLM', 'SYSTEM\ControlSet0'+IntToStr(count)) then
  begin
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet0'+IntToStr(count)+'\Services\BITS');
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet0'+IntToStr(count)+'\Services\wuauserv');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet0'+IntToStr(count)+'\Services\BITS', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet0'+IntToStr(count)+'\Services\wuauserv', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  AddToLog('Раздел ControlSet0'+IntToStr(count)+' найден.');
  end;
 end;
for count:=100 to 999 do
 begin
 if RegKeyExists('HKLM', 'SYSTEM\ControlSet'+IntToStr(count)) then
  begin
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet'+IntToStr(count)+'\Services\BITS');
  RegKeyResetSecurity('HKLM', 'SYSTEM\ControlSet'+IntToStr(count)+'\Services\wuauserv');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet'+IntToStr(count)+'\Services\BITS', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\ControlSet'+IntToStr(count)+'\Services\wuauserv', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  AddToLog('Раздел ControlSet'+IntToStr(count)+' найден.');
  end;
 end;
end.
```



В общем-то я понимаю:
1-я строка, сброс ограничений прав для ветки *...\BITS*
2-я строка, сброс ограничений прав для ветки *...\wuauserv*
3-я строка, изменяет в ветке *...\BITS*, значение параметра *ImagePath* на следующий *%SystemRoot%\System32\svchost.exe -k netsvcs*
4-я строка, делает тоже что и 3-я, но для ветки *...\wuauserv*
---------------------

```
RegKeyResetSecurity('HKLM', 'SYSTEM\CurrentControlSet\Services\BITS');
RegKeyResetSecurity('HKLM', 'SYSTEM\CurrentControlSet\Services\wuauserv');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Services\BITS', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
RegKeyStrParamWrite('HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Services\wuauserv', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
```
Не ясен момент цикла со счётчиком... Почему используется счётчик от 0 и до 10, от 10 и до 10, от 100 и до 999. То что значения могут содержать первые два нуля или первый нуль, это понятно. Просто у меня на компе только два *ControlSet*'a:
1-й *ControlSet001*
2-й *ControlSet002*
И всё, зачем нужен перебор до 999 ?

P.S. В гугле я нашёл значение *ControlSet100* и *ControlSet004*, это к слову, но не знаю отчего зависит количество этих разделов?


----------



## Ingener (21 Окт 2009)

Drongo написал(а):


> *Ingener*, Привет. Я с *Delphi* поверхностно знаком.
> И всё, зачем нужен перебор до 999 ?
> 
> P.S. В гугле я нашёл значение *ControlSet100* и *ControlSet004*, это к слову, но не знаю отчего зависит количество этих разделов?


Перебор до 999 задан чисто теоретически - я сам точно не знаю какой максимальный номер может быть задан, поэтому чисто решил остановится на числе 999. В логах GMER встречал записи созданные зловредами если мне не изменяет память с нумерацией разделов до 100 (т.е. он например создавал разделы ControlSet044, ControlSet057) - поэтому я с запасом решил сделать перебор до 999 - но на ресурсоемкости серипта это никак не отображается - скрипт вмиг перебирает все разделы.

интервалы от 0 и до 10, от 10 и до 10, от 100 используется из-за для организации корректного перебора ключей: 
Если просто задать перебор интервалом от 0 до 999 то получим:

```
ControlSet1
***
ControlSet10
***
ControlSet100
***
ControlSet999
```
Т.е. скрипт начнёт действовать только с 100-го раздела реестра.
А нам нужен такой перебор:

```
ControlSet001
***
ControlSet010
***
ControlSet100
***
ControlSet999
```
Люди говорили что как-то можно добавить ведущие нули, но я не разобрался как это сделать - кстати вот усовершенствованная модель скрипта - с оптимизированным перебором разделов реестра и откорректирован ряд моментов - сейчас ещё потестирую скрипт на виртуалке - нет ли там ошибок и можно заменить его в той теме:

```
var j:integer; NumStr:string;
begin
for j:=0 to 999 do
 begin
    if j=0 then
        NumStr:='CurrentControlSet' else 
        if j<10 then
            NumStr:='ControlSet00'+IntToStr(j) else
            if j<100 then
                NumStr:='ControlSet0'+IntToStr(j) else
                NumStr:='ControlSet'+IntToStr(j);
 if RegKeyExists('HKLM', 'SYSTEM\'+NumStr+'\Services\BITS') then
  begin
  RegKeyResetSecurity('HKLM', 'SYSTEM\'+NumStr+'\Services\BITS');
  RegKeyStrParamWrite('HKLM', 'SYSTEM\'+NumStr+'\Services\BITS', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  AddToLog('Значение параметра ImagePath в разделе реестра HKLM\SYSTEM\'+NumStr+'\Services\BITS исправлено на оригинальное.');
  end;
 if RegKeyExists('HKLM', 'SYSTEM\'+NumStr+'\Services\wuauserv') then
  begin 
  RegKeyResetSecurity('HKLM', 'SYSTEM\'+NumStr+'\Services\wuauserv');
  RegKeyStrParamWrite('HKLM', 'SYSTEM\'+NumStr+'\Services\wuauserv', 'ImagePath', '%SystemRoot%\System32\svchost.exe -k netsvcs');
  AddToLog('Значение параметра ImagePath в разделе реестра HKLM\SYSTEM\'+NumStr+'\Services\wuauserv исправлено на оригинальное.');
  end;
 end;
SaveLog(GetAVZDirectory + 'fystemRoot.log');
end.
```

_Добавлено через 1 час 14 минут 9 секунд_
Скрипт протестировал на виртуалке - полностью рабочий - замените плиз в соответствующей теме.


----------



## Drongo (22 Окт 2009)

Ingener написал(а):


> Перебор до 999 задан чисто теоретически - я сам точно не знаю какой максимальный номер может быть задан, поэтому чисто решил остановится на числе 999


А, понял, спасибо.
Эта версия с условиями *если\иначе* будет лучше, не будет лишних затрат.


----------



## Drongo (25 Окт 2009)

Ingener написал(а):


> Люди говорили что как-то можно добавить ведущие нули, но я не разобрался как это сделать


*Ingener*, Мой друг *Serega*, реализовал пример-программу на *Delphi* с ведущими нулями перед числом. Оригинальный код:

```
program Project1;

uses
  Windows,
  SysUtils;

var
  i: Integer;
  s: string;
  
begin
  for i:= 0 to 10 do s:= s + FormatFloat('Template0000', i) + '.txt' + #13;
  MessageBox(0, PChar(s), 'Сообщение', MB_ICONEXCLAMATION);
end.
```
Тест-программа, выводит в примере имена файлов с ведущими нулями от номера от 0000 до 0010.








Я думаю можно исправить приблизительно так:

```
...
NumStr:= NumStr + FormatFloat('ControlSet000', j);
...
if RegKeyExists('HKLM', 'SYSTEM\'+NumStr+'\Services\BITS')
...
```


----------

