<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: некоторые интересные объекты Automation]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=4489&amp;type=atom" />
	<updated>2010-05-18T17:06:49Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=4489</id>
		<entry>
			<title type="html"><![CDATA[VBScript: некоторые интересные объекты Automation]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=35889#p35889" />
			<content type="html"><![CDATA[<p>Просматривая наличествующие у себя объекты, обратил внимание на некоторые из них.</p><p><strong>Library «OLEPRNLib»</strong> (%systemroot%\system32\oleprn.dll). Из интересных методов:<br />* .ToUtf8(): конвертирование строки в UTF-8;<br />* .ToUnicode(): конвертирование строки из указанной кодировки в Unicode (в результате получается обычная строка VBScript);<br />* .DecodeUnicodeName()/.EncodeUnicodeName(): пара взаимно дополняющих друг друга методов, что именно получается в результате «.Encode…», пока не очень понял.</p><p><em>Образец кода (из-за особенностей движка форума) находится во вложенном файле «OleCvtDemo.zip».</em></p><p><strong>Library «COMPATUILib»</strong> (%systemroot%\system32\compatui.dll). Часть комплекса Мастера совместимости программ. Из вкусного меня заинтересовало:<br />* .CheckAdminPrivileges(): проверка наличия административных привилегий у текущего пользователя, возвращает «1»/«0» (не True/False!); меня сие заинтересовало аналогично этому: <a href="http://forum.script-coding.com/viewtopic.php?id=3840">CMD/BAT: наличие административных привилегий у текущего пользователя</a>;<br />* .IsExecutableFile(): определение является ли указанный файл исполняемым; определение, похоже, ведётся по сигнатурам в заголовке файла; может сгодиться при борьбе с маскирующимися исполняемыми файлами (вместо использования внешних утилит, наподобие trid.exe, PEiD.exe и т.п.);<br />* .RunApplication(): запуск файла; для чего может сгодиться — пока не знаю <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p><p>Образец кода:<br /></p><div class="codebox"><pre><code>Option Explicit

Dim objUtil
Dim objFSO

Dim intProcessID


Set objUtil = WScript.CreateObject(&quot;CompatUI.Util.1&quot;)
Set objFSO  = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)

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

Set objFSO  = Nothing
Set objUtil = Nothing

WScript.Quit 0</code></pre></div><p>Из плюсов — насколько я понял, обе библиотеки в XP SP2/SP3 присутствуют «из коробки». Из минусов — информации по ним практически никакой нет.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2010-05-18T17:06:49Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=35889#p35889</id>
		</entry>
</feed>
