background img

The New Stuff

Не отображается содержимое USB-накопителей

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

Меня совершенно не радовала перспектива переустанавливать операционную систему, поэтому я занялся поиском лекарства.
Просмотрев множество различных рекомендаций от бредовых до более-менее адекватных, я пришел к выводу, что эта проблема возникает в следующих ситуациях:
1. Вирусная деятельность;
2. Системные проблемы Windows, некорректная работа стороннего ПО;
3. Проблема с драйверами USB.

Я буду рассматривать ситуации, когда работоспособность самого носителя не вызывает сомнений.

Начнем рассмотрение по порядку.
1. Вирусная активность
В случае подозрений на вирусную активность, прежде чем проводить какие-либо процедуры по восстановлению доступности информации на USB-носителях, необходимо проверить критически важные области операционной системы - оперативная память, каталоги \windows\system32 (\windows\syswow64 - для 64-битных систем, его надо ставить в проверку вместе с папкой system32), папка профилей пользователей (Users, Documents and Settengs), точки восстановления системы и корневой каталог USB-носителя (желательно).
Провести проверку можно двумя утилитами:
1. Doctor Web CureIt: http://www.freedrweb.ru/cureit/
2. Kaspersky Antivirus Removal Tool: http://www.kaspersky.ru/antivirus-removal-tool

Самое лучшее - проводить проверку с помощью LiveCD, поскольку это гарантированно защищает от запуска вредоносного содержимого!

После проведения проверки на вирусы вставляем носитель и смотрим, что происходит. Если содержимое опять не выводится, смотрим, что показывает информация о диске - общий объем диска, занятое место и свободное место.
Если занятого места показывается намного меньше, чем должно быть на самом деле, значит, скорее всего, данные были повреждены вирусом. Восстановить такие данные бывает очень сложно или не возможно.
Если отображаемые данные похожи на правду, надо сделать скрытые и системные папки видимыми (windows по умолчанию их скрывает):
1. Windows XP: Пуск -> Мой компьютер -> Меню Сервис -> Свойства папки -> Вкладка вид;
2. Windows 7: Пуск -> Панель Управления -> Оформление и персонализация -> Параментры папок -> Вкладка Вид.
Сделать следующее:
Скрывать защищенные системные файлы (рекомендуется) — снимаем галочку;
Показывать скрытые файлы и папки — устанавливаем переключатель.
Если после этого содержимое носителя стало отображаться, значит цель достигнута и дело осталось за малым - вычистить остатки от вируса. Все подозрительные файлы с расширениями bat, cmd, lnk, autorun.inf, если Вы их не создавали сами, удаляйте без сожалений! Также нужно удалить папку Recycler со всем содержимым - там никаких нужных для Вас данных нет, а вирусы могут прятаться.
Это можно сделать в командной строке (Пуск -> Выполнить. Набрать cmd и нажать Ок):
del /f e:\*.bat
del /f e:\*.cmd
del /f e:\*.lnk
del /f e:\autorun.*
где е: - буква, присвоенная Вашему USB-накопителю.

Некоторые вирусы прячут файлы на флешках оригинальным способом - создают папку с названием ".." (только две точки), поэтому эту папку нигде - ни в проводнике, ни в программах типа Total Commander не видно. В этом случае поможет следующее лекарство:
Если содержимое носителя не отображается, то надо в командной строке выполнить:
dir e:
здесь e: - буква, назначенная накопителю.
Вы увидите имя папки похожее на E2E2~1.
Выполните следующую команду: ren e:\E2E2~1 newfolder, где newfolder - имя папки, задаваемое Вами. Имя папки желательно задавать короткое (не более 8 символов) и латинскими буквами.
После этого выполнить следующие команды
attrib -s -h /s /d e:\*.*
rd e:\Recycler /s /q
где e: - буква Вашего носителя.

2. Системные проблемы Windows, некорректная работа стороннего ПО


При поиске информации о возможных ситуациях, приводящих к проблемам с отображением содержимого USB-накопителей, мне несколько раз попадались сообщения о том, что к таким проблемам иногда приводит удаление программ для работы с дисками, например, Partition Magic (это не антиреклама, просто из многообразия различных сообщений, ссылка на данную программу мне запомнилась). У меня как раз была установлена программа Partition Magic Free Edition. После её удаления как раз обнаружилась проблема с отображением информации на флешках.
Я не могу сказать, что корень проблемы у меня был именно в этой программе, поскольку проводил полную чистку системы от разных программ и флешкой довольно длительное время на этом компьютере не пользовался.
К слову сказать, антивирус у меня стоит лицензионный и, когда обнаружились проблемы с доступом к информации на флешках, я сразу подумал на вирус и провел проверку несколькими портативными антивирусными утилитами с обновленными базами.
  1. Здесь мы рассмотрим ситуацию, когда съемные носители определились и в "Управлении устройствами" (Device manager) - показывает, что все устройства работают нормально и конфликтов нет, но к примеру в Проводнике Windows устройство отсутствует.
    • Проверьте назначена ли буква в оснастке "Управление дисками": Кликните ПУСК --> Выполнить (либо сочетание клавиш Win+R) diskmgmt.msc
    • Если установлен SPTD (входит в состав Alcohol 52/100% и Daemon Tools) - переустановите его.
    • Попробуйте применить этот твик реестра: Windows Registry Editor Version 5.00

      [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
      "NoDrives"=dword:00000000
      "NoViewOnDrive"=dword:00000000

      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]
      "NoDrives"=dword:00000000
      "NoViewOnDrive"=dword:00000000

      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}]
      "UpperFilters"=-
      "LowerFilters"=-

      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}]
      "UpperFilters"=-
      "LowerFilters"=-

      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E980-E325-11CE-BFC1-08002BE10318}]
      "UpperFilters"=-
      "LowerFilters"=-

      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbstor]
      "Start"=dword:00000003 
Для того, чтоб применить этот твик, создайте файл с любым названием и с расширением reg. Например, так: tweak.reg

Вот еще один вариант приведенного выше твика. Эти параметры взяты с рабочего компьютера (Windows 7), на котором все USB устройства работают нормально:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}]
"Class"="CDROM"
"ClassDesc"="@%SystemRoot%\\System32\\StorProp.dll,-17001"
@="DVD/CD-ROM drives"
"IconPath"=hex(7):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
  74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,\
  00,6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,33,00,30,00,00,00,00,00
"Installer32"="storprop.dll,DvdClassInstaller"
"EnumPropPages32"="storprop.dll,DvdPropPageProvider"
"SilentInstall"="1"
"NoInstallClass"="1"
"LowerFilters"=hex(7):69,00,61,00,53,00,74,00,6f,00,72,00,46,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}]
"Class"="DiskDrive"
"ClassDesc"="@%SystemRoot%\\System32\\StorProp.dll,-17000"
@="Disk drives"
"IconPath"=hex(7):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
  74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,\
  00,6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,33,00,32,00,00,00,00,00
"Installer32"="StorProp.Dll,DiskClassInstaller"
"NoInstallClass"="1"
"SilentInstall"="1"
"UpperFilters"=hex(7):50,00,61,00,72,00,74,00,4d,00,67,00,72,00,00,00,66,00,6c,\
  00,74,00,73,00,72,00,76,00,00,00,00,00
"LowerFilters"=hex(7):69,00,61,00,53,00,74,00,6f,00,72,00,46,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E980-E325-11CE-BFC1-08002BE10318}]

"Class"="FloppyDisk"
"ClassDesc"="@%SystemRoot%\\System32\\SysClass.Dll,-3015"
@="Floppy disk drives"
"IconPath"=hex(7):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
  74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,\
  00,6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,32,00,38,00,00,00,00,00
"SilentInstall"="1"

"NoInstallClass"="1"


Классы реестра, отвечающие за устройства хранения USB.

Классы находятся в ветке реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\

{36FC9E60-C465-11CF-8056-444553540000} - Universal Serial Bus controllers
{4D36E967-E325-11CE-BFC1-08002BE10318} - Disk drives
{4D36E965-E325-11CE-BFC1-08002BE10318} - DVD/CD-ROM drives
{4D36E980-E325-11CE-BFC1-08002BE10318} - Floppy disk drives


3. Проблема с драйверами USB


  1. Здесь мы рассмотрим ситуацию, когда:
    • Само устройство РАБОТАЕТ. Это Вы проверили на другом компьютере.
    • При подключении же именно к Вашему компьютеру, оно либо не определяется вообще, либо определяется неправильно, либо даже правильно определяется, но не работает как нужно.
    • Вы уверены, что установлены все необходимые драйверы всех устройств подключенных к системе.
    • Вы уверены, что переустановка и обновление драйверов USB контроллеров и устройств USB сделаны корректно.
    • В "Управлении устройствами" (Device manager) - показывает, что все устройства работают нормально и конфликтов нет. 

    Как правило такая ситуация может возникнуть если USB 2.0 Enhanced Host Controller использует одно прерывание вместе с каким-либо другим устройством (IRQ Sharing), например звуковым или видео. В этом случае нарушается правильная передача параметров (FDO, PDO) от драйверов USB (usbhub.sys, usbstor.sys, usbport.sys) к драйверам логических устройств, например от usbstor.sys в disk.sys в случае "USB 2.0 mass storage device".
  2. Физически отключите все USB устройства от компьютера и загрузите компьютер в БЕЗОПАСНОМ РЕЖИМЕ (Safe Mode) - нажмите F8 при старте компьютера - с правами локального Администратора.
  3. Удаление скрытых устройств
    • Кликните ПУСК --> Выполнить (либо сочетание клавиш Win+R). Напечатайте cmd и нажмите OK - должно появиться окно командной строки.
    • В командной строке, напечатайте следующее (без кавычек) и нажимайте Enter после каждой команды:

                "set DEVMGR_SHOW_DETAILS=1"
                "set DEVMGR_SHOW_NONPRESENT_DEVICES=1"
                "start devmgmt.msc"

      Должен появиться "Device Manager", или "Управление устройствами" в русской версии.
    • Кликните View (Вид) --> Show hidden devices (Показать скрытые устройства).
    • Если Вы увидели в развернутых классах Ваше устройство (включая посеревшие) кликните на нем правой кнопкой и в выпавшем меню кликните Uninstall (Удалить). 

    Например для USB 2.0 HDD надо удалить все "USB 2.0 Storage Device USB Device" из класса "Disk Drives", все "USB mass StorageDevice" из класса "USB controllers" и серые "Generic Volume" из класса "Storage Volumes".

    Будте осторожны, чтобы не удалить устройства, обслуживающие Ваши жесткие диски с которых грузится Windows.
  4. Удаление всех oem*.inf файлов

    В командной строке, напечатайте следующее (без кавычек) и нажимайте Enter после каждой команды:

              "cd \windows\inf"
              "ren infcache.1 *.old"
              "ren oem*.inf *.old"
              "del C:\windows\setupapi.log"

    ВНИМАНИЕ! Если у Вас установлено несколько копий Windows, необходимо проделать эту процедуру ДЛЯ ВСЕХ установок Windows.
  5. Удаление всех ключей в ветке реестра HKEY_LOCAL_MACHINE/Enum/USB которые начинаются с VID

    Удаление VID_.... ключей из реестра приведет к распознаванию USB устройств заново при рестарте системы.

    ВНИМАНИЕ: Если у Вас USB мышь или клавиатура, не удаляйте их ветки реестра, иначе Windows при рестарте может глюкануть. Определить эти ветки можно кликнув на "+" VID_.... ключа и кликнуть на ключ ступенькой ниже. Если справа в значении переменной DeviceDesc Вы увидите что-то типа "Human Interface Device" или HID - то это как раз мышь или клавиатура.

    • В командной строке, напечатайте regedit и нажмите OK - должен открыться редактор реестра.
    • Перейдите на HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB.

      Сведения о USB устройствах, которые когда либо были подключены располагаются в ключах типа "Vid_0000&Pid_0000", необходимо их все удалить (кроме HID).
    • Правой кнопкой мыши на каждом из этих ключей (типа "Vid_0000&Pid_0000") --> Permissions (Разрешения) -> для группы Everyone (Все) назначить Full Control (полный доступ) --> Применить.
    • Удалите все (кроме HID) VID_.... ключи.
    • Закройте редактор реестра, завершите работу и полностью выключите компьютер (из розетки или выключить сетевой фильтр). 

  6. Подключение устройства к компьютеру: 
    • Пока компьютер ВЫКЛЮЧЕН присоедините Ваше устройство к USB порту НЕ ПОДКЛЮЧАЯ ПИТАНИЯ К ВАШЕМУ USB УСТРОЙСТВУ (если имеется отдельное питание).
    • ПОСЛЕ того, как Windows ПОЛНОСТЬЮ загрузиться и прекратит бешено шуршать винчестером (можно проследить по диодному индикатору HDD на лицевой панели системного блока), подсоединяем питание к Вашему устройству.
    • Должен начаться процесс детектирования нового устройства и полная переустановка драйверов для него.
    • Если при подключении ранее установленного устройства USB, Windows запросит установить драйвер, укажите следующие пути: WINDOWS\system32\ , WINDOWS\INF\ , WINDOWS\Driver Cache\i386\ , а для Windows Vista и Windows 7 еще и WINDOWS\WinSxS\ 
Еще один вариант восстановления драйверов. Выполняется в командной строке, запущенной с правами администратора:
pnputil.exe -a C:\WINDOWS\System32\DriverStore\FileRepository\intelpep.inf_amd64_b217eba3b9eb6ae4\intelpep.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usb.inf_31bf3856ad364e35_6.3.9600.16442_none_bbe00802e24ab498\usb.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_prnms003.inf_31bf3856ad364e35_6.3.9600.17238_none_43c7d0bfa7ab0231\prnms003.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_sdbus.inf_31bf3856ad364e35_6.3.9600.17031_none_62d40f129e2862c0\sdbus.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_sdbus.inf_31bf3856ad364e35_6.3.9600.17329_none_62e6e7009e1908fc\sdbus.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbhub3.inf_31bf3856ad364e35_6.3.9600.17195_none_e694f5dd21042778\usbhub3.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbhub3.inf_31bf3856ad364e35_6.3.9600.17238_none_e6d8d82920d0c8fe\usbhub3.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbport.inf_31bf3856ad364e35_6.3.9600.17116_none_aece54f1d74a3634\usbport.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbport.inf_31bf3856ad364e35_6.3.9600.17195_none_ae76d547d78bfc65\usbport.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbstor.inf_31bf3856ad364e35_6.3.9600.17031_none_3977a1056ba46c29\usbstor.inf
pnputil.exe -a C:\WINDOWS\WinSxS\x86_prnms003.inf_31bf3856ad364e35_6.3.9600.17238_none_e7a9353bef4d90fb\prnms003.inf

Иногда неработоспособность USB-накопителей появляется после установки обновлений, когда обновляется файл usbstor.inf. В этом случае можно попробовать выполнить следующую команду в командной строке, запущенной от имени Администратора:

pnputil.exe -f -d usbstor.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbstor.inf_31bf3856ad364e35_6.3.9600.17331_none_3977a6b76ba4639e\usbstor.inf


Используемые ссылки:

Полезные статьи:
1. Восстановление флешек: http://geektimes.ru/post/98339/
2. Коды ошибок диспетчера устройств: https://support.microsoft.com/ru-ru/kb/310123/ru

Полезные программы:
1. Ремонт программных проблем с USB-накопителями: MK Registry & USB Fixer 2.0.1
2. Автоматическая диагностика и устранение проблем с USB в Windows: FixIt
3. Автоматическое устранение проблем с USB: FixIt WinUSB
4. Скрипт AVZ для обнаружения наиболее часто используемых уязвимостей: http://df.ru/~kad/ScanVuln.txt
5. Программа для стирания следов подключения USB-дисков из реестра Windows: usboblivion64-1.10.2.0
6. Как исправить проблемы с устройствами: не работает, не найдено: FixIt


Приложения
Скрипт AVZ для обнаружения наиболее часто используемых уязвимостей

{ Скрипт AVZ для обнаружения наиболее часто используемых уязвимостей. Версия 2.34
Автор: Андрей Кондауров, участник форума defendium.info (AndreyKa)
Скрипт может свободно распространяться, при условии сохранения данного комментария
Постоянный адрес скрипта: http://dataforce.ru/~kad/ScanVuln.txt
}
var
IOSVer, ICounter : Integer;
A00,A01,A02,A03,A04,A05,A06,A07,A08,A09,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23,A24,A25,
A26,A27,A28,A29,A30,A31,A32,A33,A34,A35,A36,A37,A38,A39,A40,A41,A42,A43,A44,A45,A46,A47,A48,A49,A50,A51,
Dot, notDot : string;
noSP, bRU : boolean;
D01,D02,D03,D04,D05,D06,D07,D08,D09,D10,D11,D12,D13,D14 : string;

function IsFileBuldLow(VulnFileName: string; IMinVer: integer) : boolean;
var
ARes : string;
IPos, IBuild : Integer;
begin
ARes := GetFileVersion(VulnFileName, 6);
IPos := Pos('.', ARes);
while IPos > 0 do
begin
Delete(ARes, 1, IPos);
IPos := Pos('.', ARes);
end;
Result := False;
if ValidInt(ARes) then
begin
IBuild := StrToInt(ARes);
if IBuild < IMinVer then
Result := True
end;
end;

function IsFileSubVerLow(VulnFileName:string; IMinSubVer:Extended):boolean;
var
ARes: string;
IPos: Integer;
begin
ARes := GetFileVersion(VulnFileName, 6);
IPos := Pos('.', ARes);
Delete(ARes, 1, IPos);
IPos := Pos('.', ARes);
Delete(ARes, 1, IPos);
Result := False;
ARes := NormalizeDot(ARes);
if ValidFloat(ARes) then
if StrToFloat(ARes) < IMinSubVer then
Result := True;
end;

