INT / IAT ( Import ๊ด๋ จ Table )
๋ผ์ด๋ธ๋ฌ๋ฆฌ / DLL ํ์ผ SYS ํ์ผ
์ ํ๋ฆฌ์ผ์ด์
์ด ์คํํ ๋
DOS ์์ ์ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ๋ถ ํฌํจํด์ ์ฝ๋ฉ
ํจ์๋ฅผ ๋ถ๋ฌ์ค๋ ์์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์
kernel32.dll ๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ์ฌ๋ฌ๊ฐ์ ํจ์๋ค
Import Name Table > DLL ์ด๋ฆ์ ์ฐพ๊ณ
Import Application Table > ํจ์๋ฅผ ์ฐพ๋๋ค
MAGE_IMPORT_DESCRIPTOR {
union {
DWORD Characteristics;
DWORD OriginalFirstThunk; // INT(Import Name Table) address (RVA)
};
DWORD TimeDateStamp;
DWORD ForwarderChain;
DWORD Name; // library name string address (RVA)
DWORD FirstThunk; // IAT(Import Address Table) address (RVA)
} IMAGE_IMPORT_DESCRIPTOR;
1. NAME์ ์์น๋ฅผ ๋ฐ๋ผ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(DLL)์ ์ด๋ฆ์ ํ์
ํ๋ค
2. OriginalFirstThunk(INT)์ ์ฃผ์๋ฅผ ๋ฐ๋ผ๊ฐ์ ํจ์ ์์ ์ฃผ์๋ฅผ ํ์
ํ๋ค
3. FirstThunk(IAT)์ ์ฃผ์๋ฅผ ๋ฐ๋ผ๊ฐ์ ์ค์ ๋ก๋ฉ ์ฃผ์๋ฅผ ํ์
ํ๋ค.
comdlg32.dll ์ค PageSetupDlgW ํจ์ ํธ์ถ
๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ธ
IAT ์ค์ ๋ก๋ฉ ์ฃผ์ ํ์
EAT
EAT์ IAT์ ์ฐจ์ด์
IAT๋ Import์ด๋ฏ๋ก ์ฌ๋ฌ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ด
EAT๋ ๋ณด๋ด๋ ์ญํ ๋ง ํ๊ธฐ ๋๋ฌธ์ ๋จ ํ๊ฐ๋ง ์กด์ฌ
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ๋ค์์ ํจ์ ์กด์ฌ
๊ทธ ํจ์๋ณ๋ก ๋ฐฐ์ด(Oridnal,์์)์ด ์กด์ฌ
typedef struct _IMAGE_EXPORT_DIRECTORY {
DWORD Characteristics
DWORD TimeDateStamp
WORD MajorVersion
WORD MinorVersion
DWORD Name // kernel32.dll
DWORD Base
DWORD NumberOfFunctions // kernel32.dll์ ํจ์ ๊ฐ์ 03B9
DWORD NumberOfNames // kernel32.dll์ ์ด๋ฆ์ ๊ฐ์ง ํจ์ ๊ฐ์ 03B9
DWORD AddressOfFunctions // ํจ์ ์ฃผ์ ๋ฐฐ์ด(EAT) RVA 2654 > RAW 1A54
DWORD AddressOfNames //ํจ์๋ช
๋ฐฐ์ด RVA 3538 > RAW 2938
DWORD AddressOfNameOrdinals // ํจ์ ์์ ๋ฐฐ์ด RVA 441C > RAW 381C
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY
1. AddressOfNames์ผ๋ก kernel32.dll ํ์ผ์ ํจ์ ๋ฐฐ์ด๋ก ์ด๋
> 3๋ฒ์งธ ๋ฐฐ์ด์ธ index[2] 4BB3๋ก ์ด๋
> 4B3B - 1000 + 400 = 3FB3
2. AdderessOfNameOrdinals๋ก ordinal์ ํ์ธํ๋ค
3. AddressOfFunctions์ผ๋ก ์ค์ ๋ฉ๋ชจ๋ฆฌ์์ ๋ก๋ฉ๋๋ ๊ฐ์ ๊ตฌํ๋ค