1

Тема: VBScript: некоторые интересные объекты Automation

Просматривая наличествующие у себя объекты, обратил внимание на некоторые из них.

Library «OLEPRNLib» (%systemroot%\system32\oleprn.dll). Из интересных методов:
* .ToUtf8(): конвертирование строки в UTF-8;
* .ToUnicode(): конвертирование строки из указанной кодировки в Unicode (в результате получается обычная строка VBScript);
* .DecodeUnicodeName()/.EncodeUnicodeName(): пара взаимно дополняющих друг друга методов, что именно получается в результате «.Encode…», пока не очень понял.

Образец кода (из-за особенностей движка форума) находится во вложенном файле «OleCvtDemo.zip».

Library «COMPATUILib» (%systemroot%\system32\compatui.dll). Часть комплекса Мастера совместимости программ. Из вкусного меня заинтересовало:
* .CheckAdminPrivileges(): проверка наличия административных привилегий у текущего пользователя, возвращает «1»/«0» (не True/False!); меня сие заинтересовало аналогично этому: CMD/BAT: наличие административных привилегий у текущего пользователя;
* .IsExecutableFile(): определение является ли указанный файл исполняемым; определение, похоже, ведётся по сигнатурам в заголовке файла; может сгодиться при борьбе с маскирующимися исполняемыми файлами (вместо использования внешних утилит, наподобие trid.exe, PEiD.exe и т.п.);
* .RunApplication(): запуск файла; для чего может сгодиться — пока не знаю .

Образец кода:

Option Explicit

Dim objUtil
Dim objFSO

Dim intProcessID


Set objUtil = WScript.CreateObject("CompatUI.Util.1")
Set objFSO  = WScript.CreateObject("Scripting.FileSystemObject")

With objUtil
    WScript.Echo ".CheckAdminPrivileges():", .CheckAdminPrivileges()
    WScript.Echo
    
    WScript.Echo ".IsExecutableFile():"
    WScript.Echo "---------------------------"
    WScript.Echo "c:\boot.ini                       :", .IsExecutableFile("c:\boot.ini")
    WScript.Echo "c:\WINDOWS\system32\more.com      :", .IsExecutableFile("c:\WINDOWS\system32\more.com")
    WScript.Echo "c:\WINDOWS\system32\notepad.exe   :", .IsExecutableFile("c:\WINDOWS\system32\notepad.exe")
    WScript.Echo "c:\WINDOWS\system32\eventquery.vbs:", .IsExecutableFile("c:\WINDOWS\system32\eventquery.vbs")
    WScript.Echo "c:\WINDOWS\system32\shell32.dll   :", .IsExecutableFile("c:\WINDOWS\system32\shell32.dll")
    
    ' Несуществующие файлы
    WScript.Echo "Несуществующий файл c:\qww.txt    :", .IsExecutableFile("c:\qww.txt")
    WScript.Echo "Несуществующий файл c:\qww.exe    :", .IsExecutableFile("c:\qww.exe")
    
    ' Определение происходит не по расширению файла, а, похоже, по сигнатурам
    ' в заголовке файла — удобно будет отлавливать заразу.
    '
    ' Скопируем calc.exe в c:\MyFile.txt
    objFSO.CopyFile "C:\WINDOWS\system32\calc.exe", "c:\MyFile.txt"
    
    ' Демонстрируем, что c:\MyFile.txt действительно исполняемый файл, запуская его:
    With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
        .Get("Win32_Process").Create "c:\MyFile.txt", Null, Null, intProcessID
        WScript.Echo "ProcessID :", intProcessID
        WScript.Sleep 3000
        .Get("Win32_Process='" & CStr(intProcessID) & "'").Terminate
    End With
    
    ' Проверим, исполняемый ли файл c:\MyFile.txt?
    WScript.Echo "c:\MyFile.txt (он же calc.exe) :", .IsExecutableFile("c:\MyFile.txt")
    
    ' Удаляем скопированный файл c:\MyFile.txt
    objFSO.DeleteFile "c:\MyFile.txt", True
    WScript.Echo "---------------------------"
    WScript.Echo
    
    WScript.Echo ".RunApplication(), notepad.exe"
    .RunApplication "", "notepad.exe", False
End With

Set objFSO  = Nothing
Set objUtil = Nothing

WScript.Quit 0

Из плюсов — насколько я понял, обе библиотеки в XP SP2/SP3 присутствуют «из коробки». Из минусов — информации по ним практически никакой нет.

Post's attachments

OleCvtDemo.zip 437 b, 320 downloads since 2010-05-18 

You don't have the permssions to download the attachments of this post.