Проверка целостности Windows Script Host

Тема в разделе "Visual Basic 6 / Сценарии VBScript, JScript", создана пользователем Dragokas, 22 ноя 2013.

  1. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.309
    А) Тест без повышения привилегий - архив Test_Script_Host_2.zip

    1. Скачайте приложенный архив.
    2. Распакуйте.
    3. Запустите файл Test_Script_Host.cmd
    4. Выложите в теме содержимое файла(ов) Host_log_x....txt (будет создан рядом со скриптом).

    Б) Тест с повышением привилегий - архив Test_Script_Host.zip

    1. Скачайте приложенный архив.
    2. Распакуйте.
    3. Запустите файл Test_Script_Host.vbs
    4. Подтвердите кнопкой "Да" вопрос из диалогового окна "Контроль учетных записей"
    5. Выложите в теме содержимое файла Host_log.txt (будет создан рядом со скриптом).

    На исправной системе (Windows Vista и выше) лог будет выглядеть так:
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    RegWrite Admin. - FAILED: -2147024891-Неверная ссылка на корень в разделе реестра "HKLM\SOFTWARE\Elevation_Test\".
    ===============================
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    RegWrite Admin. - OK.
    ===============================
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    All tests compeleted.
    Код (vb.net):

    Option Explicit
    On Error Resume Next
    Const DQ = """", SP = " ", BS = "\"

    Dim ScriptPath: ScriptPath = WScript.ScriptFullname: ScriptPath = left(ScriptPath, instrrev(ScriptPath, "\"))

    'Дозапись в протокол
    Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim TS: Set TS = FSO.OpenTextFile(ScriptPath & "Host_log.txt", 8, True)

    Dim oShell: Set oShell = CreateObject("WScript.Shell")
    AddtoLog Err, "WScript.Shell Object"
    Dim oShellApp: Set oShellApp = CreateObject("Shell.Application")
    AddtoLog Err, "Shell.Application Object"
    Dim oNetwork: Set oNetwork = CreateObject("WScript.Network")
    AddtoLog Err, "WScript.Network Object"
    Dim oADO: Set oADO = CreateObject("ADODB.Stream")
    AddtoLog Err, "ADODB.Stream Object"

    Test_WMI()

    'Проверка админ. привилегии
    Dim AdminKey: AdminKey = "HKLM\SOFTWARE\Elevation_Test\"
    'Если уже есть значение, то скрипт дважды перезапустился
    Err.Clear
    Dim Status: Status = oShell.RegRead(AdminKey)
    if err = 0 then
       TS.WriteLine "All tests compeleted."
       oShell.RegDelete AdminKey
       WScript.Quit
    else
       Err.Clear
    end if
    'Пытаемся записать ключ
    oShell.RegWrite AdminKey, "1"
    'Если успех
    AddToLog Err, "RegWrite Admin."
    Dim isAdmin
    if Err = 0 then isAdmin = true else Err.Clear

    TS.WriteLine "==============================="

    'Если привилегия еще не получена
    if not isAdmin then
       'Запуск через GUI Host
      oShellApp.ShellExecute oShell.ExpandEnvironmentStrings("%WinDir%\system32\wscript.exe"), DQ & WScript.ScriptFullName & DQ, "", "runas", 1
       WScript.Quit
    else
       'Запуск через Console Host
      oShellApp.ShellExecute oShell.ExpandEnvironmentStrings("%WinDir%\system32\cscript.exe"), DQ & WScript.ScriptFullName & DQ, "", "runas", 1
       WScript.Quit
    End If

    Function AddtoLog(oErr, Source)
       if oErr.Number = 0 then
         TS.WriteLine Source & " - OK."
       else
         TS.WriteLine Source & " - FAILED: " & oErr.Number & "-" & oErr.Description
       end if
      if oErr <> 0 then Err.Clear
    End function

    Function Test_WMI()
       Dim colOS: Set colOS = GetObject("winmgmts:\root\cimv2").ExecQuery("Select * from Win32_OperatingSystem")
       AddtoLog Err, "WMI Object"
       Dim oOS
       For Each oOS In colOS
        strOSLong = oOS.Version
       Next
       TS.WriteLine "OS: " & strOSLong
    End Function
     

    Вложения:

    Последнее редактирование: 20 окт 2014
    Kиpилл нравится это.
  2. shestale
    Оффлайн

    shestale Ассоциация VN/VIP Преподаватель

    Сообщения:
    8.059
    Симпатии:
    4.488
    Dragokas, в каких ситуациях может потребоваться такая проверка?

    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    RegWrite Admin. - OK.
    ===============================
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    All tests compeleted.
     
    Kиpилл нравится это.
  3. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.309
    shestale, писал специально для Win7. Для общих случаев более детальный отчет сделаю.
    Такая проверка сделана специально для этого случая: http://safezone.cc/threads/virulogs-otkryvaetsja-i-zakryvaetsja-bez-vypolnenija-zadachi.22750/
    Судя по присланному мне листингу отладки, там высокая вероятность повреждения системного файла cscript.exe, ошибок в CMD-части самого ViruLogs, не было.
    Хочу убедится.
    Этот скрипт запускается двойным кликом (запуск произойдет через Wscript.exe - GUI-версия), и на практике с логированием проверяем возможность
    повышения привилегий через сам wscript.exe, затем через cscript.exe,
    ++ работоспособность объектов Shell.Application, WScript.Network, ADODB.Stream,
    + работу службы WMI.
    У тебя скрипт запущен уже с админскими правами (есть право записи в улей HKLM). Все в порядке.
     
    Последнее редактирование: 22 ноя 2013
    shestale и Kиpилл нравится это.
  4. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.226
    Симпатии:
    4.979
    Dragokas, надо добавить открытие папки с логом на случай запуска из архива.
     
    Dragokas нравится это.
  5. akok
    Оффлайн

    akok Команда форума Администратор

    Сообщения:
    12.455
    Симпатии:
    13.954
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    RegWrite Admin. - FAILED: -2147024891-Неверная ссылка на корень в разделе реестра "HKLM\SOFTWARE\Elevation_Test\".
    ===============================
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    RegWrite Admin. - OK.
    ===============================
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    All tests compeleted.

     
    Dragokas нравится это.
  6. Phoenix
    Оффлайн

    Phoenix Активный пользователь

    Сообщения:
    1.853
    Симпатии:
    1.837
    win8.0x64
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    RegWrite Admin. - FAILED: -2147024891-Неверная ссылка на корень в разделе реестра "HKLM\SOFTWARE\Elevation_Test\".
    ===============================
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    RegWrite Admin. - OK.
    ===============================
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    All tests compeleted.

    А в таком случае как быть ?
    scripthost.png

    --- Объединённое сообщение, 22 ноя 2013, Дата первоначального сообщения: 22 ноя 2013 ---
    XP Home SP3
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    All tests compeleted.
    WScript.Shell Object - OK.
    Shell.Application Object - OK.
    WScript.Network Object - OK.
    ADODB.Stream Object - OK.
    WMI Object - OK.
    RegWrite Admin. - OK.
    ===============================

    А такое вам известно ? Поработал Sector12.
    [22.11.2013 - 21:21:08,70] - Запуск ViruLogs Collector
    [22.11.2013 - 21:21:17,06] - System Recovery ERROR:
    "WMIC" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.
     
    Последнее редактирование: 22 ноя 2013
  7. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.309
    Похоже что-то прибило c:\Windows\System32\wbem\wmic.exe
    Можно переписать эту часть на VBScript. Если файлы службы WMI не повреждены, что не факт, то отработает, иначе и Автологгер не справится тоже.
    Это если Script Host отключен. При этом для применения политики блокировки нужно перезагрузить систему, а для включения - нет.
    Добавлю обход ограничения в следующую версию.
    --- Объединённое сообщение, 22 ноя 2013 ---
    akok, по крайней мере теперь знаю, что чисто VBScript-овая версия запустится нормально.
    Повреждения сервера сценариев не было.
    Koza Nozdri, можно рассмотреть необходимость включения EXE-файла процессора в состав сборки на случай его повреждения на заболевшей системе.
     
    Последнее редактирование: 22 ноя 2013
    Kиpилл и Phoenix нравится это.
  8. Phoenix
    Оффлайн

    Phoenix Активный пользователь

    Сообщения:
    1.853
    Симпатии:
    1.837
    Neshta ! Откуда то... такую проверку можно сделать- if exist "%windir%\directx.sys" ,"%temp%\3582-490" then neshta
     
  9. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.309
    Phoenix, незачем. Просто эта часть функции не будет работать.
    Проверку можно организовать:
    1) через CMD:
    Код (DOS):
    2>NUL >&1 WMIC OS Get /Value
    if %errorlevel% neq 0 echo И дальше устанавливаем флаг, чтобы не использовать WMI, например, предупредить пользователя, что контрольную точку ему нужно сделать самостоятельно.
     
    2) через VBscipt:
    Код (vb.net):
    on error resume next
    Set colOS = GetObject("winmgmts:\root\cimv2").ExecQuery("Select * from Win32_OperatingSystem")
    if err <> 0 then msgbox "Здесь также - WMI не работает."
     
    Phoenix нравится это.
  10. Drongo
    Оффлайн

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.905
    Симпатии:
    8.222
    Ооо, жизненная ситуация, сам сталкивался, причём с активным. Зверь.
    Это "что-то" уже озвучено, в курсе что такое Sector12 ?
     
    Kиpилл нравится это.
  11. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.226
    Симпатии:
    4.979
    В описании понравилось:
    Ну это отвлекся...файловое,тут комбайны не помогут.
     
  12. Drongo
    Оффлайн

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.905
    Симпатии:
    8.222
    Ага. Заражает системные файлы с офигительной скоростью. У меня он даж на диск D: как-то перекинулся в папку инсталляторов. Первый раз думал переустановка поможет, а нифига, переставляю, ставлю проги получаю вирь. Долго не мог вкурить в чём дело. Пока не проверил салитикиллером и авзтулсом.
     
    Dragokas нравится это.
  13. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.226
    Симпатии:
    4.979
    Drongo, а антивирус то молчал что ли?
    У меня курейтик мигом замаячил.
    Я тогда под лив и логи заново снял.
    Помогло со второго раза.
     

Поделиться этой страницей