Учење формата ПЕ датотеке (4): табела увоза

Pe File Format Learning



АЖУРИРАЊЕ:

  • Ажурирана је слика на крају чланка која се налази на Интернету ради лакшег разумевања структуре табеле за увоз

1 Преглед

Увоз табеле је важнија табела у обрнутој анализи и анализи вируса. Када анализирате вирус, требало би готово прво да погледате садржај табеле за увоз програма да бисте утврдили које функције програм користи.



Табела увоза је други елемент у табели каталога података који се поставља иза табеле извоза.



2. Анализа табеле увоза

Погледајмо структуру табеле за увоз у ПЕ датотеци:



struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics DWORD OriginalFirstThunk } DUMMYUNIONNAME DWORD TimeDateStamp DWORD ForwarderChain DWORD Name DWORD FirstThunk } IMAGE_IMPORT_DESCRIPTOR

Пре поља са описом треба напоменути да је табела увоза низ, сваки елемент је горња структура, дужина је 14х, а '0' од 14х бајтова користи се као крај низа. Ако програм увози више модула. , тада би дужина овог низа требала бити 14х * (н + 1).

Следи опис поља.



ДВОРД ТимеДатеСтамп: Генерално празан, одговара 0к00000000 на горњој слици

ДВОРД ФорвардерЦхаин: одговара горњој слици 0к00000000

ДВОРД име: Увезите РВА имена модула, што одговара 0к0000230ц на горњој слици.

ДВОРД карактеристике: је спој са ОргиналФирстТхунк, што одговара горњој слици 0к0000227ц

ДВОРД ОргиналФирстТхунк: је конзорцијум са карактеристикама. Генерално, ОргиналФирстТхунк ступа на снагу. То је РВА низа ИМАГЕ_ТХУНК_ДАТА, који одговара 0к0000227ц на горњој слици.

Погледајмо структуру ИМАГЕ_ТХУНК_ДАТА.

struct _IMAGE_THUNK_DATA32{ union { DWORD ForwarderString DWORD Function the memory address of the function being input DWORD Ordinal The ordinal value of the API being entered DWORD AddressOfData The high bit is 0 to point to IMAGE_IMPORT_BY_NAME structure 2 }u1 }IMAGE_THUNK_DATA32

Знамо да је РВА који показује на ИМАГЕ_ТХУНК_ДАТА 0к0000227ц, а офсет 107цх. Почев од 107цх до краја до 0к00000000 је комплетан низ увезених функција, као што је приказано доле:

Објаснићемо појединачно поља ИМАГЕ_ТХУНК_ДАТА.

ФорвардерСтринг: Важи само када ФорвардерЦхаин у ИМАГЕ_ИМПОРТ_ДЕСЦРИПТОР има вредност

Функција: Стварна меморијска адреса увезене функције која важи само када је учитана у меморију.

Редни: Извезите серијски број функције. Табела извоза вам омогућава извоз функције помоћу серијског броја. Табела за увоз такође има одговарајући механизам. Важи само када је највиши бит ИМАГЕ_ТХУНК_ДАТА 1.

АддрессОфДата: Када је највиши бит ИМАГЕ_ТХУНК_ДАТА 0, ваља указати на низ структура ИМАГЕ_ИМПОРТ_БИ_НАМЕ. Постоји ли могућност да је највиши бит 1, а функција је увезена као име функције? Знамо да је најмањи број са максималним битом 1 такође 0к80000000. Ова позиција је системски простор, а програм је неприступачан, па је немогућ.

Структура ИМАГЕ_ИМПОРТ_БИ_НАМЕ је следећа:

struct _IMAGE_IMPORT_BY_NAME { WORD Hint BYTE Name[1] } IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME

Савет: означава редни број функције у излазној табели длл-а где се налази.

Име: означава назив функције функције коју треба унети

Следеће је последње поље ИМАГЕ_ИМПОРТ_ДЕСЦРИПТОР.

ДВОРД ФирстТхунк: Одговара 0к00002000 на слици ИМАГЕ_ИМПОРТ_ДЕСЦРИПТОР. Указује на исто место на диску као и ОригиналФирстТхунк, а такође указује на низ ИМАГЕ_ТХУНК_ДАТА. Ако се ПЕ датотека учита у меморију, функција у низу ИМАГЕ_ТХУНК_ДАТА на коју указује ФирстТхунк чува адресу функције у стварној меморији. ОригиналФирстТхунк такође указује на низ ИМАГЕ_ТХУНК_ДАТА, али адреса функције у стварној меморији није сачувана, већ низ ИМАГЕ_ИМПОРТ_БИ_НАМЕ. РВА, чува име датотеке функције увоза.

3. Резиме

1. Кључна ствар је разликовање разлике између ОригиналФирстТхунк и ФирстТхунк на диску и у меморији. Обе су исте на диску. У меморији, ИМАГЕ_ТХУНК_ДАТА структура првог ступа на снагу у пољу АддрессОфДата, па показује на РВА низа ИМАГЕ_ИМПОРТ_БИ_НАМЕ, тако да је такође познат као ИНТ, други садржи стварну адресу увезене функције у меморији, тако да назива се ИАТ.

2. Потребно је појаснити да табела увоза у ПЕ, односно структура ИМАГЕ_ИМПОРТ_ДЕСЦРИПТОР налази се у низу, значи да у ПЕ датотеци може бити више табела за увоз, а у свакој табели увоза постоје само по један ОригиналФирстТхунк и ФирстТхунк , али они показују да је ИМАГЕ_ТХУНК_ДАТА низ. Број елемената у низу представља број функција. Ако је поље АддрессОфДата у ИМАГЕ_ТХУНК_ДАТА важеће, оно упућује на низ ИМАГЕ_ИМПОРТ_БИ_НАМЕ. Број елемената у овом низу може се разликовати од броја у ИМАГЕ_ТХУНК_ДАТА, јер постоји. Функција нема име.

3. Последњи низ мора бити попуњен са 0, дужина је величина елемента низа, а низ се завршава са 00.