Wirusy komputerowe

Page 19

Ten zestaw zawiera informacje o importowanej funkcji. Pole Hint zawiera indeks do tabeli exportów, która znajduje się w pliku DLL. Zdarza się, że niektóre linkery ustawiają tu wartość 0 – zatem pole to nie jest za bardzo istotne. Ważniejsze okazuje się jest Name1, które zawiera nazwę ASCIIZ (null terminated) importowanej funkcji. Powracając do IMAGE_IMPORT_DESCRIPTOR, mamy kolejne pole TimeDateStamp, które zawiera datę utworzenia pliku z którego importujemy funkcję, często zawiera wartość równą zero. ForwarderChain pole reprezentuje technikę Export Forwarding (opisaną w dokumentacji Microsoftu). W Windows NT KERNEL32.DLL przekazuje niektóre eksportowane funkcje do NTDLL.DLL. Aplikacja wywołując jakąś funkcje z KERNEL32.DLL może tak naprawdę wywoływać funkcje zdefiniowaną w NTDLL.DLL, właśnie dzięki Export Forwarding. Name1 zawiera RVA do nazwy ASCIIZ pliku z którego importujemy funkcje, np. KERNEL32.DLL, USER32.DLL, MOJA_BILBIOTEKA.DLL FirstThunk pole to ma bardzo podobne znaczenie do OriginalFirstThunk, to znaczy zawiera adres RVA tablicy struktur IMAGE_THUNK_DATA, jednak taka tablica różni się od poprzedniej przeznaczeniem. Mamy zatem dwie tablice wypełnione elementami RVA struktur IMAGE_THUNK_DATA, czyli dwie identyczne tablice. Adres pierwszej jest przechowywany w OriginalFirstThunk, drugiej w FirstThunk, jak pokazano na rysunku: IMAGE_IMPORT_DESCRIPTOR

OriginalFirstThunk

TimeDateStamp ForwarderChain

Name1

Nazwa pliku importu (DLL)

FirstThunk OriginalFirstThunk

IMAGE_IMPORT_BY_NAME

FirstThunk

IMAGE_THUNK_DATA

34

Funkcja 1

IMAGE_THUNK_DATA

IMAGE_THUNK_DATA

67

Funkcja 2

IMAGE_THUNK_DATA

IMAGE_THUNK_DATA

21

Funkcja 3

IMAGE_THUNK_DATA

IMAGE_THUNK_DATA

12

Funkcja 4

IMAGE_THUNK_DATA

...

...

...

IMAGE_THUNK_DATA

37

Funkcja n

IMAGE_THUNK_DATA

Hint

Name1

NULL

NULL

Schemat importu funkcji

Tych wpisów w obydwóch tabelach będzie tak wiele, jak funkcji które importujemy z konkretnego DLLa. Zatem jeżeli program importuje n funkcji z pliku USER32.DLL, to pole Name1 w strukturze IMAGE_IMPORT_DESCRIPTOR będzie zawierało RVA stringu jego nazwy i będzie po n elementów IMAGE_THUNK_DATA w obydwu tablicach. Po co w programie dwa egzemplarze takiej tablicy? Pierwsza wskazywana przez pole OriginalFirstThunk pozostaje taka sama, nie jest zmieniana. Druga (FirstThunk) jest modyfikowana przez systemowy program 19


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.