<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript & LangMF: исследование Win32 PE файлов]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=1717&amp;type=atom" />
	<updated>2009-02-28T14:22:35Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=1717</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript & LangMF: исследование Win32 PE файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=20119#p20119" />
			<content type="html"><![CDATA[<p>Получение информации о PE файле с помощью объекта <a href="http://forum.script-coding.com/viewtopic.php?pid=20110#p20110">JSSys3.dll</a>:<br /></p><div class="codebox"><pre><code>Set pe = CreateObject(&quot;JSSys3.Ops&quot;).GetPEFile(&quot;C:\WINDOWS\notepad.exe&quot;)
WScript.Echo pe.CompanyName
WScript.Echo pe.FileVersion
WScript.Echo pe.DateCreated
WScript.Echo pe.DateLastModified
WScript.Echo pe.ProductVersion
WScript.Echo pe.ProductName
WScript.Echo pe.FileDescription
WScript.Echo pe.Size
WScript.Echo pe.Attributes &#039; combination of: 0 - normal/archive, 1 - ReadOnly, 2 - Hidden, 4 - System
WScript.Echo pe.Name</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2009-02-28T14:22:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=20119#p20119</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript & LangMF: исследование Win32 PE файлов]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=11979#p11979" />
			<content type="html"><![CDATA[<p>Данное предварительное решение предназначено для отображения в память Win32 PE файлов и получения некоторых характерных для них параметров. В качестве надежды на возможность глубокого изучения Win32 операционных систем, с использованием скриптовых интерфейсов программирования.<br />Используется библиотека <a href="http://www.script-coding.com/dynwrap.html">dynwrap.dll</a>, а также библиотека <a href="http://www.script-coding.com/LangMF.html">LangMf.dll или установленный LangMF 7.7</a>.<br />Проверялось на Win98/Millenium/XP.<br /></p><div class="codebox"><pre><code>&#039;---------------------------------------------------------------
&#039;Данный предварительный скрипт предназначен для исследования
&#039;Win32 PE файлов и получения некоторых специфических параметров
&#039;характерных для этих файлов.
&#039;---------------------------------------------------------------
&#039;Language:            VBScript
&#039;Используется             библиотека dynwrap.dll
&#039;Используется             библиотека LangMf.dll
&#039;или установленный LangMF 7.7
&#039;OS Win98/Millenium
&#039;---------------------------------------------------------------
&#039;Дополнительно:
&#039;    http://www.wasm.ru/print.php?article=1001013
&#039;    Справка &quot;Win32 Api Первые Шаги&quot;-WinApi-шаг 23-27
&#039;    Возможно потребуется Hiew
&#039;---------------------------------------------------------------
Set RtlMoveMemoryC    =CreateObject(&quot;DynamicWrapper&quot;)
RtlMoveMemoryC.Register _
&quot;KERNEL32.DLL&quot;,&quot;RtlMoveMemory&quot;,&quot;f=s&quot;,&quot;i=lll&quot;,&quot;r=l&quot;
&#039;---------------------------------------------------------------
&#039;Константы CreateFileMapping/
Const PAGE_READONLY         =2
Const PAGE_READWRITE     =4
Const PAGE_WRITECOPY     =8
Const PAGE_EXECUTE         =16
Const PAGE_EXECUTE_READ     =32
Const SEC_IMAGE        =&amp;H1000000

&#039;Константы MapViewOfFile/
Const FILE_MAP_ALL_ACCESS     =&amp;HF0000
Const FILE_MAP_READ         =4

&#039;---------------------------------------------------------------
LMFCode= _
&quot;&lt;#Module=filecr&gt;                         \&quot; &amp; _
&quot;;/Константы CreateFile/                                  \&quot; &amp; _
&quot;Const GENERIC_READ          =&amp;H80000000              \&quot; &amp; _
&quot;Const GENERIC_WRITE      =&amp;H40000000                    \&quot; &amp; _
&quot;Const FILE_SHARE_READ      =1                  \&quot; &amp; _
&quot;Const FILE_SHARE_WRITE      =2                 \&quot; &amp; _
&quot;Const CREATE_NEW          =1                  \&quot; &amp; _
&quot;Const CREATE_ALWAYS      =2                          \&quot; &amp; _
&quot;Const OPEN_EXISTING      =3                          \&quot; &amp; _
&quot;Const OPEN_ALWAYS          =4                \&quot; &amp; _
&quot;Const FILE_ATTRIBUTE_NORMAL     =&amp;H80              \&quot; &amp; _
&quot;Const FILE_ATTRIBUTE_READONLY     =&amp;H1              \&quot; &amp; _
&quot;;--------------------------------------------------------------\&quot; &amp; _
&quot;Sub Load(cmdstr)                        \&quot; &amp; _
&quot;End Sub                            \&quot; &amp; _
&quot;;--------------------------------------------------------------\&quot; &amp; _
&quot;;Диалог открытие файла                    \&quot; &amp; _
&quot;Function OpenFileDlg()                        \&quot; &amp; _
&quot;OpenFileDlg=sys.cdlg.showopen(    &#039;Выбор PE файла&#039;, _    \&quot; &amp; _
&quot;&#039;Dll files (*.dll)|*.dll|All files (*.*)|*.*&#039;, _                                     \&quot; &amp; _
&quot;            Sys.WinInfo(&#039;system&#039;), _                      \&quot; &amp; _
&quot;            &#039;.dll&#039;)                    \&quot; &amp; _
&quot;End Function                            \&quot; &amp; _
&quot;;--------------------------------------------------------------\&quot; &amp; _
&quot;Function OpenPEFile(FilePE)                    \&quot; &amp; _
&quot;;Открытие файла                        \&quot; &amp; _
&quot;OpenPEFile=Sys.DynApi.CallFunction( _                \&quot; &amp; _
&quot;        &#039;KERNEL32.DLL&#039;,&#039;CreateFileA&#039;, _            \&quot; &amp; _
&quot;                FilePE, _            \&quot; &amp; _
&quot;                GENERIC_READ, _        \&quot; &amp; _
&quot;                FILE_SHARE_READ, _        \&quot; &amp; _
&quot;                0, _                \&quot; &amp; _
&quot;                OPEN_EXISTING, _        \&quot; &amp; _
&quot;                FILE_ATTRIBUTE_READONLY, _    \&quot; &amp; _
&quot;                0)                \&quot; &amp; _
&quot;End Function                            \&quot; &amp; _
&quot;;--------------------------------------------------------------\&quot; &amp; _
&quot;Function GetVarPtr(cVar)                    \&quot; &amp; _
&quot;    GetVarPtr=VarPtr(cVar)                    \&quot; &amp; _
&quot;End Function                            \&quot; &amp; _
&quot;&lt;#Module&gt;&quot;
&#039;---------------------------------------------------------------
Set LMActiveX=CreateObject(&quot;Atomix.LangMF&quot;)

LMFCode=Replace(LMFCode,Chr(39),Chr(34))
LMFCode=Replace(LMFCode,&quot;\&quot;,vbCRLF)
LMFCode=Replace(LMFCode,&quot;;&quot;,&quot;&#039;&quot;)
    
LMActiveX.Command LMFCode
&#039;---------------------------------------------------------------
    &#039;Диалог открытие файла
    FileName=LMActiveX.FuncRun(&quot;OpenFileDlg&quot;,1)
    If FileName=vbNullString Then
        LMActiveX.Reset
        WScript.Quit
    End If
    FileName1=FileName
    &#039;После пропуска через OpenPEFile значение FileName 
    &#039;теряет читабельность,поэтому заранее сохранено
    &#039;в переменной FileName1
    &#039;-------------------------------------------------------
    &#039;Открытие файла
    hFile=LMActiveX.FuncRun(&quot;OpenPEFile&quot;,1,FileName)
    If hFile=-1 Or hFile=0 Then
        Msgbox     &quot;Невозможно открыть указанный файл,&quot; &amp; _
            &quot;имя задано неверно,либо не задано вовсе.&quot;, _
            vbExclamation,&quot;Open File Error&quot;
        LMActiveX.Reset
        WScript.Quit
    End If
&#039;---------------------------------------------------------------
&#039;Отображение файла в память.В отображенном виде PE файл 
&#039;представляет из себя развернутую структуру с базовым адресом hMap,
&#039;содержащую байт-код.Мэппированный файл подобен просмотру в Hiew,
&#039;в режиме дизассемблера.

Set CreateFileMappingAC=CreateObject(&quot;DynamicWrapper&quot;)
CreateFileMappingAC.Register _
&quot;KERNEL32.DLL&quot;,&quot;CreateFileMappingA&quot;,&quot;i=hlllls&quot;,&quot;f=s&quot;,&quot;r=l&quot;

hMap=CreateFileMappingAC.CreateFileMappingA( _
        hFile, _
        0, _
        PAGE_READONLY, _
        0, _
        0, _
        &quot;&quot;)    
&#039;---------------------------------------------------------------
Set MapViewOfFileC=CreateObject(&quot;DynamicWrapper&quot;)
MapViewOfFileC.Register _
&quot;KERNEL32.DLL&quot;,&quot;MapViewOfFile&quot;,&quot;i=hllll&quot;,&quot;f=s&quot;,&quot;r=l&quot;
hView=MapViewOfFileC.MapViewOfFile( _
        hMap, _
        FILE_MAP_READ, _
        0, _
        0, _
        0)

&#039;Дескриптор hView соответствует адресу заголовка IMAGE_DOS_HEADER
&#039;в выделенной области памяти и является базовым адресом 
&#039;структуры отображенного файла

&#039;---------------------------------------------------------------
&#039;Получение сигнатуры заголовка IMAGE_DOS_HEADER
    DOS_SIGN=GetDataDWORD(hView,2,0)
&#039;---------------------------------------------------------------
&#039;Получение адреса структуры заголовка IMAGE_NT_HEADERS
&#039;Этот последний параметр структуры IMAGE_DOS_HEADER соответствует
&#039;смещению 60=0x3C
    IMAGE_NT_HEADERS_ADDR=GetDataDWORD(hView,4,60)
&#039;---------------------------------------------------------------
&#039;Получение сигнатуры заголовка IMAGE_NT_HEADERS
    NT_SIGN=GetDataDWORD(hView,4,IMAGE_NT_HEADERS_ADDR)
    NT_SIGN=InvertDataDWORD(NT_SIGN)
If NT_SIGN&lt;&gt;&quot;50450000&quot; Then  
Msgbox     &quot;Указанный файл не является исполняемым PE файлом для Win32&quot;, _
    vbExclamation,&quot;Open File Error&quot;
    ReleaseMapping()
    LMActiveX.Reset
    WScript.Quit()
End If
&#039;---------------------------------------------------------------
&#039;Получение количества секций PE файла из структуры
&#039;IMAGE_FILE_HEADER.Основная тонкость-правильно подобрать 
&#039;смещение и количество перемещаемых байт.
    SNUM=GetDataDWORD(hView,2,IMAGE_NT_HEADERS_ADDR+6)



&#039;---------------------------------------------------------------
WScript.Echo _
&quot;[Имя открываемого файла]&quot;     &amp; vbCR &amp; FileName1 &amp; vbCR &amp; _
&quot;[Дескриптор файла]&quot;         &amp; vbCR &amp; Hex(hFile) &amp; vbCR &amp; _
&quot;[Базовый адрес отображения]&quot; &amp; vbCR &amp; Hex(hMap) &amp; vbCR &amp; _
&quot;[Сигнатура DOS]&quot;          &amp; vbCR &amp; Hex(DOS_SIGN) &amp; vbCR &amp; _
&quot;[Адрес структуры заголовка IMAGE_NT_HEADERS]&quot; _
                &amp; vbCR &amp; Hex(IMAGE_NT_HEADERS_ADDR) &amp; vbCR &amp; _
&quot;[Сигнатура NT]&quot;          &amp; vbCR &amp; NT_SIGN &amp; vbCR &amp; _
&quot;[Количество секций файла]&quot;    &amp; vbCR &amp; SNUM
&#039;---------------------------------------------------------------
&#039;Можно использовать Hiew,чтобы проверить правильнось значения 
&#039;NumberOfSections [количество секций в файле].Откройте заданный
&#039;файл в Hiew и переведите редактор в режим дизассемблера.Нажав 
&#039;кнопку F8 можно усмотреть NumberOfSections и сравнить со значением
&#039;получаемым через скрипт.

ReleaseMapping()

&#039;************ Вспомогательные функции **************************

&#039;[Обьязательное освобождение ресурсов отображения]
&#039;[Закрытие дескрипторов]
&#039;---------------------------------------------------------------
Function ReleaseMapping()

&#039;Внимание!Перед завершением работы скрипта все дескрипторы
&#039;должны быть обьязательно закрыты.В противном случае
&#039;экземпляр мэппированного файла сохранится в памяти
&#039;что приведет к невозможности повторного исполнения
&#039;отображения файла в память.

Set UnmapViewOfFileC=CreateObject(&quot;DynamicWrapper&quot;)
UnmapViewOfFileC.Register _
        &quot;KERNEL32.DLL&quot;,&quot;UnmapViewOfFile&quot;,&quot;i=h&quot;,&quot;f=s&quot;
UnmapViewOfFileC.UnmapViewOfFile hView 

&#039;---------------------------------------------------------------
Set CloseHandleC=CreateObject(&quot;DynamicWrapper&quot;)
CloseHandleC.Register _
        &quot;KERNEL32.DLL&quot;,&quot;CloseHandle&quot;,&quot;i=h&quot;,&quot;f=s&quot;

CloseHandleC.CloseHandle hView 
CloseHandleC.CloseHandle hMap
CloseHandleC.CloseHandle hFile

    Set UnmapViewOfFileC    =Nothing
    Set RtlMoveMemoryC    =Nothing
    LMActiveX.Reset
End Function

&#039;[Инвертирование числа DWORD]
&#039;---------------------------------------------------------------
Function InvertDataDWORD(data)
data=CStr(Hex(data))
data=String(8-Len(data),&quot;0&quot;) &amp; data
    B1=Mid(data,1,2)
    B2=Mid(data,3,2)
    B3=Mid(data,5,2)
    B4=Mid(data,7,2)

    InvertDataDWORD=B4 &amp; B3 &amp; B2 &amp; B1
End Function

&#039;[Извлечение DWORD данных из отображенного файла]
&#039;---------------------------------------------------------------
Function GetDataDWORD(lpData,iSize,iOffset)
    Dim pDest,tdOffset
    GetDataDWORD=CLng(0)
    pDest=LMActiveX.FuncRun(&quot;GetVarPtr&quot;,1,GetDataDWORD)
    GetDataDWORD=CLng(0)
    RtlMoveMemoryC.RtlMovememory pDest+8,lpData+iOffset,iSize 
End Function 
&#039;---------------------------------------------------------------
&#039;Poltergeyst</code></pre></div><p>Пример результата работы скрипта:<br /></p><div class="quotebox"><blockquote><p>[Имя открываемого файла]<br />C:\WINDOWS\notepad.exe<br />[Дескриптор файла]<br />580<br />[Базовый адрес отображения]<br />5C4<br />[Сигнатура DOS]<br />5A4D<br />[Адрес структуры заголовка IMAGE_NT_HEADERS]<br />E0<br />[Сигнатура NT]<br />50450000<br />[Количество секций файла]<br />3</p></blockquote></div><p>Скрипт должен показывать такое сообщение для DLL и EXE файлов. Если файл не является PE, например текстовый, то будет показано соответствующее оповещение.<br />Автор скрипта - <strong>Poltergeyst</strong>.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-06-30T13:06:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=11979#p11979</id>
		</entry>
</feed>