function NormalizeDot(aStr : string) : string;
begin
Result := StringReplace(aStr, notDot, Dot);
end;

Procedure WinVuln;
var
AOSVer, ASP, AResult, ARes, ID, AFName, URL : string;
IMinVer, IEVer : integer;
IMinSubVer: Extended;
FS : TFileSearch;
begin
if not IsNT then exit;
// Определить версию ОС
AOSVer := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows NT\CurrentVersion','CurrentVersion');
if AOSVer < '5.0' then exit;
ASP := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows NT\CurrentVersion','CSDVersion');
if AOSVer = '5.0' then
if ASP <> 'Service Pack 4' then
AddToLog(A01)
else
begin
IOSVer:=4;
AddToLog(A02);
AddToLog('http://support.microsoft.com/lifecycle/?p1=3071'+#13#10);
noSP:=true;
ICounter:=ICounter+1;
end;
if AOSVer = '5.1' then
if ASP < 'Service Pack 3' then
begin
AddToLog(A03+#13#10);
noSP:=true;
ICounter:=ICounter+1;
end
else
if ASP = 'Service Pack 3' then IOSVer := 13;
if AOSVer = '5.2' then
if ASP < 'Service Pack 2' then
begin
AddToLog(A04);
noSP:=true;
ICounter:=ICounter+1;
end
else
if ASP = 'Service Pack 2' then IOSVer := 22;
if AOSVer = '6.0' then
begin
ASP := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows NT\CurrentVersion','CurrentBuild');
if ASP < '6002' then
begin
if ASP = '6000' then
AddToLog(A05);
if IsWOW64 then
begin
if ASP = '6000' then
AddToLog(A00+'86d267bd-dfcd-47cf-aa76-dc0626dcdf10')
else
AddToLog(A32);
AddToLog(A00+'8ad69826-03d4-488c-8f26-074800c55bc3');
end
else
begin
if ASP = '6000' then
AddToLog(A00+'F559842A-9C9B-4579-B64A-09146A0BA746')
else
AddToLog(A32);
AddToLog(A00+'891ab806-2431-4d00-afa3-99ff6f22448d');
end;
AddToLog('');
noSP:=true;
ICounter:=ICounter+1;
end;
if ASP = '6001' then IOSVer := 31;
if ASP = '6002' then IOSVer := 32;
end;
if AOSVer = '6.1' then
begin
IOSVer := 40;
if IsWOW64 then
begin
SetupAVZ('X64R=NN');
ASP := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows NT\CurrentVersion','CSDVersion');
SetupAVZ('X64R=YY');
end;
if ASP = 'Service Pack 1' then
IOSVer := 41
else
begin
AddToLog(A48);
if IsWOW64 then
AddToLog('http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X64.exe'+#13#10)
else
AddToLog('http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X86.exe'+#13#10);
noSP:=true;
ICounter:=ICounter+1;
end;
end;

if IOSVer = 0 then
exit; // не удалось определить версию SP ОС или ОС не поддреживается
if IsWOW64 then IOSVer := IOSVer + 100;

FS := TFileSearch.Create(nil);

// MS08-067 ссылки на MS12-054
IMinVer := 0;
case IOSVer of
4 : begin IMinVer := 7203; ID:='E22EB3AE-1295-4FE2-9775-6F43C5C2AED3'; end; // MS08-067
13 : begin IMinVer := 5694; ID:='5403c78c-6b87-4788-89c3-0140b887ec6f'; end;
22 : begin IMinVer := 4392; ID:='2847952f-0234-4cf6-820a-1f0a285b2fb7'; end;
122: begin IMinVer := 4392; ID:='3833d768-1dab-4a85-822f-87c7fa3db261'; end;
end;
if IMinVer <> 0 then
if IsFileBuldLow('%System32%\Netapi32.dll', IMinVer) then
begin
AddToLog(A07);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;

// MS11-020, для Windows 7 ссылки на MS11-048
IMinVer := 0;
ID := '';
case IOSVer of
4 : begin IMinVer:=7365; ID:='267ce982-54a0-418f-ad52-e4963610f714'; end; // MS10-012
13 : begin IMinVer:=6082; ID:='CCB08A8A-F4D9-4320-8FFB-3FD4FE217987'; end;
22 : begin IMinVer:=4832; ID:='64C550D4-C927-4382-91E1-473ED6790819'; end;
122: begin IMinVer:=4832; ID:='EF62DB94-4F72-4245-AC9F-6391035E2516'; end;
32 : ID:='D6EDDFF4-A242-4DEC-9D84-72891DB2B754';
132: ID:='2878C587-6544-40B4-9288-FC3B3CE1128D';
41 : ID:='CF9E5ECD-68F7-4982-B4ED-BE80859B757C';
141: ID:='2707650A-604C-4044-ACC4-07A30B5640D8';
end;
AResult:='%System32%\drivers\Srv.sys';
if IsWOW64 then SetupAVZ('X64R=NN');
if FileExists(AResult) and (ID<>'') then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A08);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// MS10-013
IMinVer := 0;
case IOSVer of
4:begin
AResult := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\DirectX','Version');
AResult := Copy(AResult, 3, 2);
if ValidInt(AResult) then
case StrToInt(AResult) of
7: begin IMinVer := 738; ID := '16787c93-2c95-4c13-8492-be1db9d18146'; end;
9: begin IMinVer := 913; ID := '59a8bc19-02bb-4800-bac1-464f59e1cb7b'; end;
end;
end;
13 : begin IMinVer := 5908; ID := '7ab53be3-3f42-4e61-a2bc-3ed41d8736ff'; end;
22 : begin IMinVer := 4625; ID := '983c5484-6321-4765-97ec-8d42d42d1f70'; end;
122: begin IMinVer := 4625; ID := '7dc20252-6091-407b-befc-c25e8f5d3fb0'; end;
end;
if IMinVer <> 0 then
if IsFileBuldLow('%System32%\Quartz.dll', IMinVer) then
begin
AddToLog(A09);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;

// MS14-051 ссылки на MS14-052 rhjvt
ARes := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Internet Explorer','Version');
AResult := Copy(ARes, 1, 1);
if AResult = '9' then
case Copy(ARes, 3, 2) of
'10': AResult := '10';
'11': AResult := '11';
end;
ID := '';
if ValidInt(AResult) then
begin
IEVer:=StrToInt(AResult);
case IEVer of
7: case IOSVer of
22: ID := '3dd813bd-11da-4d9c-b09d-b5236f9fe2e1';
122:ID := 'a90838a2-6cfe-42fc-87df-8633b747c5d9';
end;
8: case IOSVer of
22: ID := '1611d668-d05b-472b-b321-e9c01ffb0c16';
122:ID := 'd80d93bf-eb0b-47fe-a7e7-e0c946b58c83';
end;
9: case IOSVer of
32: ID := 'dbe758a7-b720-4155-9bee-04aad0343d6e';
132:ID := 'e5af2769-859d-4f68-8bb7-9977293cbcf4';
41: ID := 'dc7f0d67-dd86-4ada-931a-395ed4f13400';
141:ID := '392340b1-6c1c-4247-b7a7-ac9ab5a8f5d2';
end;
10: case IOSVer of
41: ID := '25b9735d-9df0-477b-a34f-90c62d2f9c33';
141:ID := '0062d37f-5dc4-44e5-994a-0ac37358fd7b';
end;
11: case IOSVer of // ссылки на MS14-051
41: ID := '6D99E879-DF98-4915-ADD6-99FD1B61A22B';
141:ID := '4365B653-ACFB-4503-91EE-F8C86CD6AF7F';
end;
end;
if ((IEVer=6) or
((IEVer=7) and (IOSVer=13)) or
((IEVer=7) or (IEVer=8)) and ((IOSVer=32) or (IOSVer=132) or (IOSVer=41) or (IOSVer=141))) then
begin
ICounter:=ICounter+1;
if IOSVer=13 then
begin
if bRU = true then
AddToLog('Установите Internet Explorer 8'+#13#10+
'https://ie.yandex.ru/'+#13#10)
else
AddToLog('Install Internet Explorer 8'+#13#10+
'https://ie.yandex.ru/download/?key=en'+#13#10);
end
else
AddToLog(A46+#13#10);
end;

if FS.FindFirst('%System32%\Mshtml.dll') then
if ID <> '' then
begin
if ((FS.FileLastWriteTime begin
case IOSVer of
41: ID := 'http://www.microsoft.com/en-US/download/details.aspx?id=42463';
141:ID := 'http://www.microsoft.com/en-US/download/details.aspx?id=42482';
end;
if bRU then ID := StringReplace(ID, 'en-US', 'ru-ru');
AddToLog(A10);
AddToLog(ID+#13#10);
ICounter:=ICounter+1;
end
else
if (FS.FileLastWriteTime begin
AddToLog(A10);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
end
// ID = ''
else if ((IEVer=8) and (IOSVer=13) and bRU and (FS.FileLastWriteTime begin
AddToLog(A10);
AddToLog('https://cloud.mail.ru/public/84f1304e1c7c/X86-ru-ie8-windowsxp-kb2977629.exe'+#13#10);
ICounter:=ICounter+1;
end;
end;

//http://www.microsoft.com/technet/security/advisory/2458511.mspx
AResult:=NormalFileName('%USERPROFILE%\KB2458511.CSS');
if FileExists(AResult) then
begin
DeleteFile(AResult);
RegKeyParamDel('HKCU','Software\Microsoft\Internet Explorer\Styles','User Stylesheet');
RegKeyIntParamWrite('HKCU','Software\Microsoft\Internet Explorer\Styles','Use My Stylesheet',0);
AResult:=NormalFileName('%USERPROFILE%\CSS-backup.reg');
if FileExists(AResult) then
begin
ExecuteFile('Regedit.exe','/c "'+AResult+'"',0,5000,true);
DeleteFile(AResult);
end;
end;

// MS13-090
ID := '';
if NoKillBit('{19916e01-b44e-4e31-94a4-4696df46157b}') then
begin
case IOSVer of
13: ID := '60906192-8a5b-459a-b8e5-6b65f1da5799';
22: ID := 'a36d3168-c5b4-4cba-874e-32abf387b54a';
122: ID := 'fddbd288-827e-4d04-ba30-1f044a168ee0';
32: ID := 'b35f44ce-4af5-4be2-9e45-f400d0d3f21b';
132: ID := '8c691d27-9cb2-4695-97da-d86b62e10835';
41: ID := '787d0729-a3c5-4312-a30e-5a211a22de77';
141: ID := 'dd7cc36b-bb4e-4548-8d9c-43c6dd6cb78e';
end;
if ID <> '' then
begin
AddToLog(A11);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
end;

// MS10-042
IMinVer := 0;
case IOSVer of
13 : begin IMinVer := 5997; ID := '7C2122BB-0ECF-4467-A3BA-6FB862F603C5'; end;
22 : begin IMinVer := 4726; ID := 'CD4363B2-D7A7-4FFF-8BCD-6FD02BD1AC07'; end;
122: begin IMinVer := 4726; ID := 'A6BAFD3B-C921-466D-BEE0-59A3FE126712'; end;
end;
if IMinVer <> 0 then
begin
if IsFileBuldLow('%SystemRoot%\PCHEALTH\HELPCTR\Binaries\Helpsvc.exe', IMinVer) then
begin
AddToLog(A12);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end
else if not RegKeyExists('HKCR','HCP\shell') then
RegKeyParamWrite('HKCR','HCP\shell\open\command','','REG_EXPAND_SZ',
'%SystemRoot%\PCHEALTH\HELPCTR\Binaries\HelpCtr.exe -FromHCP -url "%1"');
end;

// http://securitytracker.com/alerts/2007/Oct/1018843.html
SetKillBit('{FDC7A535-4070-4B92-A0EA-D9994BCC0DC5}');

// MS11-006
ID := '';
case IOSVer of
13 : ID := 'BBEA7EAD-6C5C-4DA8-AA03-A40325FD2DE3';
22 : ID := '2AA94528-5063-427B-97F7-2A0A55CBB6BF';
122: ID := '6E740922-6CE4-46EC-A35E-E94201A9E398';
32 : ID := '0C18ECCA-AFB9-4738-BC7B-76A0E815DFB8';
132: ID := '62DC454F-4B1E-4AC0-8FFE-6C73112F8D4D';
end;
if ID <> '' then
if FS.FindFirst('%System32%\Shell32.dll') then
if FS.FileLastWriteTime begin
AddToLog(A31);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;

// MS10-061
if IOSVer = 13 then
begin
if IsFileBuldLow('%System32%\Spoolsv.exe', 6024) then
begin
AddToLog(A30);
AddToLog(A00+'93FABA6B-0A85-4ACC-B527-A012BBF56B13'+#13#10);
ICounter:=ICounter+1;
end;
end;

// KB971029
IMinVer := 0;
ID := '';
case IOSVer of
13 : begin IMinVer:=5853; ID:='96ca61f6-8b16-4157-9635-8cfc0bbf4c35'; end;
22 : begin IMinVer:=4559; ID:='edf9c049-bf1e-4130-87e6-0e64fa73f684'; end;
122: begin IMinVer:=4559; ID:='b8df9256-cbb0-418d-a336-d29dc4415a65'; end;
32 : ID:='dd6a61a3-b3c6-4b0a-a848-7b32be9f31c5';
132: ID:='12e3fe0f-db79-4a27-aa7d-a456ee1c6ac4';
end;
AResult:='%System32%\Shsvcs.dll';
if IsWOW64 then SetupAVZ('X64R=NN');
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A33);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// MS11-087 ссылки на MS12-034
IMinVer := 0;
ID := '';
case IOSVer of
13 : begin IMinVer:=6178; ID:='8d341077-8fcd-4666-a27e-2141a04a321e'; end;
22 : begin IMinVer:=4938; ID:='6287b994-041f-45b7-a230-d689bf1901a8'; end;
122: begin IMinVer:=4938; ID:='f9f49cd0-24db-4438-afde-aa7113ec2035'; end;
32 : ID:='292d1f3b-a065-4d7d-9046-f35ab7f0591b';
132: ID:='8f90c09c-a2cb-4adb-ace7-a8bc38d78ba6';
41 : ID:='572af8d4-effb-41a6-8448-7576b03f18fd';
141: ID:='c09cbb73-7814-4946-8c0a-323d304dd633';
end;
AResult:='%System32%\Win32k.sys';
if IsWOW64 then SetupAVZ('X64R=NN');
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A35);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// MS10-092
ID := '';
case IOSVer of
32 : ID:='48F10251-34D8-4149-B4B2-BF3EC28F5846';
132: ID:='099CCC5F-B92F-4D06-BCB5-92E35C49F613';
41 : ID:='CF85CDB6-58C7-4144-82F6-F01A6A4F9C3A';
141: ID:='0597018D-39F5-4CA9-B437-63D9E68F264D';
end;
if ID<>'' then
begin
AResult:='%System32%\Taskeng.exe';
if IsWOW64 then SetupAVZ('X64R=NN');
if FileExists(AResult) then
if FS.FindFirst(AResult) then
if FS.FileLastWriteTime begin
AddToLog(A36);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// MS11-011
IMinVer := 0;
ID := '';
case IOSVer of
13 : begin IMinVer:=6055; ID:='A511D33A-9AE0-46EE-A225-9D97390DE7D1'; end;
22 : begin IMinVer:=4789; ID:='6BF2EEEC-8225-477F-A606-263D3EE434D6'; end;
122: begin IMinVer:=4789; ID:='EC544894-EE98-4A2B-AC4D-33B0C3754213'; end;
32 : ID:='66978514-BB7F-42CC-9360-2FD1C686F4E6';
132: ID:='8FDB8C37-1B22-457B-BDC0-21F6A5061DD3';
end;
AResult:='%System32%\Ntdll.dll';
if IsWOW64 then SetupAVZ('X64R=NN');
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A37);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// MS12-004
IMinVer := 0;
ID := '';
case IOSVer of
13 : begin IMinVer:=6160; ID:='a142f7ba-4268-4453-a8eb-470213c028ac'; end;
22 : begin IMinVer:=4916; ID:='3c266dfb-630d-4f32-b2ca-63955279b6a9'; end;
122: begin IMinVer:=4916; ID:='8dd1c882-4ed1-4e47-a017-7d162bd94194'; end;
32 : ID:='99d9b9fc-ed37-4a32-a20d-6604a1b9c4ca';
132: ID:='44aa8d91-2b30-4191-8965-8aee2b860d50';
end;
AResult:='%System32%\Winmm.dll';
if IsWOW64 then SetupAVZ('X64R=NN');
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A38);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// KB2718704
URL := '';
IMinVer := 0;
case IOSVer of
13 : IMinVer := 6237;
22 : IMinVer := 5012;
122 : IMinVer := 5012;
end;
if bRU then
case IOSVer of
13 : URL := 'http://www.microsoft.com/ru-ru/download/details.aspx?id=29975 (требуется лицензионный Windows) или'+#13#10+
'http://download.microsoft.com/download/1/1/A/11A221A6-953C-40E1-87CD-2A4CD98224C4/WindowsXP-KB2718704-x86-RUS.exe';
22 : URL := 'http://www.microsoft.com/ru-ru/download/details.aspx?id=29971 (требуется лицензионный Windows) или'+#13#10+
'http://download.microsoft.com/download/1/7/3/1733DB6F-F10B-4C25-94EF-FAD7BAAD81ED/WindowsServer2003-KB2718704-x86-RUS.exe';
122 : URL := 'http://www.microsoft.com/ru-ru/download/details.aspx?id=29976 (требуется лицензионный Windows) или'+#13#10+
'http://download.microsoft.com/download/B/D/6/BD6FA68A-2A23-476B-8CFC-F1D03118D96F/WindowsServer2003.WindowsXP-KB2718704-x64-RUS.exe';
end
else
case IOSVer of
13 : URL := 'http://www.microsoft.com/en-us/download/details.aspx?id=29975';
22 : URL := 'http://www.microsoft.com/en-us/download/details.aspx?id=29971';
122 : URL := 'http://www.microsoft.com/en-us/download/details.aspx?id=29976';
end;
if URL <>'' then
begin
AResult:='%System32%\Crypt32.dll';
if FileExists(AResult) then
if (IMinVer>0) and IsFileBuldLow(AResult, IMinVer) then
begin
AddToLog(A42);
AddToLog(URL+#13#10);
ICounter:=ICounter+1;
end;
end;
AFName := '';
case IOSVer of
32 : begin AFName :='X86_13f66e81425ab9718ea16821324e3faa_31bf3856ad364e35_6.0.6002.18642_none_4b3c196b981fe80c.manifest';
URL :='http://download.microsoft.com/download/D/7/A/D7A4C58C-A0E8-4CD7-A405-36C787637474/Windows6.0-KB2718704-x86.msu'; end;
132: begin AFName :='X86_microsoft-windows-capi2-certs_31bf3856ad364e35_6.0.6002.18642_none_c44bff19916a7786.manifest';
URL :='http://download.microsoft.com/download/7/3/1/731F9EE8-438E-4411-A994-2D0A1443501F/Windows6.0-KB2718704-x64.msu'; end;
41 : begin AFName :='x86_microsoft-windows-capi2-certs_31bf3856ad364e35_6.1.7601.22008_none_c52e70d60b79c688.manifest';
URL :='http://download.microsoft.com/download/4/1/3/413A9B3D-DC56-4DD8-8944-9B0DB0CC8025/Windows6.1-KB2718704-x86.msu'; end;
141: begin AFName :='amd64_4677e27d20f74740fec514c660d10fa4_31bf3856ad364e35_6.1.7601.22008_none_d851475c9cba0cdf.manifest';
URL :='http://download.microsoft.com/download/1/7/8/1787B87D-5DA3-44EF-A393-F15BF8EA3FBF/Windows6.1-KB2718704-x64.msu'; end;
end;
if AFName<>'' then
begin
if IsWow64 then
SetupAVZ('X64R=NN');
AResult := NormalFileName('%windir%\winsxs\Manifests\'+AFName);
if not FileExists(AResult) then
begin
AddToLog(A42);
AddToLog(URL+#13#10);
ICounter:=ICounter+1;
end;
if IsWow64 then
SetupAVZ('X64R=YY');
end;

// MS12-043 частично ссылки на MS13-002
ID := '';
case IOSVer of
13 : ID:='017f1ed7-eed4-4de3-aca1-93fb25058866';
22 : ID:='b7321c17-0e8e-4217-8da6-4c270dbfc802';
122: ID:='29985fdc-8aba-44b2-9420-970ca475052e';
32 : ID:='f8ccdb90-66bd-471a-9c78-825d1140b5ac';
132: ID:='873eba5d-5a8f-410e-bad8-e9d538acf1b3';
41 : ID:='d8a4817c-481c-4ed2-980a-21623f0ca6d2';
141: ID:='4b442601-2808-4192-aa7d-b6476668cd23';
end;
AResult:='%System32%\Msxml3.dll';
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if (FS.FileLastWriteTime begin
AddToLog(A43);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;

ID := '';
case IOSVer of
13 : ID:='1e2738b9-d3c2-4dfe-8a79-335d5feee55b';
22 : ID:='1e2738b9-d3c2-4dfe-8a79-335d5feee55b';
122: ID:='7dabf372-4b31-4c9e-a660-4e0f4a65db04';
32 : ID:='1e2738b9-d3c2-4dfe-8a79-335d5feee55b';
132: ID:='7dabf372-4b31-4c9e-a660-4e0f4a65db04';
41 : ID:='1e2738b9-d3c2-4dfe-8a79-335d5feee55b';
141: ID:='7dabf372-4b31-4c9e-a660-4e0f4a65db04';
end;
AResult:='%System32%\Msxml4.dll';
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if (FS.FileLastWriteTime begin
AddToLog(A43);
AddToLog('http://www.microsoft.com/downloads/details.aspx?FamilyID='+ID);
if (IOSVer > 30) and (IOSVer <> 122) then AddToLog(A45);
AddToLog('');
ICounter:=ICounter+1;
end;

ID := '';
case IOSVer of
22 : ID:='3b56ba48-b74c-4681-8e17-715dc5d45e2c';
122: ID:='0b13a83c-1e51-4604-a09d-afb2e25646f9';
end;
AResult:='%System32%\Msxml6.dll';
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if (FS.FileLastWriteTime begin
AddToLog(A43);
AddToLog('http://www.microsoft.com/downloads/details.aspx?FamilyID='+ID+#13#10);
ICounter:=ICounter+1;
end;

// MS13-053 ссылки на KB2883150 из MS13-081
IMinVer := 0;
ID := '';
case IOSVer of
13 : begin IMinVer:=6404; ID:='7cb5e134-451c-4d20-919e-abc147ca8f5f'; end;
22 : begin IMinVer:=5174; ID:='a52c08e5-42dd-4f76-8fff-5a8b990b1878'; end;
122: begin IMinVer:=5174; ID:='adecac41-2842-43c2-9a3a-50c8d7d17e8d'; end;
32 : ID:='5b0032fe-b02f-4726-87df-4500c525803f';
132: ID:='6cc0ad94-a881-42ab-84e2-d1ca67808b37';
41 : ID:='f286c69b-b83e-4c42-be9a-99d648dd5e12';
141: ID:='d0d8e289-2c71-4b40-9a1f-de2501c8d40e';
end;
AResult:='%System32%\Win32k.sys';
if IsWOW64 then
SetupAVZ('X64R=NN');
if ID<>'' then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A49);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then
SetupAVZ('X64R=YY');

// MS13-096
ID := '';
case IOSVer of
32 : ID:='fd0f3c4d-a741-44ef-b566-29ed95ae9228';
132: ID:='420c49f6-65aa-41b5-9f34-1f0384f6c394';
end;
AResult:='%System32%\Gdiplus.dll';
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if (FS.FileLastWriteTime begin
AddToLog(A50);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;

// MS14-002
ID := '';
case IOSVer of
13 : ID:='6cae1016-419a-47ab-9765-b4c1d7c0865c';
22 : ID:='6d50f851-4be3-413f-b02d-b5b6a3f49fb4';
122: ID:='69966ceb-a9c9-4aa7-b685-78562c96640f';
end;
AResult:='%System32%\drivers\NDProxy.sys';
if IsWOW64 then SetupAVZ('X64R=NN');
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if (FS.FileLastWriteTime begin
AddToLog(A51);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

FS.Free;
end;

Function NoKillBit(CLSID: string) : boolean;
begin
Result:=RegKeyExists('HKCR','CLSID\'+CLSID) and
not RegKeyExists('HKLM','SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\'+CLSID);
end;

Procedure SetKillBit(CLSID: string);
begin
if NoKillBit(CLSID) then
RegKeyIntParamWrite('HKLM','SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\'+CLSID,'Compatibility Flags', 1024);
end;

Function GetFileLastWriteTime(AFName: string) : TDateTime;
var
FS : TFileSearch;
begin
FS := TFileSearch.Create(nil);
if FS.FindFirst(AFName) then
Result := FS.FileLastWriteTime;
FS.Free;
end;

Procedure MSOffice;
var
AFName, AResult : string;
MSCOMCTL_old, Gdiplus_old : boolean;
begin
// Уязвимость элемента ActiveX средства просмотра снимков Microsoft Access делает возможным удаленное выполнение кода
// MS08-041
SetKillBit('{F0E42D50-368C-11D0-AD81-00A0C90DC8D9}');
SetKillBit('{F0E42D60-368C-11D0-AD81-00A0C90DC8D9}');
SetKillBit('{F2175210-368C-11D0-AD81-00A0C90DC8D9}');

// Уязвимости в веб-компонентах Microsoft Office делают возможным удаленное выполнение кода
// MS09-043
SetKillBit('{0002E543-0000-0000-C000-000000000046}');
SetKillBit('{0002E55B-0000-0000-C000-000000000046}');
SetKillBit('{0002E541-0000-0000-C000-000000000046}');
SetKillBit('{0002E559-0000-0000-C000-000000000046}');
SetKillBit('{0002E512-0000-0000-C000-000000000046}');
SetKillBit('{0002E510-0000-0000-C000-000000000046}');
SetKillBit('{0002E511-0000-0000-C000-000000000046}');
SetKillBit('{0002E533-0000-0000-C000-000000000046}');
SetKillBit('{0002E530-0000-0000-C000-000000000046}');

// MS12-060 ссылки на MS14-024
AFName := NormalFileName('%System32%\MSCOMCTL.OCX');
MSCOMCTL_old := isFileBuldLow(AFName,9834);

// MS13-096
// Office 2010
if RegKeyExists('HKLM','SOFTWARE\Microsoft\Office\14.0\Common\InstalledPackages') then
begin
AResult := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\14.0\Common\ProductVersion','LastProduct');
AFName:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot','Path')+'Ogl.dll';
if MSCOMCTL_old then
begin
AddToLog(A40+#13#10+A00+'7f19e755-7fd3-41ba-9b7c-befdbce457cb');
if AResult < '14.0.6029.1000' then
AddToLog(A44);
ICounter:=ICounter+1;
AddToLog('');
end;
if FileExists(AFName) then
if GetFileLastWriteTime(AFName) < StrToDateTime(D12) then
begin
AddToLog(A50+#13#10+A00+'082ac73e-fcc9-46ac-b888-5c248a64a117');
if AResult < '14.0.6029.1000' then
AddToLog(A44);
ICounter:=ICounter+1;
AddToLog('');
end;
end
else
// Office 2003
if RegKeyParamExists('HKLM','SOFTWARE\Microsoft\Office\11.0\Common\InstallRoot','Path') then
begin
AResult := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\11.0\Common\ProductVersion','LastProduct');
AFName:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\11.0\Common\InstallRoot','Path')+'Gdiplus.dll';
if MSCOMCTL_old then
begin
AddToLog(A40+#13#10+A00+'fd9626f7-4265-48ae-94b2-68243605db6b');
if AResult < '11.0.8173.0' then
AddToLog(A41+'3'+#13#10+A00+'e25b7049-3e13-433b-b9d2-5e3c1132f206');
ICounter:=ICounter+1;
AddToLog('');
end;
if FileExists(AFName) then
if GetFileLastWriteTime(AFName) < StrToDateTime(D12) then
begin
AddToLog(A50+#13#10+A00+'bfc3b881-4b95-4a22-998d-048487406d4f');
if AResult < '11.0.8173.0' then
AddToLog(A41+'3'+#13#10+A00+'e25b7049-3e13-433b-b9d2-5e3c1132f206');
ICounter:=ICounter+1;
AddToLog('');
end;
end
else
// Office 2007
if RegKeyParamExists('HKLM','SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot','Path') then
begin
AResult := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\12.0\Common\ProductVersion','LastProduct');
AFName:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot','Path')+'OGL.DLL';
if MSCOMCTL_old then
begin
AddToLog(A40+#13#10+A00+'afdb9c83-07e7-4280-94a7-125e0e7320ae');
if AResult < '12.0.6425.1000' then
AddToLog(A41+'7'+#13#10+A00+'0E40BBE7-1422-40EA-912D-2A29D709F93F');
ICounter:=ICounter+1;
AddToLog('');
end;
if FileExists(AFName) then
if GetFileLastWriteTime(AFName) < StrToDateTime(D12) then
begin
AddToLog(A50+#13#10+A00+'3d373aba-eec3-4b76-ae95-9270a82e2e7e');
if AResult < '12.0.6425.1000' then
AddToLog(A41+'7'+#13#10+A00+'0E40BBE7-1422-40EA-912D-2A29D709F93F');
ICounter:=ICounter+1;
AddToLog('');
end;
end;
end;

Procedure AdobeFlashVuln;
var
AResult : string;
i : integer;
Plugin64Old, AX64old : boolean;
begin
// x64
Plugin64Old := false;
AX64old := false;
if IsWow64 then
begin
SetupAVZ('X64R=NN');
AResult := RegKeyStrParamRead('HKCR','CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}\InprocServer32','');
if AResult <> '' then
begin
AResult := GetFileVersion(AResult, 6);
if IsFlashOld(AResult) then
AX64old := true;
end;
AResult := RegKeyStrParamRead('HKLM','SOFTWARE\MozillaPlugins\@adobe.com/FlashPlayer','Version');
if AResult <> '' then
if IsFlashOld(AResult) then
Plugin64Old := true;
SetupAVZ('X64R=YY');
end;

// x86
AResult := RegKeyStrParamRead('HKLM',
'SOFTWARE\Classes\CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}\InprocServer32','');
AResult := GetFileVersion(AResult, 6);
if (IOSVer>4) and (AX64Old or IsFlashOld(AResult)) then
begin
AddToLog(A14);
AddToLog('http://download.macromedia.com/get/flashplayer/current/licensing/win/install_flash_player_17_active_x.exe'+#13#10);
ICounter:=ICounter+1;
end;

AResult := RegKeyStrParamRead('HKLM',
'SOFTWARE\MozillaPlugins\@adobe.com/FlashPlayer','Version');
if Plugin64Old or IsFlashOld(AResult) then
begin
AddToLog(A15);
AddToLog('http://download.macromedia.com/get/flashplayer/current/licensing/win/install_flash_player_17_plugin.exe'+#13#10);
ICounter:=ICounter+1;
end;
end;

function IsFlashOld(AFlVer: string) : boolean;
var
AVer, ABuild : string;
DotPos : integer;
begin
Result := true;
AFlVer := StringReplace(AFlVer, ',', '.');
AVer := Copy(AFlVer, 1, 2);
DotPos := Pos('.', AFlVer);
AFlVer := Copy(AFlVer, DotPos+1, Length(AFlVer)-DotPos);
DotPos := Pos('.', AFlVer);
AFlVer := Copy(AFlVer, DotPos+1, Length(AFlVer)-DotPos);
DotPos := Pos('.', AFlVer);
ABuild := Copy(AFlVer, DotPos+1, Length(AFlVer)-DotPos);
AFlVer := NormalizeDot(AFlVer);
if ValidFloat(AFlVer) then
case AVer of
'13' : if StrToFloat(AFlVer) > 0 then //13.0.0.206
if ValidInt(ABuild) then
if (StrToFloat(AFlVer) > 1) or (StrToInt(ABuild) >= 206) then Result:=false;
end
else
Result:=false;
if ValidInt(AVer) then
if StrToInt(AVer) > 13 then Result:=false;
end;

Procedure AdobeReaderVuln;
var
ARes, AVer, AMinVer, CVer, AKey, AExe, ASubVer : string;
ISubVer, IMinSubVer : integer;
begin
ARes:='';
if RegKeyExists('HKCR','CLSID\{06849E9F-C8D7-4D59-B87D-784B7D6BE0B3}')
then ARes:='06849E9F-C8D7-4D59-B87D-784B7D6BE0B3'
else if RegKeyExists('HKCR','CLSID\{18DF081C-E8AD-4283-A596-FA578C2EBDC3}')
then ARes:='18DF081C-E8AD-4283-A596-FA578C2EBDC3';
if ARes = '' then exit;
ARes := RegKeyStrParamRead('HKCR','CLSID\{'+ARes+'}\InprocServer32','');
if not FileExists(ARes) then exit;
AVer := GetFileVersion(ARes, 6);
AMinVer := '';
CVer := Copy(AVer, 1, 2);
if (CVer[2]='.') or (CVer[2]=',') then CVer:=CVer[1];
if ValidInt(CVer) then
begin
case StrToInt(CVer) of
11: begin AMinVer := '11.0.08'; IMinSubVer := 8; end;
10: begin AMinVer := '10.1.11'; IMinSubVer := 11; end;
end;
if StrToInt(CVer) > 11 then exit;
end
else exit;
AExe := RegKeyStrParamRead('HKCR','Software\Adobe\Acrobat\Exe','');

if Pos('acrobat.exe',LowerCase(AExe)) > 0 then
begin
if AMinVer = '' then
begin
AddToLog(A16+#13#10);
ICounter:=ICounter+1;
end
else
begin
ARes:=RegKeyStrParamRead('HKLM','SOFTWARE\Adobe\Adobe Acrobat\'+CVer+'.0\Installer','ENU_GUID');
AVer:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'+ARes,'DisplayVersion');
if Length(AVer) > 5 then
begin
ASubVer := Copy(AVer, 6, 2);
if ValidInt(ASubVer) then ISubVer := StrToInt(ASubVer);
end
else ISubVer := 0;

if ISubVer begin
AddToLog(A17 + AVer + A18 + AMinVer);
AddToLog(''); ICounter:=ICounter+1;
end;
end;
end else
begin
if AMinVer = '' then
begin
AddToLog(A19);
AddToLog('http://get.adobe.com/reader/otherversions'+#13#10);
ICounter:=ICounter+1;
end else
begin
ARes:=RegKeyStrParamRead('HKLM','SOFTWARE\Adobe\Acrobat Reader\'+CVer+'.0\Installer','ENU_GUID');
AVer:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'+ARes,'DisplayVersion');
if Length(AVer) > 5 then
begin
ASubVer := Copy(AVer, 6, 2);
if ValidInt(ASubVer) then ISubVer := StrToInt(ASubVer);
end
else ISubVer := 0;

if ISubVer begin
AddToLog(A20 + AVer + A18 + AMinVer);
if CVer='11' then
begin
if AVer < '11.0.08' then
AddToLog('http://ardownload.adobe.com/pub/adobe/reader/win/11.x/11.0.09/misc/AdbeRdrUpd11009.msp');
end;
if CVer='10' then
begin
if AVer<'10.1' then
begin
AddToLog(A19);
AddToLog('http://get.adobe.com/reader/otherversions/');
end
else
begin
if ISubVer < 11 then
AddToLog('http://ardownload.adobe.com/pub/adobe/reader/win/10.x/10.1.12/misc/AdbeRdrUpd10112.msp');
end;
end;
if CVer='9' then
begin
AddToLog(A19);
AddToLog('http://get.adobe.com/reader/otherversions/');
end;
AddToLog(''); ICounter:=ICounter+1;
end;
end;
end;
end;

Procedure FireFoxVuln;
var
AResult,AVer,AFile:string;
Ver:integer;
FFIsOut:boolean;
begin
if RegKeyExists('HKCU','SOFTWARE\Mozilla\Mozilla Firefox') then
begin
AResult:=RegKeyStrParamRead('HKCU','SOFTWARE\Mozilla\Mozilla Firefox','');
AFile:=RegKeyStrParamRead('HKCU','SOFTWARE\Mozilla\Mozilla Firefox '+AResult+'\bin','PathToExe');
end
else if RegKeyExists('HKLM','SOFTWARE\Mozilla\Mozilla Firefox') then
begin
AResult:=RegKeyStrParamRead('HKLM','SOFTWARE\Mozilla\Mozilla Firefox','');
if not RegKeyExists('HKLM','SOFTWARE\Mozilla\Mozilla Firefox'+AResult) then
AResult:=RegKeyStrParamRead('HKLM','SOFTWARE\Mozilla\Mozilla Firefox','CurrentVersion');
AFile:=RegKeyStrParamRead('HKLM','SOFTWARE\Mozilla\Mozilla Firefox '+AResult+'\bin','PathToExe');
if AFile = '' then
AFile:=RegKeyStrParamRead('HKLM','SOFTWARE\Mozilla\Mozilla Firefox\'+AResult+'\Main','PathToExe');
end
else exit;
AResult := GetFileVersion(AFile, 6);
AVer := Copy(AResult, 1, Pos('.', AResult)-1);
if ValidInt(AVer) then Ver:=StrToInt(AVer) else exit;
FFIsOut:=true;
if (Ver = 17)and((AResult >= '17.0.7')or(AResult = '17.0.10')or(AResult = '17.0.11')) then FFIsOut:=false
else if Ver >= 22 then FFIsOut:=false;
if FFIsOut then
begin
AddToLog('Firefox '+AResult+A22);
AddToLog('http://www.mozilla.com/'+#13#10);
ICounter:=ICounter+1;
end;
end;

Procedure JavaVuln;
var
ARes, ABuld : string;
JavaIsOut:boolean;
IPos: Integer;
begin
ARes := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Runtime Environment','CurrentVersion');
JavaIsOut:=false;
ABuld := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Runtime Environment','BrowserJavaVersion');
if ABuld='' then
ABuld := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Web Start','CurrentVersion')
else if ARes='' then ARes := copy(ABuld, 1, 3);

IPos := Pos('.', ABuld);
Delete(ABuld, 1, IPos);
ABuld := NormalizeDot(ABuld);
case ARes of
'1.8': begin
if ValidFloat(ABuld) then
if StrToFloat(ABuld) < 5 then
JavaIsOut:=true;
end;
'1.7': begin
if ValidFloat(ABuld) then
if StrToFloat(ABuld) < 55 then
JavaIsOut:=true;
end;
'1.6': JavaIsOut:=true;
'1.5': JavaIsOut:=true;
'1.4': JavaIsOut:=true;
end;
if JavaIsOut then
begin
AddToLog(A23);
AddToLog(A24+#13#10);
ICounter:=ICounter+1;
end;

if IsWow64 then
begin
SetupAVZ('X64R=NN');
ARes := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Runtime Environment','CurrentVersion');
JavaIsOut:=false;
ABuld := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Runtime Environment','BrowserJavaVersion');
if ABuld='' then
ABuld := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Web Start','CurrentVersion');
IPos := Pos('.', ABuld);
Delete(ABuld, 1, IPos);
ABuld := NormalizeDot(ABuld);
case ARes of
'1.8': begin
if ValidFloat(ABuld) then
if StrToFloat(ABuld) < 5 then
JavaIsOut:=true;
end;
'1.7': begin
if ValidFloat(ABuld) then
if StrToFloat(ABuld) < 55 then
JavaIsOut:=true;
end;
'1.6': JavaIsOut:=true;
end;
if JavaIsOut then
begin
A23 := StringReplace(A23,'32','64');
AddToLog(A23);
AddToLog(A24+#13#10);
ICounter:=ICounter+1;
end;
SetupAVZ('X64R=YY');
end;
end;

Procedure OperaVuln;
var
AResult,AVer:string;
cVer:char;
iPos:integer;
begin
AResult:=RegKeyStrParamRead('HKLM','SOFTWARE\Opera Software','Last CommandLine v2');
if AResult = '' then
AResult:=RegKeyStrParamRead('HKCU','SOFTWARE\Opera Software','Last CommandLine v2');
if AResult = '' then exit;
iPos := Pos('.exe', AResult);
AResult := Copy(AResult, 1, iPos+4);
AVer := GetFileVersion(AResult, 6);
AVer := NormalizeDot(AVer);
if ValidFloat(AVer) then
if StrToFloat(AVer) < 12.10 then
begin
AddToLog('Opera '+AVer+A25);
AddToLog('http://www.opera.com/browser/download'+#13#10);
ICounter:=ICounter+1;
end;
end;

Procedure QuickTimeVuln;
var
AResult, AVer :string;
begin
AResult:=RegKeyStrParamRead('HKCR','CLSID\{02BF25D5-8C17-4B23-BC80-D3488ABDDC6B}\InprocServer32','');
if not FileExists(AResult) then exit;
AVer:=GetFileVersion(AResult,3);
Delete(AVer,7,7);
if AVer<'7.6.8' then
begin
AddToLog('QuickTime '+AVer+A22);
AddToLog('http://www.apple.com/quicktime/download'+#13#10);
ICounter:=ICounter+1;
end;
end;

Procedure SilverlightVuln;
var
AVer :string;
begin
AVer:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Silverlight','Version');
if (AVer<>'') and (AVer<'5.1.20913.0') then
begin
AddToLog('Microsoft Silverlight '+AVer+A22);
AddToLog('http://www.microsoft.com/getsilverlight/handlers/getsilverlight.ashx'+#13#10);
ICounter:=ICounter+1;
end;
end;

begin
ClearLog;
if GetAVZVersion<4.39 then begin
ShowMessage('Для этого скрипта требуется AVZ версии 4.39 или старше.'); Exit; end;
if TranslateStr('$AVZ0075')='DLLs' then
begin
bRU := false;
A00:='http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=';
A01:='Install Service Pack 4 for Windows 2000';
A02:='Windows 2000 lifecycle ended';
A03:='Install Service Pack 3 for Windows XP';
A04:='Install Service Pack 2 for Windows 2003';
A05:='Install Windows Vista Service Pack 1 and 2';
A06:='Search for critical vulnerabilities';
A07:='Vulnerability in Server Service Could Allow Remote Code Execution';
A08:='Vulnerabilities in SMB Server Could Allow Remote Code Execution';
A09:='Vulnerability in Microsoft DirectShow Could Allow Remote Code Execution';
A10:='Cumulative Security Update for Internet Explorer';
A11:='Cumulative Security Update of ActiveX Kill Bits';
A12:='Vulnerability in Help and Support Center Could Allow Remote Code Execution';
A13:='Vulnerability in Windows Shell Could Allow Remote Code Execution';
A14:='Vulnerabilities in Adobe Flash Player for Internet Explorer';
A15:='Vulnerabilities in Adobe Flash Player for Firefox/Safari/Opera';
A16:='Install Adobe Acrobat XI or uninstall vulnerable';
A17:='Adobe Acrobat ';
A18:='installed. Too dangerous to use the version below ';
A19:='Install Adobe Reader XI (11.0) or uninstall vulnerable.';
A20:='Adobe Reader ';
A21:='Install Adobe XI (11.0)';
A22:=' vulnerable. Uninstall it or install actual one';
A23:='Vulnerabilities in Java JDK and JRE (32-bit). Uninstall it and install actual one:';
A24:='http://www.java.com/en/download/manual.jsp';
A25:=A22;
A26:='Frequently used critical vulnerabilities not found.';
A27:='Vulnerabilities found: ';
A28:='Log saved in subfolder Log';
A29:='Log saved in c:\avz_log.txt file';
A30:='Vulnerability in Print Spooler Service Could Allow Remote Code Execution';
A31:='Vulnerability in Windows Shell Graphics Processing could allow remote code execution';
A32:='Install Windows Vista Service Pack 2';
A33:='Update to the AutoPlay functionality in Windows';
A34:='';
A35:='Vulnerability in Windows Kernel-Mode Drivers Could Allow Remote Code Execution';
A36:='Vulnerability in Task Scheduler Could Allow Elevation of Privilege';
A37:='Vulnerabilities in Windows Kernel Could Allow Elevation of Privilege';
A38:='Vulnerabilities in Windows Media Could Allow Remote Code Execution';
A39:='dozens.';
A40:='Vulnerability in Windows Common Controls Could Allow Remote Code Execution';
A41:='This update require the SP3 installed on Office 200';
A42:='Unauthorized Digital Certificates Could Allow Spoofing';
A43:='Vulnerability in Microsoft XML Core Services Could Allow Remote Code Execution';
A44:='This update require the SP2 installed on Office 2010'+#13#10+
'http://www.microsoft.com/en-US/download/details.aspx?id=39667';
A45:='Run Update as Administrator';
A46:='Install new Internet Explorer'+#13#10+
'http://windows.microsoft.com/en-US/internet-explorer/download-ie';
A47:='Vulnerability in Microsoft Office Could Allow Remote Code Execution';
A48:='Install Windows 7 Service Pack 1';
A49:='Vulnerabilities in Windows kernel-mode drivers could allow remote code execution';
A50:='Vulnerability in Microsoft Graphics component could allow remote code execution';
A51:='Vulnerability in Windows kernel could allow elevation of privilege';
end else
begin
bRU := true;
A00:='http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=';
A01:='Установите Service Pack 4 для Windows 2000';
A02:='Жизненный цикл Windows 2000 закончился';
A03:='Установите Service Pack 3 для Windows XP. Возможно, потребуется активация.';
A04:='Установите Service Pack 2 для Windows 2003';
A05:='Установите Service Pack 1 и 2 для Windows Vista. Возможно, потребуется активация.';
A06:='Поиск критических уязвимостей';
A07:='Уязвимость службы сервера делает возможным удаленное выполнение кода';
A08:='Уязвимости в протоколе SMB делают возможным удаленное выполнение кода';
A09:='Уязвимости в Microsoft DirectShow делают возможным удаленное выполнение кода';
A10:='Накопительное обновление безопасности для браузера Internet Explorer';
A11:='Накопительное обновление системы безопасности для битов аннулирования ActiveX';
A12:='Уязвимость в Центре справки и поддержки Windows';
A13:='Уязвимость оболочки Windows делает возможным удаленное выполнение кода';
A14:='Уязвимости в Adobe Flash Player для Internet Explorer';
A15:='Уязвимости в Adobe Flash Player для Firefox/Safari/Opera';
A16:='Установите Adobe Acrobat XI или удалите старый';
A17:='Установлен Adobe Acrobat версии ';
A18:='. Опасно использовать версии до ';
A19:='Установите Adobe Reader XI (11.0) или удалите старый.';
A20:='Установлен Adobe Reader версии ';
A22:=' устарел. Удалите его или установите новый';
A21:='Установите Adobe Reader XI (11.0)';
A23:='Множественные уязвимости в Java JDK и JRE (32-разрядная версия). Деинсталлируйте старую версию. Установите новую, если Java вам нужна:';
A24:='http://www.java.com/ru/download/manual.jsp';
A25:=' устарела. Удалите её или установите новую';
A26:='Часто используемые уязвимости не обнаружены.';
A27:='Обнаружено уязвимостей: ';
A28:='Протокол сохранён в под-папке Log';
A29:='Протокол сохранён в файле c:\avz_log.txt';
A30:='Уязвимость в службе диспетчера очереди печати делает возможным удаленное выполнение кода';
A31:='Уязвимость обработки графики в оболочке Windows делает возможным удаленное выполнение кода';
A32:='Установите Service Pack 2 для Windows Vista. Возможно, потребуется активация.';
A33:='Обновление функции автозапуска в Windows';
A34:='';
A35:='Уязвимость драйверов режима ядра Windows, делает возможным удаленное выполнение кода';
A36:='Уязвимость в планировщике заданий делает возможным несанкционированное получение прав';
A37:='Уязвимости в ядре Windows могут привести к несанкционированному получению прав';
A38:='Уязвимости в Windows Media делают возможным удаленное выполнение кода';
A39:='много.';
A40:='Уязвимость общих элементов управления Windows делает возможным удаленное выполнение кода';
A41:='Для установки этого обновления требуется установить SP3 для Office 200';
A42:='Несанкционированные цифровые сертификаты делают возможным подмену содержимого';
A43:='Уязвимость в MSXML делает возможным удаленное выполнение кода';
A44:='Для установки этого обновления требуется установить SP2 для Office 2010'+#13#10+
'http://www.microsoft.com/ru-ru/download/details.aspx?id=39667';
A45:='Запускайте обновление от имени Администратора';
A46:='Установите новый Internet Explorer'+#13#10+
'http://windows.microsoft.com/ru-ru/internet-explorer/download-ie';
A47:='Обновление для системы безопасности Office 2003';
A48:='Установите Service Pack 1 для Windows 7. Возможно, потребуется активация.';
A49:='Уязвимости драйверов режима ядра Windows делают возможным удаленное выполнение кода';
A50:='Уязвимость компонента Microsoft Graphics делает возможным удаленное выполнение кода';
A51:='Уязвимость в ядре Windows может допустить повышение уровня полномочий';
end;
if ValidDate('17.02.2011') then
begin
D01:='17.02.2011'; // MS11-020
D02:='23.07.2014'; // MS14-051
D03:='05.05.2013'; // MS13-051
D04:='21.01.2011'; // MS11-006
D05:='10.07.2009'; // KB971029
D06:='23.11.2011'; // MS11-087
D07:='02.11.2010'; // MS10-092
D08:='15.10.2010'; // MS11-011
D09:='14.10.2011'; // MS12-004
D10:='04.06.2012'; // MS12-043
D11:='03.06.2013'; // MS13-053
D12:='19.10.2013'; // MS13-096
D13:='26.11.2013'; // MS14-002
D14:='05.03.2014'; // kb2929437
end;
if ValidDate('17/02/2011') then
begin
D01:='17/02/2011';
D02:='23/07/2014';
D03:='05/05/2013';
D04:='21/01/2011';
D05:='10/07/2009';
D06:='23/11/2011';
D07:='02/11/2010';
D08:='15/10/2010';
D09:='14/10/2011';
D10:='04/06/2012';
D11:='03/06/2013';
D12:='19/10/2013';
D13:='26/11/2013';
D14:='05/03/2014';
end;
if ValidDate('02/17/2011') then
begin
D01:='02/17/2011';
D02:='07/23/2014';
D03:='05/05/2013';
D04:='01/21/2011';
D05:='07/10/2009';
D06:='11/23/2011';
D07:='11/02/2010';
D08:='10/15/2010';
D09:='10/14/2011';
D10:='06/04/2012';
D11:='06/03/2013';
D12:='10/19/2013';
D13:='11/26/2013';
D14:='03/05/2014';
end;

if ValidFloat('1.0') then
begin
Dot := '.';
notDot := ',';
end
else
begin
Dot := ',';
notDot := '.';
end;
ICounter:=0; noSP:=false; IOSVer := 0;
AddToLog(A06);
WinVuln;
MSOffice;
AdobeFlashVuln;
AdobeReaderVuln;
FireFoxVuln;
JavaVuln;
OperaVuln;
QuickTimeVuln;
SilverlightVuln;

if (ICounter=0) then
begin
AddToLog(A26);
MessageDlg(A26, mtInformation, mbOk, 0);
end
else
begin
if noSP then
AddToLog(A27+A39)
else
AddToLog(A27+IntToStr(ICounter));
SaveLog(GetAVZDirectory+'log\avz_log.txt');
if FileExists(GetAVZDirectory+'log\avz_log.txt') then
AddToLog(A28)
else
begin
SaveLog('c:\avz_log.txt');
AddToLog(A29);
end;
end;
end.

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

Меня совершенно не радовала перспектива переустанавливать операционную систему, поэтому я занялся поиском лекарства.
Просмотрев множество различных рекомендаций от бредовых до более-менее адекватных, я пришел к выводу, что эта проблема возникает в следующих ситуациях:
1. Вирусная деятельность;
2. Системные проблемы Windows, некорректная работа стороннего ПО;
3. Проблема с драйверами USB.

Я буду рассматривать ситуации, когда работоспособность самого носителя не вызывает сомнений.

Начнем рассмотрение по порядку.
1. Вирусная активность
В случае подозрений на вирусную активность, прежде чем проводить какие-либо процедуры по восстановлению доступности информации на USB-носителях, необходимо проверить критически важные области операционной системы - оперативная память, каталоги \windows\system32 (\windows\syswow64 - для 64-битных систем, его надо ставить в проверку вместе с папкой system32), папка профилей пользователей (Users, Documents and Settengs), точки восстановления системы и корневой каталог USB-носителя (желательно).
Провести проверку можно двумя утилитами:
1. Doctor Web CureIt: http://www.freedrweb.ru/cureit/
2. Kaspersky Antivirus Removal Tool: http://www.kaspersky.ru/antivirus-removal-tool

Самое лучшее - проводить проверку с помощью LiveCD, поскольку это гарантированно защищает от запуска вредоносного содержимого!

После проведения проверки на вирусы вставляем носитель и смотрим, что происходит. Если содержимое опять не выводится, смотрим, что показывает информация о диске - общий объем диска, занятое место и свободное место.
Если занятого места показывается намного меньше, чем должно быть на самом деле, значит, скорее всего, данные были повреждены вирусом. Восстановить такие данные бывает очень сложно или не возможно.
Если отображаемые данные похожи на правду, надо сделать скрытые и системные папки видимыми (windows по умолчанию их скрывает):
1. Windows XP: Пуск -> Мой компьютер -> Меню Сервис -> Свойства папки -> Вкладка вид;
2. Windows 7: Пуск -> Панель Управления -> Оформление и персонализация -> Параментры папок -> Вкладка Вид.
Сделать следующее:
Скрывать защищенные системные файлы (рекомендуется) — снимаем галочку;
Показывать скрытые файлы и папки — устанавливаем переключатель.
Если после этого содержимое носителя стало отображаться, значит цель достигнута и дело осталось за малым - вычистить остатки от вируса. Все подозрительные файлы с расширениями bat, cmd, lnk, autorun.inf, если Вы их не создавали сами, удаляйте без сожалений! Также нужно удалить папку Recycler со всем содержимым - там никаких нужных для Вас данных нет, а вирусы могут прятаться.
Это можно сделать в командной строке (Пуск -> Выполнить. Набрать cmd и нажать Ок):
del /f e:\*.bat
del /f e:\*.cmd
del /f e:\*.lnk
del /f e:\autorun.*
где е: - буква, присвоенная Вашему USB-накопителю.

Некоторые вирусы прячут файлы на флешках оригинальным способом - создают папку с названием ".." (только две точки), поэтому эту папку нигде - ни в проводнике, ни в программах типа Total Commander не видно. В этом случае поможет следующее лекарство:
Если содержимое носителя не отображается, то надо в командной строке выполнить:
dir e:
здесь e: - буква, назначенная накопителю.
Вы увидите имя папки похожее на E2E2~1.
Выполните следующую команду: ren e:\E2E2~1 newfolder, где newfolder - имя папки, задаваемое Вами. Имя папки желательно задавать короткое (не более 8 символов) и латинскими буквами.
После этого выполнить следующие команды
attrib -s -h /s /d e:\*.*
rd e:\Recycler /s /q
где e: - буква Вашего носителя.

2. Системные проблемы Windows, некорректная работа стороннего ПО


При поиске информации о возможных ситуациях, приводящих к проблемам с отображением содержимого USB-накопителей, мне несколько раз попадались сообщения о том, что к таким проблемам иногда приводит удаление программ для работы с дисками, например, Partition Magic (это не антиреклама, просто из многообразия различных сообщений, ссылка на данную программу мне запомнилась). У меня как раз была установлена программа Partition Magic Free Edition. После её удаления как раз обнаружилась проблема с отображением информации на флешках.
Я не могу сказать, что корень проблемы у меня был именно в этой программе, поскольку проводил полную чистку системы от разных программ и флешкой довольно длительное время на этом компьютере не пользовался.
К слову сказать, антивирус у меня стоит лицензионный и, когда обнаружились проблемы с доступом к информации на флешках, я сразу подумал на вирус и провел проверку несколькими портативными антивирусными утилитами с обновленными базами.
  1. Здесь мы рассмотрим ситуацию, когда съемные носители определились и в "Управлении устройствами" (Device manager) - показывает, что все устройства работают нормально и конфликтов нет, но к примеру в Проводнике Windows устройство отсутствует.
    • Проверьте назначена ли буква в оснастке "Управление дисками": Кликните ПУСК --> Выполнить (либо сочетание клавиш Win+R) diskmgmt.msc
    • Если установлен SPTD (входит в состав Alcohol 52/100% и Daemon Tools) - переустановите его.
    • Попробуйте применить этот твик реестра: Windows Registry Editor Version 5.00

      [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
      "NoDrives"=dword:00000000
      "NoViewOnDrive"=dword:00000000

      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]
      "NoDrives"=dword:00000000
      "NoViewOnDrive"=dword:00000000

      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}]
      "UpperFilters"=-
      "LowerFilters"=-

      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}]
      "UpperFilters"=-
      "LowerFilters"=-

      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E980-E325-11CE-BFC1-08002BE10318}]
      "UpperFilters"=-
      "LowerFilters"=-

      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbstor]
      "Start"=dword:00000003 
Для того, чтоб применить этот твик, создайте файл с любым названием и с расширением reg. Например, так: tweak.reg

Вот еще один вариант приведенного выше твика. Эти параметры взяты с рабочего компьютера (Windows 7), на котором все USB устройства работают нормально:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}]
"Class"="CDROM"
"ClassDesc"="@%SystemRoot%\\System32\\StorProp.dll,-17001"
@="DVD/CD-ROM drives"
"IconPath"=hex(7):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
  74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,\
  00,6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,33,00,30,00,00,00,00,00
"Installer32"="storprop.dll,DvdClassInstaller"
"EnumPropPages32"="storprop.dll,DvdPropPageProvider"
"SilentInstall"="1"
"NoInstallClass"="1"
"LowerFilters"=hex(7):69,00,61,00,53,00,74,00,6f,00,72,00,46,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}]
"Class"="DiskDrive"
"ClassDesc"="@%SystemRoot%\\System32\\StorProp.dll,-17000"
@="Disk drives"
"IconPath"=hex(7):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
  74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,\
  00,6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,33,00,32,00,00,00,00,00
"Installer32"="StorProp.Dll,DiskClassInstaller"
"NoInstallClass"="1"
"SilentInstall"="1"
"UpperFilters"=hex(7):50,00,61,00,72,00,74,00,4d,00,67,00,72,00,00,00,66,00,6c,\
  00,74,00,73,00,72,00,76,00,00,00,00,00
"LowerFilters"=hex(7):69,00,61,00,53,00,74,00,6f,00,72,00,46,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E980-E325-11CE-BFC1-08002BE10318}]

"Class"="FloppyDisk"
"ClassDesc"="@%SystemRoot%\\System32\\SysClass.Dll,-3015"
@="Floppy disk drives"
"IconPath"=hex(7):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
  74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,\
  00,6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,32,00,38,00,00,00,00,00
"SilentInstall"="1"

"NoInstallClass"="1"


Классы реестра, отвечающие за устройства хранения USB.

Классы находятся в ветке реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\

{36FC9E60-C465-11CF-8056-444553540000} - Universal Serial Bus controllers
{4D36E967-E325-11CE-BFC1-08002BE10318} - Disk drives
{4D36E965-E325-11CE-BFC1-08002BE10318} - DVD/CD-ROM drives
{4D36E980-E325-11CE-BFC1-08002BE10318} - Floppy disk drives


3. Проблема с драйверами USB


  1. Здесь мы рассмотрим ситуацию, когда:
    • Само устройство РАБОТАЕТ. Это Вы проверили на другом компьютере.
    • При подключении же именно к Вашему компьютеру, оно либо не определяется вообще, либо определяется неправильно, либо даже правильно определяется, но не работает как нужно.
    • Вы уверены, что установлены все необходимые драйверы всех устройств подключенных к системе.
    • Вы уверены, что переустановка и обновление драйверов USB контроллеров и устройств USB сделаны корректно.
    • В "Управлении устройствами" (Device manager) - показывает, что все устройства работают нормально и конфликтов нет. 

    Как правило такая ситуация может возникнуть если USB 2.0 Enhanced Host Controller использует одно прерывание вместе с каким-либо другим устройством (IRQ Sharing), например звуковым или видео. В этом случае нарушается правильная передача параметров (FDO, PDO) от драйверов USB (usbhub.sys, usbstor.sys, usbport.sys) к драйверам логических устройств, например от usbstor.sys в disk.sys в случае "USB 2.0 mass storage device".
  2. Физически отключите все USB устройства от компьютера и загрузите компьютер в БЕЗОПАСНОМ РЕЖИМЕ (Safe Mode) - нажмите F8 при старте компьютера - с правами локального Администратора.
  3. Удаление скрытых устройств
    • Кликните ПУСК --> Выполнить (либо сочетание клавиш Win+R). Напечатайте cmd и нажмите OK - должно появиться окно командной строки.
    • В командной строке, напечатайте следующее (без кавычек) и нажимайте Enter после каждой команды:

                "set DEVMGR_SHOW_DETAILS=1"
                "set DEVMGR_SHOW_NONPRESENT_DEVICES=1"
                "start devmgmt.msc"

      Должен появиться "Device Manager", или "Управление устройствами" в русской версии.
    • Кликните View (Вид) --> Show hidden devices (Показать скрытые устройства).
    • Если Вы увидели в развернутых классах Ваше устройство (включая посеревшие) кликните на нем правой кнопкой и в выпавшем меню кликните Uninstall (Удалить). 

    Например для USB 2.0 HDD надо удалить все "USB 2.0 Storage Device USB Device" из класса "Disk Drives", все "USB mass StorageDevice" из класса "USB controllers" и серые "Generic Volume" из класса "Storage Volumes".

    Будте осторожны, чтобы не удалить устройства, обслуживающие Ваши жесткие диски с которых грузится Windows.
  4. Удаление всех oem*.inf файлов

    В командной строке, напечатайте следующее (без кавычек) и нажимайте Enter после каждой команды:

              "cd \windows\inf"
              "ren infcache.1 *.old"
              "ren oem*.inf *.old"
              "del C:\windows\setupapi.log"

    ВНИМАНИЕ! Если у Вас установлено несколько копий Windows, необходимо проделать эту процедуру ДЛЯ ВСЕХ установок Windows.
  5. Удаление всех ключей в ветке реестра HKEY_LOCAL_MACHINE/Enum/USB которые начинаются с VID

    Удаление VID_.... ключей из реестра приведет к распознаванию USB устройств заново при рестарте системы.

    ВНИМАНИЕ: Если у Вас USB мышь или клавиатура, не удаляйте их ветки реестра, иначе Windows при рестарте может глюкануть. Определить эти ветки можно кликнув на "+" VID_.... ключа и кликнуть на ключ ступенькой ниже. Если справа в значении переменной DeviceDesc Вы увидите что-то типа "Human Interface Device" или HID - то это как раз мышь или клавиатура.

    • В командной строке, напечатайте regedit и нажмите OK - должен открыться редактор реестра.
    • Перейдите на HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB.

      Сведения о USB устройствах, которые когда либо были подключены располагаются в ключах типа "Vid_0000&Pid_0000", необходимо их все удалить (кроме HID).
    • Правой кнопкой мыши на каждом из этих ключей (типа "Vid_0000&Pid_0000") --> Permissions (Разрешения) -> для группы Everyone (Все) назначить Full Control (полный доступ) --> Применить.
    • Удалите все (кроме HID) VID_.... ключи.
    • Закройте редактор реестра, завершите работу и полностью выключите компьютер (из розетки или выключить сетевой фильтр). 

  6. Подключение устройства к компьютеру: 
    • Пока компьютер ВЫКЛЮЧЕН присоедините Ваше устройство к USB порту НЕ ПОДКЛЮЧАЯ ПИТАНИЯ К ВАШЕМУ USB УСТРОЙСТВУ (если имеется отдельное питание).
    • ПОСЛЕ того, как Windows ПОЛНОСТЬЮ загрузиться и прекратит бешено шуршать винчестером (можно проследить по диодному индикатору HDD на лицевой панели системного блока), подсоединяем питание к Вашему устройству.
    • Должен начаться процесс детектирования нового устройства и полная переустановка драйверов для него.
    • Если при подключении ранее установленного устройства USB, Windows запросит установить драйвер, укажите следующие пути: WINDOWS\system32\ , WINDOWS\INF\ , WINDOWS\Driver Cache\i386\ , а для Windows Vista и Windows 7 еще и WINDOWS\WinSxS\ 
Еще один вариант восстановления драйверов. Выполняется в командной строке, запущенной с правами администратора:
pnputil.exe -a C:\WINDOWS\System32\DriverStore\FileRepository\intelpep.inf_amd64_b217eba3b9eb6ae4\intelpep.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usb.inf_31bf3856ad364e35_6.3.9600.16442_none_bbe00802e24ab498\usb.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_prnms003.inf_31bf3856ad364e35_6.3.9600.17238_none_43c7d0bfa7ab0231\prnms003.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_sdbus.inf_31bf3856ad364e35_6.3.9600.17031_none_62d40f129e2862c0\sdbus.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_sdbus.inf_31bf3856ad364e35_6.3.9600.17329_none_62e6e7009e1908fc\sdbus.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbhub3.inf_31bf3856ad364e35_6.3.9600.17195_none_e694f5dd21042778\usbhub3.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbhub3.inf_31bf3856ad364e35_6.3.9600.17238_none_e6d8d82920d0c8fe\usbhub3.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbport.inf_31bf3856ad364e35_6.3.9600.17116_none_aece54f1d74a3634\usbport.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbport.inf_31bf3856ad364e35_6.3.9600.17195_none_ae76d547d78bfc65\usbport.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbstor.inf_31bf3856ad364e35_6.3.9600.17031_none_3977a1056ba46c29\usbstor.inf
pnputil.exe -a C:\WINDOWS\WinSxS\x86_prnms003.inf_31bf3856ad364e35_6.3.9600.17238_none_e7a9353bef4d90fb\prnms003.inf

Иногда неработоспособность USB-накопителей появляется после установки обновлений, когда обновляется файл usbstor.inf. В этом случае можно попробовать выполнить следующую команду в командной строке, запущенной от имени Администратора:

pnputil.exe -f -d usbstor.inf
pnputil.exe -a C:\WINDOWS\WinSxS\amd64_usbstor.inf_31bf3856ad364e35_6.3.9600.17331_none_3977a6b76ba4639e\usbstor.inf


Используемые ссылки:

Полезные статьи:
1. Восстановление флешек: http://geektimes.ru/post/98339/
2. Коды ошибок диспетчера устройств: https://support.microsoft.com/ru-ru/kb/310123/ru

Полезные программы:
1. Ремонт программных проблем с USB-накопителями: MK Registry & USB Fixer 2.0.1
2. Автоматическая диагностика и устранение проблем с USB в Windows: FixIt
3. Автоматическое устранение проблем с USB: FixIt WinUSB
4. Скрипт AVZ для обнаружения наиболее часто используемых уязвимостей: http://df.ru/~kad/ScanVuln.txt
5. Программа для стирания следов подключения USB-дисков из реестра Windows: usboblivion64-1.10.2.0
6. Как исправить проблемы с устройствами: не работает, не найдено: FixIt


Приложения
Скрипт AVZ для обнаружения наиболее часто используемых уязвимостей

{ Скрипт AVZ для обнаружения наиболее часто используемых уязвимостей. Версия 2.34
Автор: Андрей Кондауров, участник форума defendium.info (AndreyKa)
Скрипт может свободно распространяться, при условии сохранения данного комментария
Постоянный адрес скрипта: http://dataforce.ru/~kad/ScanVuln.txt
}
var
IOSVer, ICounter : Integer;
A00,A01,A02,A03,A04,A05,A06,A07,A08,A09,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23,A24,A25,
A26,A27,A28,A29,A30,A31,A32,A33,A34,A35,A36,A37,A38,A39,A40,A41,A42,A43,A44,A45,A46,A47,A48,A49,A50,A51,
Dot, notDot : string;
noSP, bRU : boolean;
D01,D02,D03,D04,D05,D06,D07,D08,D09,D10,D11,D12,D13,D14 : string;

function IsFileBuldLow(VulnFileName: string; IMinVer: integer) : boolean;
var
ARes : string;
IPos, IBuild : Integer;
begin
ARes := GetFileVersion(VulnFileName, 6);
IPos := Pos('.', ARes);
while IPos > 0 do
begin
Delete(ARes, 1, IPos);
IPos := Pos('.', ARes);
end;
Result := False;
if ValidInt(ARes) then
begin
IBuild := StrToInt(ARes);
if IBuild < IMinVer then
Result := True
end;
end;

function IsFileSubVerLow(VulnFileName:string; IMinSubVer:Extended):boolean;
var
ARes: string;
IPos: Integer;
begin
ARes := GetFileVersion(VulnFileName, 6);
IPos := Pos('.', ARes);
Delete(ARes, 1, IPos);
IPos := Pos('.', ARes);
Delete(ARes, 1, IPos);
Result := False;
ARes := NormalizeDot(ARes);
if ValidFloat(ARes) then
if StrToFloat(ARes) < IMinSubVer then
Result := True;
end;

function NormalizeDot(aStr : string) : string;
begin
Result := StringReplace(aStr, notDot, Dot);
end;

Procedure WinVuln;
var
AOSVer, ASP, AResult, ARes, ID, AFName, URL : string;
IMinVer, IEVer : integer;
IMinSubVer: Extended;
FS : TFileSearch;
begin
if not IsNT then exit;
// Определить версию ОС
AOSVer := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows NT\CurrentVersion','CurrentVersion');
if AOSVer < '5.0' then exit;
ASP := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows NT\CurrentVersion','CSDVersion');
if AOSVer = '5.0' then
if ASP <> 'Service Pack 4' then
AddToLog(A01)
else
begin
IOSVer:=4;
AddToLog(A02);
AddToLog('http://support.microsoft.com/lifecycle/?p1=3071'+#13#10);
noSP:=true;
ICounter:=ICounter+1;
end;
if AOSVer = '5.1' then
if ASP < 'Service Pack 3' then
begin
AddToLog(A03+#13#10);
noSP:=true;
ICounter:=ICounter+1;
end
else
if ASP = 'Service Pack 3' then IOSVer := 13;
if AOSVer = '5.2' then
if ASP < 'Service Pack 2' then
begin
AddToLog(A04);
noSP:=true;
ICounter:=ICounter+1;
end
else
if ASP = 'Service Pack 2' then IOSVer := 22;
if AOSVer = '6.0' then
begin
ASP := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows NT\CurrentVersion','CurrentBuild');
if ASP < '6002' then
begin
if ASP = '6000' then
AddToLog(A05);
if IsWOW64 then
begin
if ASP = '6000' then
AddToLog(A00+'86d267bd-dfcd-47cf-aa76-dc0626dcdf10')
else
AddToLog(A32);
AddToLog(A00+'8ad69826-03d4-488c-8f26-074800c55bc3');
end
else
begin
if ASP = '6000' then
AddToLog(A00+'F559842A-9C9B-4579-B64A-09146A0BA746')
else
AddToLog(A32);
AddToLog(A00+'891ab806-2431-4d00-afa3-99ff6f22448d');
end;
AddToLog('');
noSP:=true;
ICounter:=ICounter+1;
end;
if ASP = '6001' then IOSVer := 31;
if ASP = '6002' then IOSVer := 32;
end;
if AOSVer = '6.1' then
begin
IOSVer := 40;
if IsWOW64 then
begin
SetupAVZ('X64R=NN');
ASP := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows NT\CurrentVersion','CSDVersion');
SetupAVZ('X64R=YY');
end;
if ASP = 'Service Pack 1' then
IOSVer := 41
else
begin
AddToLog(A48);
if IsWOW64 then
AddToLog('http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X64.exe'+#13#10)
else
AddToLog('http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X86.exe'+#13#10);
noSP:=true;
ICounter:=ICounter+1;
end;
end;

if IOSVer = 0 then
exit; // не удалось определить версию SP ОС или ОС не поддреживается
if IsWOW64 then IOSVer := IOSVer + 100;

FS := TFileSearch.Create(nil);

// MS08-067 ссылки на MS12-054
IMinVer := 0;
case IOSVer of
4 : begin IMinVer := 7203; ID:='E22EB3AE-1295-4FE2-9775-6F43C5C2AED3'; end; // MS08-067
13 : begin IMinVer := 5694; ID:='5403c78c-6b87-4788-89c3-0140b887ec6f'; end;
22 : begin IMinVer := 4392; ID:='2847952f-0234-4cf6-820a-1f0a285b2fb7'; end;
122: begin IMinVer := 4392; ID:='3833d768-1dab-4a85-822f-87c7fa3db261'; end;
end;
if IMinVer <> 0 then
if IsFileBuldLow('%System32%\Netapi32.dll', IMinVer) then
begin
AddToLog(A07);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;

// MS11-020, для Windows 7 ссылки на MS11-048
IMinVer := 0;
ID := '';
case IOSVer of
4 : begin IMinVer:=7365; ID:='267ce982-54a0-418f-ad52-e4963610f714'; end; // MS10-012
13 : begin IMinVer:=6082; ID:='CCB08A8A-F4D9-4320-8FFB-3FD4FE217987'; end;
22 : begin IMinVer:=4832; ID:='64C550D4-C927-4382-91E1-473ED6790819'; end;
122: begin IMinVer:=4832; ID:='EF62DB94-4F72-4245-AC9F-6391035E2516'; end;
32 : ID:='D6EDDFF4-A242-4DEC-9D84-72891DB2B754';
132: ID:='2878C587-6544-40B4-9288-FC3B3CE1128D';
41 : ID:='CF9E5ECD-68F7-4982-B4ED-BE80859B757C';
141: ID:='2707650A-604C-4044-ACC4-07A30B5640D8';
end;
AResult:='%System32%\drivers\Srv.sys';
if IsWOW64 then SetupAVZ('X64R=NN');
if FileExists(AResult) and (ID<>'') then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A08);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// MS10-013
IMinVer := 0;
case IOSVer of
4:begin
AResult := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\DirectX','Version');
AResult := Copy(AResult, 3, 2);
if ValidInt(AResult) then
case StrToInt(AResult) of
7: begin IMinVer := 738; ID := '16787c93-2c95-4c13-8492-be1db9d18146'; end;
9: begin IMinVer := 913; ID := '59a8bc19-02bb-4800-bac1-464f59e1cb7b'; end;
end;
end;
13 : begin IMinVer := 5908; ID := '7ab53be3-3f42-4e61-a2bc-3ed41d8736ff'; end;
22 : begin IMinVer := 4625; ID := '983c5484-6321-4765-97ec-8d42d42d1f70'; end;
122: begin IMinVer := 4625; ID := '7dc20252-6091-407b-befc-c25e8f5d3fb0'; end;
end;
if IMinVer <> 0 then
if IsFileBuldLow('%System32%\Quartz.dll', IMinVer) then
begin
AddToLog(A09);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;

// MS14-051 ссылки на MS14-052 rhjvt
ARes := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Internet Explorer','Version');
AResult := Copy(ARes, 1, 1);
if AResult = '9' then
case Copy(ARes, 3, 2) of
'10': AResult := '10';
'11': AResult := '11';
end;
ID := '';
if ValidInt(AResult) then
begin
IEVer:=StrToInt(AResult);
case IEVer of
7: case IOSVer of
22: ID := '3dd813bd-11da-4d9c-b09d-b5236f9fe2e1';
122:ID := 'a90838a2-6cfe-42fc-87df-8633b747c5d9';
end;
8: case IOSVer of
22: ID := '1611d668-d05b-472b-b321-e9c01ffb0c16';
122:ID := 'd80d93bf-eb0b-47fe-a7e7-e0c946b58c83';
end;
9: case IOSVer of
32: ID := 'dbe758a7-b720-4155-9bee-04aad0343d6e';
132:ID := 'e5af2769-859d-4f68-8bb7-9977293cbcf4';
41: ID := 'dc7f0d67-dd86-4ada-931a-395ed4f13400';
141:ID := '392340b1-6c1c-4247-b7a7-ac9ab5a8f5d2';
end;
10: case IOSVer of
41: ID := '25b9735d-9df0-477b-a34f-90c62d2f9c33';
141:ID := '0062d37f-5dc4-44e5-994a-0ac37358fd7b';
end;
11: case IOSVer of // ссылки на MS14-051
41: ID := '6D99E879-DF98-4915-ADD6-99FD1B61A22B';
141:ID := '4365B653-ACFB-4503-91EE-F8C86CD6AF7F';
end;
end;
if ((IEVer=6) or
((IEVer=7) and (IOSVer=13)) or
((IEVer=7) or (IEVer=8)) and ((IOSVer=32) or (IOSVer=132) or (IOSVer=41) or (IOSVer=141))) then
begin
ICounter:=ICounter+1;
if IOSVer=13 then
begin
if bRU = true then
AddToLog('Установите Internet Explorer 8'+#13#10+
'https://ie.yandex.ru/'+#13#10)
else
AddToLog('Install Internet Explorer 8'+#13#10+
'https://ie.yandex.ru/download/?key=en'+#13#10);
end
else
AddToLog(A46+#13#10);
end;

if FS.FindFirst('%System32%\Mshtml.dll') then
if ID <> '' then
begin
if ((FS.FileLastWriteTime begin
case IOSVer of
41: ID := 'http://www.microsoft.com/en-US/download/details.aspx?id=42463';
141:ID := 'http://www.microsoft.com/en-US/download/details.aspx?id=42482';
end;
if bRU then ID := StringReplace(ID, 'en-US', 'ru-ru');
AddToLog(A10);
AddToLog(ID+#13#10);
ICounter:=ICounter+1;
end
else
if (FS.FileLastWriteTime begin
AddToLog(A10);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
end
// ID = ''
else if ((IEVer=8) and (IOSVer=13) and bRU and (FS.FileLastWriteTime begin
AddToLog(A10);
AddToLog('https://cloud.mail.ru/public/84f1304e1c7c/X86-ru-ie8-windowsxp-kb2977629.exe'+#13#10);
ICounter:=ICounter+1;
end;
end;

//http://www.microsoft.com/technet/security/advisory/2458511.mspx
AResult:=NormalFileName('%USERPROFILE%\KB2458511.CSS');
if FileExists(AResult) then
begin
DeleteFile(AResult);
RegKeyParamDel('HKCU','Software\Microsoft\Internet Explorer\Styles','User Stylesheet');
RegKeyIntParamWrite('HKCU','Software\Microsoft\Internet Explorer\Styles','Use My Stylesheet',0);
AResult:=NormalFileName('%USERPROFILE%\CSS-backup.reg');
if FileExists(AResult) then
begin
ExecuteFile('Regedit.exe','/c "'+AResult+'"',0,5000,true);
DeleteFile(AResult);
end;
end;

// MS13-090
ID := '';
if NoKillBit('{19916e01-b44e-4e31-94a4-4696df46157b}') then
begin
case IOSVer of
13: ID := '60906192-8a5b-459a-b8e5-6b65f1da5799';
22: ID := 'a36d3168-c5b4-4cba-874e-32abf387b54a';
122: ID := 'fddbd288-827e-4d04-ba30-1f044a168ee0';
32: ID := 'b35f44ce-4af5-4be2-9e45-f400d0d3f21b';
132: ID := '8c691d27-9cb2-4695-97da-d86b62e10835';
41: ID := '787d0729-a3c5-4312-a30e-5a211a22de77';
141: ID := 'dd7cc36b-bb4e-4548-8d9c-43c6dd6cb78e';
end;
if ID <> '' then
begin
AddToLog(A11);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
end;

// MS10-042
IMinVer := 0;
case IOSVer of
13 : begin IMinVer := 5997; ID := '7C2122BB-0ECF-4467-A3BA-6FB862F603C5'; end;
22 : begin IMinVer := 4726; ID := 'CD4363B2-D7A7-4FFF-8BCD-6FD02BD1AC07'; end;
122: begin IMinVer := 4726; ID := 'A6BAFD3B-C921-466D-BEE0-59A3FE126712'; end;
end;
if IMinVer <> 0 then
begin
if IsFileBuldLow('%SystemRoot%\PCHEALTH\HELPCTR\Binaries\Helpsvc.exe', IMinVer) then
begin
AddToLog(A12);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end
else if not RegKeyExists('HKCR','HCP\shell') then
RegKeyParamWrite('HKCR','HCP\shell\open\command','','REG_EXPAND_SZ',
'%SystemRoot%\PCHEALTH\HELPCTR\Binaries\HelpCtr.exe -FromHCP -url "%1"');
end;

// http://securitytracker.com/alerts/2007/Oct/1018843.html
SetKillBit('{FDC7A535-4070-4B92-A0EA-D9994BCC0DC5}');

// MS11-006
ID := '';
case IOSVer of
13 : ID := 'BBEA7EAD-6C5C-4DA8-AA03-A40325FD2DE3';
22 : ID := '2AA94528-5063-427B-97F7-2A0A55CBB6BF';
122: ID := '6E740922-6CE4-46EC-A35E-E94201A9E398';
32 : ID := '0C18ECCA-AFB9-4738-BC7B-76A0E815DFB8';
132: ID := '62DC454F-4B1E-4AC0-8FFE-6C73112F8D4D';
end;
if ID <> '' then
if FS.FindFirst('%System32%\Shell32.dll') then
if FS.FileLastWriteTime begin
AddToLog(A31);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;

// MS10-061
if IOSVer = 13 then
begin
if IsFileBuldLow('%System32%\Spoolsv.exe', 6024) then
begin
AddToLog(A30);
AddToLog(A00+'93FABA6B-0A85-4ACC-B527-A012BBF56B13'+#13#10);
ICounter:=ICounter+1;
end;
end;

// KB971029
IMinVer := 0;
ID := '';
case IOSVer of
13 : begin IMinVer:=5853; ID:='96ca61f6-8b16-4157-9635-8cfc0bbf4c35'; end;
22 : begin IMinVer:=4559; ID:='edf9c049-bf1e-4130-87e6-0e64fa73f684'; end;
122: begin IMinVer:=4559; ID:='b8df9256-cbb0-418d-a336-d29dc4415a65'; end;
32 : ID:='dd6a61a3-b3c6-4b0a-a848-7b32be9f31c5';
132: ID:='12e3fe0f-db79-4a27-aa7d-a456ee1c6ac4';
end;
AResult:='%System32%\Shsvcs.dll';
if IsWOW64 then SetupAVZ('X64R=NN');
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A33);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// MS11-087 ссылки на MS12-034
IMinVer := 0;
ID := '';
case IOSVer of
13 : begin IMinVer:=6178; ID:='8d341077-8fcd-4666-a27e-2141a04a321e'; end;
22 : begin IMinVer:=4938; ID:='6287b994-041f-45b7-a230-d689bf1901a8'; end;
122: begin IMinVer:=4938; ID:='f9f49cd0-24db-4438-afde-aa7113ec2035'; end;
32 : ID:='292d1f3b-a065-4d7d-9046-f35ab7f0591b';
132: ID:='8f90c09c-a2cb-4adb-ace7-a8bc38d78ba6';
41 : ID:='572af8d4-effb-41a6-8448-7576b03f18fd';
141: ID:='c09cbb73-7814-4946-8c0a-323d304dd633';
end;
AResult:='%System32%\Win32k.sys';
if IsWOW64 then SetupAVZ('X64R=NN');
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A35);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// MS10-092
ID := '';
case IOSVer of
32 : ID:='48F10251-34D8-4149-B4B2-BF3EC28F5846';
132: ID:='099CCC5F-B92F-4D06-BCB5-92E35C49F613';
41 : ID:='CF85CDB6-58C7-4144-82F6-F01A6A4F9C3A';
141: ID:='0597018D-39F5-4CA9-B437-63D9E68F264D';
end;
if ID<>'' then
begin
AResult:='%System32%\Taskeng.exe';
if IsWOW64 then SetupAVZ('X64R=NN');
if FileExists(AResult) then
if FS.FindFirst(AResult) then
if FS.FileLastWriteTime begin
AddToLog(A36);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// MS11-011
IMinVer := 0;
ID := '';
case IOSVer of
13 : begin IMinVer:=6055; ID:='A511D33A-9AE0-46EE-A225-9D97390DE7D1'; end;
22 : begin IMinVer:=4789; ID:='6BF2EEEC-8225-477F-A606-263D3EE434D6'; end;
122: begin IMinVer:=4789; ID:='EC544894-EE98-4A2B-AC4D-33B0C3754213'; end;
32 : ID:='66978514-BB7F-42CC-9360-2FD1C686F4E6';
132: ID:='8FDB8C37-1B22-457B-BDC0-21F6A5061DD3';
end;
AResult:='%System32%\Ntdll.dll';
if IsWOW64 then SetupAVZ('X64R=NN');
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A37);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// MS12-004
IMinVer := 0;
ID := '';
case IOSVer of
13 : begin IMinVer:=6160; ID:='a142f7ba-4268-4453-a8eb-470213c028ac'; end;
22 : begin IMinVer:=4916; ID:='3c266dfb-630d-4f32-b2ca-63955279b6a9'; end;
122: begin IMinVer:=4916; ID:='8dd1c882-4ed1-4e47-a017-7d162bd94194'; end;
32 : ID:='99d9b9fc-ed37-4a32-a20d-6604a1b9c4ca';
132: ID:='44aa8d91-2b30-4191-8965-8aee2b860d50';
end;
AResult:='%System32%\Winmm.dll';
if IsWOW64 then SetupAVZ('X64R=NN');
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A38);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

// KB2718704
URL := '';
IMinVer := 0;
case IOSVer of
13 : IMinVer := 6237;
22 : IMinVer := 5012;
122 : IMinVer := 5012;
end;
if bRU then
case IOSVer of
13 : URL := 'http://www.microsoft.com/ru-ru/download/details.aspx?id=29975 (требуется лицензионный Windows) или'+#13#10+
'http://download.microsoft.com/download/1/1/A/11A221A6-953C-40E1-87CD-2A4CD98224C4/WindowsXP-KB2718704-x86-RUS.exe';
22 : URL := 'http://www.microsoft.com/ru-ru/download/details.aspx?id=29971 (требуется лицензионный Windows) или'+#13#10+
'http://download.microsoft.com/download/1/7/3/1733DB6F-F10B-4C25-94EF-FAD7BAAD81ED/WindowsServer2003-KB2718704-x86-RUS.exe';
122 : URL := 'http://www.microsoft.com/ru-ru/download/details.aspx?id=29976 (требуется лицензионный Windows) или'+#13#10+
'http://download.microsoft.com/download/B/D/6/BD6FA68A-2A23-476B-8CFC-F1D03118D96F/WindowsServer2003.WindowsXP-KB2718704-x64-RUS.exe';
end
else
case IOSVer of
13 : URL := 'http://www.microsoft.com/en-us/download/details.aspx?id=29975';
22 : URL := 'http://www.microsoft.com/en-us/download/details.aspx?id=29971';
122 : URL := 'http://www.microsoft.com/en-us/download/details.aspx?id=29976';
end;
if URL <>'' then
begin
AResult:='%System32%\Crypt32.dll';
if FileExists(AResult) then
if (IMinVer>0) and IsFileBuldLow(AResult, IMinVer) then
begin
AddToLog(A42);
AddToLog(URL+#13#10);
ICounter:=ICounter+1;
end;
end;
AFName := '';
case IOSVer of
32 : begin AFName :='X86_13f66e81425ab9718ea16821324e3faa_31bf3856ad364e35_6.0.6002.18642_none_4b3c196b981fe80c.manifest';
URL :='http://download.microsoft.com/download/D/7/A/D7A4C58C-A0E8-4CD7-A405-36C787637474/Windows6.0-KB2718704-x86.msu'; end;
132: begin AFName :='X86_microsoft-windows-capi2-certs_31bf3856ad364e35_6.0.6002.18642_none_c44bff19916a7786.manifest';
URL :='http://download.microsoft.com/download/7/3/1/731F9EE8-438E-4411-A994-2D0A1443501F/Windows6.0-KB2718704-x64.msu'; end;
41 : begin AFName :='x86_microsoft-windows-capi2-certs_31bf3856ad364e35_6.1.7601.22008_none_c52e70d60b79c688.manifest';
URL :='http://download.microsoft.com/download/4/1/3/413A9B3D-DC56-4DD8-8944-9B0DB0CC8025/Windows6.1-KB2718704-x86.msu'; end;
141: begin AFName :='amd64_4677e27d20f74740fec514c660d10fa4_31bf3856ad364e35_6.1.7601.22008_none_d851475c9cba0cdf.manifest';
URL :='http://download.microsoft.com/download/1/7/8/1787B87D-5DA3-44EF-A393-F15BF8EA3FBF/Windows6.1-KB2718704-x64.msu'; end;
end;
if AFName<>'' then
begin
if IsWow64 then
SetupAVZ('X64R=NN');
AResult := NormalFileName('%windir%\winsxs\Manifests\'+AFName);
if not FileExists(AResult) then
begin
AddToLog(A42);
AddToLog(URL+#13#10);
ICounter:=ICounter+1;
end;
if IsWow64 then
SetupAVZ('X64R=YY');
end;

// MS12-043 частично ссылки на MS13-002
ID := '';
case IOSVer of
13 : ID:='017f1ed7-eed4-4de3-aca1-93fb25058866';
22 : ID:='b7321c17-0e8e-4217-8da6-4c270dbfc802';
122: ID:='29985fdc-8aba-44b2-9420-970ca475052e';
32 : ID:='f8ccdb90-66bd-471a-9c78-825d1140b5ac';
132: ID:='873eba5d-5a8f-410e-bad8-e9d538acf1b3';
41 : ID:='d8a4817c-481c-4ed2-980a-21623f0ca6d2';
141: ID:='4b442601-2808-4192-aa7d-b6476668cd23';
end;
AResult:='%System32%\Msxml3.dll';
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if (FS.FileLastWriteTime begin
AddToLog(A43);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;

ID := '';
case IOSVer of
13 : ID:='1e2738b9-d3c2-4dfe-8a79-335d5feee55b';
22 : ID:='1e2738b9-d3c2-4dfe-8a79-335d5feee55b';
122: ID:='7dabf372-4b31-4c9e-a660-4e0f4a65db04';
32 : ID:='1e2738b9-d3c2-4dfe-8a79-335d5feee55b';
132: ID:='7dabf372-4b31-4c9e-a660-4e0f4a65db04';
41 : ID:='1e2738b9-d3c2-4dfe-8a79-335d5feee55b';
141: ID:='7dabf372-4b31-4c9e-a660-4e0f4a65db04';
end;
AResult:='%System32%\Msxml4.dll';
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if (FS.FileLastWriteTime begin
AddToLog(A43);
AddToLog('http://www.microsoft.com/downloads/details.aspx?FamilyID='+ID);
if (IOSVer > 30) and (IOSVer <> 122) then AddToLog(A45);
AddToLog('');
ICounter:=ICounter+1;
end;

ID := '';
case IOSVer of
22 : ID:='3b56ba48-b74c-4681-8e17-715dc5d45e2c';
122: ID:='0b13a83c-1e51-4604-a09d-afb2e25646f9';
end;
AResult:='%System32%\Msxml6.dll';
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if (FS.FileLastWriteTime begin
AddToLog(A43);
AddToLog('http://www.microsoft.com/downloads/details.aspx?FamilyID='+ID+#13#10);
ICounter:=ICounter+1;
end;

// MS13-053 ссылки на KB2883150 из MS13-081
IMinVer := 0;
ID := '';
case IOSVer of
13 : begin IMinVer:=6404; ID:='7cb5e134-451c-4d20-919e-abc147ca8f5f'; end;
22 : begin IMinVer:=5174; ID:='a52c08e5-42dd-4f76-8fff-5a8b990b1878'; end;
122: begin IMinVer:=5174; ID:='adecac41-2842-43c2-9a3a-50c8d7d17e8d'; end;
32 : ID:='5b0032fe-b02f-4726-87df-4500c525803f';
132: ID:='6cc0ad94-a881-42ab-84e2-d1ca67808b37';
41 : ID:='f286c69b-b83e-4c42-be9a-99d648dd5e12';
141: ID:='d0d8e289-2c71-4b40-9a1f-de2501c8d40e';
end;
AResult:='%System32%\Win32k.sys';
if IsWOW64 then
SetupAVZ('X64R=NN');
if ID<>'' then
if FS.FindFirst(AResult) then
if ((IMinVer=0) and (FS.FileLastWriteTime0) and IsFileBuldLow(AResult, IMinVer)) then
begin
AddToLog(A49);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then
SetupAVZ('X64R=YY');

// MS13-096
ID := '';
case IOSVer of
32 : ID:='fd0f3c4d-a741-44ef-b566-29ed95ae9228';
132: ID:='420c49f6-65aa-41b5-9f34-1f0384f6c394';
end;
AResult:='%System32%\Gdiplus.dll';
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if (FS.FileLastWriteTime begin
AddToLog(A50);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;

// MS14-002
ID := '';
case IOSVer of
13 : ID:='6cae1016-419a-47ab-9765-b4c1d7c0865c';
22 : ID:='6d50f851-4be3-413f-b02d-b5b6a3f49fb4';
122: ID:='69966ceb-a9c9-4aa7-b685-78562c96640f';
end;
AResult:='%System32%\drivers\NDProxy.sys';
if IsWOW64 then SetupAVZ('X64R=NN');
if (ID<>'') and FileExists(AResult) then
if FS.FindFirst(AResult) then
if (FS.FileLastWriteTime begin
AddToLog(A51);
AddToLog(A00+ID+#13#10);
ICounter:=ICounter+1;
end;
if IsWOW64 then SetupAVZ('X64R=YY');

FS.Free;
end;

Function NoKillBit(CLSID: string) : boolean;
begin
Result:=RegKeyExists('HKCR','CLSID\'+CLSID) and
not RegKeyExists('HKLM','SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\'+CLSID);
end;

Procedure SetKillBit(CLSID: string);
begin
if NoKillBit(CLSID) then
RegKeyIntParamWrite('HKLM','SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\'+CLSID,'Compatibility Flags', 1024);
end;

Function GetFileLastWriteTime(AFName: string) : TDateTime;
var
FS : TFileSearch;
begin
FS := TFileSearch.Create(nil);
if FS.FindFirst(AFName) then
Result := FS.FileLastWriteTime;
FS.Free;
end;

Procedure MSOffice;
var
AFName, AResult : string;
MSCOMCTL_old, Gdiplus_old : boolean;
begin
// Уязвимость элемента ActiveX средства просмотра снимков Microsoft Access делает возможным удаленное выполнение кода
// MS08-041
SetKillBit('{F0E42D50-368C-11D0-AD81-00A0C90DC8D9}');
SetKillBit('{F0E42D60-368C-11D0-AD81-00A0C90DC8D9}');
SetKillBit('{F2175210-368C-11D0-AD81-00A0C90DC8D9}');

// Уязвимости в веб-компонентах Microsoft Office делают возможным удаленное выполнение кода
// MS09-043
SetKillBit('{0002E543-0000-0000-C000-000000000046}');
SetKillBit('{0002E55B-0000-0000-C000-000000000046}');
SetKillBit('{0002E541-0000-0000-C000-000000000046}');
SetKillBit('{0002E559-0000-0000-C000-000000000046}');
SetKillBit('{0002E512-0000-0000-C000-000000000046}');
SetKillBit('{0002E510-0000-0000-C000-000000000046}');
SetKillBit('{0002E511-0000-0000-C000-000000000046}');
SetKillBit('{0002E533-0000-0000-C000-000000000046}');
SetKillBit('{0002E530-0000-0000-C000-000000000046}');

// MS12-060 ссылки на MS14-024
AFName := NormalFileName('%System32%\MSCOMCTL.OCX');
MSCOMCTL_old := isFileBuldLow(AFName,9834);

// MS13-096
// Office 2010
if RegKeyExists('HKLM','SOFTWARE\Microsoft\Office\14.0\Common\InstalledPackages') then
begin
AResult := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\14.0\Common\ProductVersion','LastProduct');
AFName:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot','Path')+'Ogl.dll';
if MSCOMCTL_old then
begin
AddToLog(A40+#13#10+A00+'7f19e755-7fd3-41ba-9b7c-befdbce457cb');
if AResult < '14.0.6029.1000' then
AddToLog(A44);
ICounter:=ICounter+1;
AddToLog('');
end;
if FileExists(AFName) then
if GetFileLastWriteTime(AFName) < StrToDateTime(D12) then
begin
AddToLog(A50+#13#10+A00+'082ac73e-fcc9-46ac-b888-5c248a64a117');
if AResult < '14.0.6029.1000' then
AddToLog(A44);
ICounter:=ICounter+1;
AddToLog('');
end;
end
else
// Office 2003
if RegKeyParamExists('HKLM','SOFTWARE\Microsoft\Office\11.0\Common\InstallRoot','Path') then
begin
AResult := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\11.0\Common\ProductVersion','LastProduct');
AFName:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\11.0\Common\InstallRoot','Path')+'Gdiplus.dll';
if MSCOMCTL_old then
begin
AddToLog(A40+#13#10+A00+'fd9626f7-4265-48ae-94b2-68243605db6b');
if AResult < '11.0.8173.0' then
AddToLog(A41+'3'+#13#10+A00+'e25b7049-3e13-433b-b9d2-5e3c1132f206');
ICounter:=ICounter+1;
AddToLog('');
end;
if FileExists(AFName) then
if GetFileLastWriteTime(AFName) < StrToDateTime(D12) then
begin
AddToLog(A50+#13#10+A00+'bfc3b881-4b95-4a22-998d-048487406d4f');
if AResult < '11.0.8173.0' then
AddToLog(A41+'3'+#13#10+A00+'e25b7049-3e13-433b-b9d2-5e3c1132f206');
ICounter:=ICounter+1;
AddToLog('');
end;
end
else
// Office 2007
if RegKeyParamExists('HKLM','SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot','Path') then
begin
AResult := RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\12.0\Common\ProductVersion','LastProduct');
AFName:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot','Path')+'OGL.DLL';
if MSCOMCTL_old then
begin
AddToLog(A40+#13#10+A00+'afdb9c83-07e7-4280-94a7-125e0e7320ae');
if AResult < '12.0.6425.1000' then
AddToLog(A41+'7'+#13#10+A00+'0E40BBE7-1422-40EA-912D-2A29D709F93F');
ICounter:=ICounter+1;
AddToLog('');
end;
if FileExists(AFName) then
if GetFileLastWriteTime(AFName) < StrToDateTime(D12) then
begin
AddToLog(A50+#13#10+A00+'3d373aba-eec3-4b76-ae95-9270a82e2e7e');
if AResult < '12.0.6425.1000' then
AddToLog(A41+'7'+#13#10+A00+'0E40BBE7-1422-40EA-912D-2A29D709F93F');
ICounter:=ICounter+1;
AddToLog('');
end;
end;
end;

Procedure AdobeFlashVuln;
var
AResult : string;
i : integer;
Plugin64Old, AX64old : boolean;
begin
// x64
Plugin64Old := false;
AX64old := false;
if IsWow64 then
begin
SetupAVZ('X64R=NN');
AResult := RegKeyStrParamRead('HKCR','CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}\InprocServer32','');
if AResult <> '' then
begin
AResult := GetFileVersion(AResult, 6);
if IsFlashOld(AResult) then
AX64old := true;
end;
AResult := RegKeyStrParamRead('HKLM','SOFTWARE\MozillaPlugins\@adobe.com/FlashPlayer','Version');
if AResult <> '' then
if IsFlashOld(AResult) then
Plugin64Old := true;
SetupAVZ('X64R=YY');
end;

// x86
AResult := RegKeyStrParamRead('HKLM',
'SOFTWARE\Classes\CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}\InprocServer32','');
AResult := GetFileVersion(AResult, 6);
if (IOSVer>4) and (AX64Old or IsFlashOld(AResult)) then
begin
AddToLog(A14);
AddToLog('http://download.macromedia.com/get/flashplayer/current/licensing/win/install_flash_player_17_active_x.exe'+#13#10);
ICounter:=ICounter+1;
end;

AResult := RegKeyStrParamRead('HKLM',
'SOFTWARE\MozillaPlugins\@adobe.com/FlashPlayer','Version');
if Plugin64Old or IsFlashOld(AResult) then
begin
AddToLog(A15);
AddToLog('http://download.macromedia.com/get/flashplayer/current/licensing/win/install_flash_player_17_plugin.exe'+#13#10);
ICounter:=ICounter+1;
end;
end;

function IsFlashOld(AFlVer: string) : boolean;
var
AVer, ABuild : string;
DotPos : integer;
begin
Result := true;
AFlVer := StringReplace(AFlVer, ',', '.');
AVer := Copy(AFlVer, 1, 2);
DotPos := Pos('.', AFlVer);
AFlVer := Copy(AFlVer, DotPos+1, Length(AFlVer)-DotPos);
DotPos := Pos('.', AFlVer);
AFlVer := Copy(AFlVer, DotPos+1, Length(AFlVer)-DotPos);
DotPos := Pos('.', AFlVer);
ABuild := Copy(AFlVer, DotPos+1, Length(AFlVer)-DotPos);
AFlVer := NormalizeDot(AFlVer);
if ValidFloat(AFlVer) then
case AVer of
'13' : if StrToFloat(AFlVer) > 0 then //13.0.0.206
if ValidInt(ABuild) then
if (StrToFloat(AFlVer) > 1) or (StrToInt(ABuild) >= 206) then Result:=false;
end
else
Result:=false;
if ValidInt(AVer) then
if StrToInt(AVer) > 13 then Result:=false;
end;

Procedure AdobeReaderVuln;
var
ARes, AVer, AMinVer, CVer, AKey, AExe, ASubVer : string;
ISubVer, IMinSubVer : integer;
begin
ARes:='';
if RegKeyExists('HKCR','CLSID\{06849E9F-C8D7-4D59-B87D-784B7D6BE0B3}')
then ARes:='06849E9F-C8D7-4D59-B87D-784B7D6BE0B3'
else if RegKeyExists('HKCR','CLSID\{18DF081C-E8AD-4283-A596-FA578C2EBDC3}')
then ARes:='18DF081C-E8AD-4283-A596-FA578C2EBDC3';
if ARes = '' then exit;
ARes := RegKeyStrParamRead('HKCR','CLSID\{'+ARes+'}\InprocServer32','');
if not FileExists(ARes) then exit;
AVer := GetFileVersion(ARes, 6);
AMinVer := '';
CVer := Copy(AVer, 1, 2);
if (CVer[2]='.') or (CVer[2]=',') then CVer:=CVer[1];
if ValidInt(CVer) then
begin
case StrToInt(CVer) of
11: begin AMinVer := '11.0.08'; IMinSubVer := 8; end;
10: begin AMinVer := '10.1.11'; IMinSubVer := 11; end;
end;
if StrToInt(CVer) > 11 then exit;
end
else exit;
AExe := RegKeyStrParamRead('HKCR','Software\Adobe\Acrobat\Exe','');

if Pos('acrobat.exe',LowerCase(AExe)) > 0 then
begin
if AMinVer = '' then
begin
AddToLog(A16+#13#10);
ICounter:=ICounter+1;
end
else
begin
ARes:=RegKeyStrParamRead('HKLM','SOFTWARE\Adobe\Adobe Acrobat\'+CVer+'.0\Installer','ENU_GUID');
AVer:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'+ARes,'DisplayVersion');
if Length(AVer) > 5 then
begin
ASubVer := Copy(AVer, 6, 2);
if ValidInt(ASubVer) then ISubVer := StrToInt(ASubVer);
end
else ISubVer := 0;

if ISubVer begin
AddToLog(A17 + AVer + A18 + AMinVer);
AddToLog(''); ICounter:=ICounter+1;
end;
end;
end else
begin
if AMinVer = '' then
begin
AddToLog(A19);
AddToLog('http://get.adobe.com/reader/otherversions'+#13#10);
ICounter:=ICounter+1;
end else
begin
ARes:=RegKeyStrParamRead('HKLM','SOFTWARE\Adobe\Acrobat Reader\'+CVer+'.0\Installer','ENU_GUID');
AVer:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'+ARes,'DisplayVersion');
if Length(AVer) > 5 then
begin
ASubVer := Copy(AVer, 6, 2);
if ValidInt(ASubVer) then ISubVer := StrToInt(ASubVer);
end
else ISubVer := 0;

if ISubVer begin
AddToLog(A20 + AVer + A18 + AMinVer);
if CVer='11' then
begin
if AVer < '11.0.08' then
AddToLog('http://ardownload.adobe.com/pub/adobe/reader/win/11.x/11.0.09/misc/AdbeRdrUpd11009.msp');
end;
if CVer='10' then
begin
if AVer<'10.1' then
begin
AddToLog(A19);
AddToLog('http://get.adobe.com/reader/otherversions/');
end
else
begin
if ISubVer < 11 then
AddToLog('http://ardownload.adobe.com/pub/adobe/reader/win/10.x/10.1.12/misc/AdbeRdrUpd10112.msp');
end;
end;
if CVer='9' then
begin
AddToLog(A19);
AddToLog('http://get.adobe.com/reader/otherversions/');
end;
AddToLog(''); ICounter:=ICounter+1;
end;
end;
end;
end;

Procedure FireFoxVuln;
var
AResult,AVer,AFile:string;
Ver:integer;
FFIsOut:boolean;
begin
if RegKeyExists('HKCU','SOFTWARE\Mozilla\Mozilla Firefox') then
begin
AResult:=RegKeyStrParamRead('HKCU','SOFTWARE\Mozilla\Mozilla Firefox','');
AFile:=RegKeyStrParamRead('HKCU','SOFTWARE\Mozilla\Mozilla Firefox '+AResult+'\bin','PathToExe');
end
else if RegKeyExists('HKLM','SOFTWARE\Mozilla\Mozilla Firefox') then
begin
AResult:=RegKeyStrParamRead('HKLM','SOFTWARE\Mozilla\Mozilla Firefox','');
if not RegKeyExists('HKLM','SOFTWARE\Mozilla\Mozilla Firefox'+AResult) then
AResult:=RegKeyStrParamRead('HKLM','SOFTWARE\Mozilla\Mozilla Firefox','CurrentVersion');
AFile:=RegKeyStrParamRead('HKLM','SOFTWARE\Mozilla\Mozilla Firefox '+AResult+'\bin','PathToExe');
if AFile = '' then
AFile:=RegKeyStrParamRead('HKLM','SOFTWARE\Mozilla\Mozilla Firefox\'+AResult+'\Main','PathToExe');
end
else exit;
AResult := GetFileVersion(AFile, 6);
AVer := Copy(AResult, 1, Pos('.', AResult)-1);
if ValidInt(AVer) then Ver:=StrToInt(AVer) else exit;
FFIsOut:=true;
if (Ver = 17)and((AResult >= '17.0.7')or(AResult = '17.0.10')or(AResult = '17.0.11')) then FFIsOut:=false
else if Ver >= 22 then FFIsOut:=false;
if FFIsOut then
begin
AddToLog('Firefox '+AResult+A22);
AddToLog('http://www.mozilla.com/'+#13#10);
ICounter:=ICounter+1;
end;
end;

Procedure JavaVuln;
var
ARes, ABuld : string;
JavaIsOut:boolean;
IPos: Integer;
begin
ARes := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Runtime Environment','CurrentVersion');
JavaIsOut:=false;
ABuld := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Runtime Environment','BrowserJavaVersion');
if ABuld='' then
ABuld := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Web Start','CurrentVersion')
else if ARes='' then ARes := copy(ABuld, 1, 3);

IPos := Pos('.', ABuld);
Delete(ABuld, 1, IPos);
ABuld := NormalizeDot(ABuld);
case ARes of
'1.8': begin
if ValidFloat(ABuld) then
if StrToFloat(ABuld) < 5 then
JavaIsOut:=true;
end;
'1.7': begin
if ValidFloat(ABuld) then
if StrToFloat(ABuld) < 55 then
JavaIsOut:=true;
end;
'1.6': JavaIsOut:=true;
'1.5': JavaIsOut:=true;
'1.4': JavaIsOut:=true;
end;
if JavaIsOut then
begin
AddToLog(A23);
AddToLog(A24+#13#10);
ICounter:=ICounter+1;
end;

if IsWow64 then
begin
SetupAVZ('X64R=NN');
ARes := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Runtime Environment','CurrentVersion');
JavaIsOut:=false;
ABuld := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Runtime Environment','BrowserJavaVersion');
if ABuld='' then
ABuld := RegKeyStrParamRead('HKLM','SOFTWARE\JavaSoft\Java Web Start','CurrentVersion');
IPos := Pos('.', ABuld);
Delete(ABuld, 1, IPos);
ABuld := NormalizeDot(ABuld);
case ARes of
'1.8': begin
if ValidFloat(ABuld) then
if StrToFloat(ABuld) < 5 then
JavaIsOut:=true;
end;
'1.7': begin
if ValidFloat(ABuld) then
if StrToFloat(ABuld) < 55 then
JavaIsOut:=true;
end;
'1.6': JavaIsOut:=true;
end;
if JavaIsOut then
begin
A23 := StringReplace(A23,'32','64');
AddToLog(A23);
AddToLog(A24+#13#10);
ICounter:=ICounter+1;
end;
SetupAVZ('X64R=YY');
end;
end;

Procedure OperaVuln;
var
AResult,AVer:string;
cVer:char;
iPos:integer;
begin
AResult:=RegKeyStrParamRead('HKLM','SOFTWARE\Opera Software','Last CommandLine v2');
if AResult = '' then
AResult:=RegKeyStrParamRead('HKCU','SOFTWARE\Opera Software','Last CommandLine v2');
if AResult = '' then exit;
iPos := Pos('.exe', AResult);
AResult := Copy(AResult, 1, iPos+4);
AVer := GetFileVersion(AResult, 6);
AVer := NormalizeDot(AVer);
if ValidFloat(AVer) then
if StrToFloat(AVer) < 12.10 then
begin
AddToLog('Opera '+AVer+A25);
AddToLog('http://www.opera.com/browser/download'+#13#10);
ICounter:=ICounter+1;
end;
end;

Procedure QuickTimeVuln;
var
AResult, AVer :string;
begin
AResult:=RegKeyStrParamRead('HKCR','CLSID\{02BF25D5-8C17-4B23-BC80-D3488ABDDC6B}\InprocServer32','');
if not FileExists(AResult) then exit;
AVer:=GetFileVersion(AResult,3);
Delete(AVer,7,7);
if AVer<'7.6.8' then
begin
AddToLog('QuickTime '+AVer+A22);
AddToLog('http://www.apple.com/quicktime/download'+#13#10);
ICounter:=ICounter+1;
end;
end;

Procedure SilverlightVuln;
var
AVer :string;
begin
AVer:=RegKeyStrParamRead('HKLM','SOFTWARE\Microsoft\Silverlight','Version');
if (AVer<>'') and (AVer<'5.1.20913.0') then
begin
AddToLog('Microsoft Silverlight '+AVer+A22);
AddToLog('http://www.microsoft.com/getsilverlight/handlers/getsilverlight.ashx'+#13#10);
ICounter:=ICounter+1;
end;
end;

begin
ClearLog;
if GetAVZVersion<4.39 then begin
ShowMessage('Для этого скрипта требуется AVZ версии 4.39 или старше.'); Exit; end;
if TranslateStr('$AVZ0075')='DLLs' then
begin
bRU := false;
A00:='http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=';
A01:='Install Service Pack 4 for Windows 2000';
A02:='Windows 2000 lifecycle ended';
A03:='Install Service Pack 3 for Windows XP';
A04:='Install Service Pack 2 for Windows 2003';
A05:='Install Windows Vista Service Pack 1 and 2';
A06:='Search for critical vulnerabilities';
A07:='Vulnerability in Server Service Could Allow Remote Code Execution';
A08:='Vulnerabilities in SMB Server Could Allow Remote Code Execution';
A09:='Vulnerability in Microsoft DirectShow Could Allow Remote Code Execution';
A10:='Cumulative Security Update for Internet Explorer';
A11:='Cumulative Security Update of ActiveX Kill Bits';
A12:='Vulnerability in Help and Support Center Could Allow Remote Code Execution';
A13:='Vulnerability in Windows Shell Could Allow Remote Code Execution';
A14:='Vulnerabilities in Adobe Flash Player for Internet Explorer';
A15:='Vulnerabilities in Adobe Flash Player for Firefox/Safari/Opera';
A16:='Install Adobe Acrobat XI or uninstall vulnerable';
A17:='Adobe Acrobat ';
A18:='installed. Too dangerous to use the version below ';
A19:='Install Adobe Reader XI (11.0) or uninstall vulnerable.';
A20:='Adobe Reader ';
A21:='Install Adobe XI (11.0)';
A22:=' vulnerable. Uninstall it or install actual one';
A23:='Vulnerabilities in Java JDK and JRE (32-bit). Uninstall it and install actual one:';
A24:='http://www.java.com/en/download/manual.jsp';
A25:=A22;
A26:='Frequently used critical vulnerabilities not found.';
A27:='Vulnerabilities found: ';
A28:='Log saved in subfolder Log';
A29:='Log saved in c:\avz_log.txt file';
A30:='Vulnerability in Print Spooler Service Could Allow Remote Code Execution';
A31:='Vulnerability in Windows Shell Graphics Processing could allow remote code execution';
A32:='Install Windows Vista Service Pack 2';
A33:='Update to the AutoPlay functionality in Windows';
A34:='';
A35:='Vulnerability in Windows Kernel-Mode Drivers Could Allow Remote Code Execution';
A36:='Vulnerability in Task Scheduler Could Allow Elevation of Privilege';
A37:='Vulnerabilities in Windows Kernel Could Allow Elevation of Privilege';
A38:='Vulnerabilities in Windows Media Could Allow Remote Code Execution';
A39:='dozens.';
A40:='Vulnerability in Windows Common Controls Could Allow Remote Code Execution';
A41:='This update require the SP3 installed on Office 200';
A42:='Unauthorized Digital Certificates Could Allow Spoofing';
A43:='Vulnerability in Microsoft XML Core Services Could Allow Remote Code Execution';
A44:='This update require the SP2 installed on Office 2010'+#13#10+
'http://www.microsoft.com/en-US/download/details.aspx?id=39667';
A45:='Run Update as Administrator';
A46:='Install new Internet Explorer'+#13#10+
'http://windows.microsoft.com/en-US/internet-explorer/download-ie';
A47:='Vulnerability in Microsoft Office Could Allow Remote Code Execution';
A48:='Install Windows 7 Service Pack 1';
A49:='Vulnerabilities in Windows kernel-mode drivers could allow remote code execution';
A50:='Vulnerability in Microsoft Graphics component could allow remote code execution';
A51:='Vulnerability in Windows kernel could allow elevation of privilege';
end else
begin
bRU := true;
A00:='http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=';
A01:='Установите Service Pack 4 для Windows 2000';
A02:='Жизненный цикл Windows 2000 закончился';
A03:='Установите Service Pack 3 для Windows XP. Возможно, потребуется активация.';
A04:='Установите Service Pack 2 для Windows 2003';
A05:='Установите Service Pack 1 и 2 для Windows Vista. Возможно, потребуется активация.';
A06:='Поиск критических уязвимостей';
A07:='Уязвимость службы сервера делает возможным удаленное выполнение кода';
A08:='Уязвимости в протоколе SMB делают возможным удаленное выполнение кода';
A09:='Уязвимости в Microsoft DirectShow делают возможным удаленное выполнение кода';
A10:='Накопительное обновление безопасности для браузера Internet Explorer';
A11:='Накопительное обновление системы безопасности для битов аннулирования ActiveX';
A12:='Уязвимость в Центре справки и поддержки Windows';
A13:='Уязвимость оболочки Windows делает возможным удаленное выполнение кода';
A14:='Уязвимости в Adobe Flash Player для Internet Explorer';
A15:='Уязвимости в Adobe Flash Player для Firefox/Safari/Opera';
A16:='Установите Adobe Acrobat XI или удалите старый';
A17:='Установлен Adobe Acrobat версии ';
A18:='. Опасно использовать версии до ';
A19:='Установите Adobe Reader XI (11.0) или удалите старый.';
A20:='Установлен Adobe Reader версии ';
A22:=' устарел. Удалите его или установите новый';
A21:='Установите Adobe Reader XI (11.0)';
A23:='Множественные уязвимости в Java JDK и JRE (32-разрядная версия). Деинсталлируйте старую версию. Установите новую, если Java вам нужна:';
A24:='http://www.java.com/ru/download/manual.jsp';
A25:=' устарела. Удалите её или установите новую';
A26:='Часто используемые уязвимости не обнаружены.';
A27:='Обнаружено уязвимостей: ';
A28:='Протокол сохранён в под-папке Log';
A29:='Протокол сохранён в файле c:\avz_log.txt';
A30:='Уязвимость в службе диспетчера очереди печати делает возможным удаленное выполнение кода';
A31:='Уязвимость обработки графики в оболочке Windows делает возможным удаленное выполнение кода';
A32:='Установите Service Pack 2 для Windows Vista. Возможно, потребуется активация.';
A33:='Обновление функции автозапуска в Windows';
A34:='';
A35:='Уязвимость драйверов режима ядра Windows, делает возможным удаленное выполнение кода';
A36:='Уязвимость в планировщике заданий делает возможным несанкционированное получение прав';
A37:='Уязвимости в ядре Windows могут привести к несанкционированному получению прав';
A38:='Уязвимости в Windows Media делают возможным удаленное выполнение кода';
A39:='много.';
A40:='Уязвимость общих элементов управления Windows делает возможным удаленное выполнение кода';
A41:='Для установки этого обновления требуется установить SP3 для Office 200';
A42:='Несанкционированные цифровые сертификаты делают возможным подмену содержимого';
A43:='Уязвимость в MSXML делает возможным удаленное выполнение кода';
A44:='Для установки этого обновления требуется установить SP2 для Office 2010'+#13#10+
'http://www.microsoft.com/ru-ru/download/details.aspx?id=39667';
A45:='Запускайте обновление от имени Администратора';
A46:='Установите новый Internet Explorer'+#13#10+
'http://windows.microsoft.com/ru-ru/internet-explorer/download-ie';
A47:='Обновление для системы безопасности Office 2003';
A48:='Установите Service Pack 1 для Windows 7. Возможно, потребуется активация.';
A49:='Уязвимости драйверов режима ядра Windows делают возможным удаленное выполнение кода';
A50:='Уязвимость компонента Microsoft Graphics делает возможным удаленное выполнение кода';
A51:='Уязвимость в ядре Windows может допустить повышение уровня полномочий';
end;
if ValidDate('17.02.2011') then
begin
D01:='17.02.2011'; // MS11-020
D02:='23.07.2014'; // MS14-051
D03:='05.05.2013'; // MS13-051
D04:='21.01.2011'; // MS11-006
D05:='10.07.2009'; // KB971029
D06:='23.11.2011'; // MS11-087
D07:='02.11.2010'; // MS10-092
D08:='15.10.2010'; // MS11-011
D09:='14.10.2011'; // MS12-004
D10:='04.06.2012'; // MS12-043
D11:='03.06.2013'; // MS13-053
D12:='19.10.2013'; // MS13-096
D13:='26.11.2013'; // MS14-002
D14:='05.03.2014'; // kb2929437
end;
if ValidDate('17/02/2011') then
begin
D01:='17/02/2011';
D02:='23/07/2014';
D03:='05/05/2013';
D04:='21/01/2011';
D05:='10/07/2009';
D06:='23/11/2011';
D07:='02/11/2010';
D08:='15/10/2010';
D09:='14/10/2011';
D10:='04/06/2012';
D11:='03/06/2013';
D12:='19/10/2013';
D13:='26/11/2013';
D14:='05/03/2014';
end;
if ValidDate('02/17/2011') then
begin
D01:='02/17/2011';
D02:='07/23/2014';
D03:='05/05/2013';
D04:='01/21/2011';
D05:='07/10/2009';
D06:='11/23/2011';
D07:='11/02/2010';
D08:='10/15/2010';
D09:='10/14/2011';
D10:='06/04/2012';
D11:='06/03/2013';
D12:='10/19/2013';
D13:='11/26/2013';
D14:='03/05/2014';
end;

if ValidFloat('1.0') then
begin
Dot := '.';
notDot := ',';
end
else
begin
Dot := ',';
notDot := '.';
end;
ICounter:=0; noSP:=false; IOSVer := 0;
AddToLog(A06);
WinVuln;
MSOffice;
AdobeFlashVuln;
AdobeReaderVuln;
FireFoxVuln;
JavaVuln;
OperaVuln;
QuickTimeVuln;
SilverlightVuln;

if (ICounter=0) then
begin
AddToLog(A26);
MessageDlg(A26, mtInformation, mbOk, 0);
end
else
begin
if noSP then
AddToLog(A27+A39)
else
AddToLog(A27+IntToStr(ICounter));
SaveLog(GetAVZDirectory+'log\avz_log.txt');
if FileExists(GetAVZDirectory+'log\avz_log.txt') then
AddToLog(A28)
else
begin
SaveLog('c:\avz_log.txt');
AddToLog(A29);
end;
end;
end.


0 коммент.:

Отправить комментарий

Popular Posts