Win32 и техники злоупотребления ядром для пентестеров
Техники злоупотребления Win32 и ядром для пентестеров и red-team-специалистов от @UVision и @RistBS
Режим разработчика включён, открыт для любой помощи :)
DOS_HEADER : Первый заголовок PE, содержит сообщение MS DOS ("This programm cannot be run in DOS mode...."), MZ-заголовок (магические байты для идентификации PE) и немного заглушки.IMAGE_NT_HEADER : Содержит сигнатуру PE-файла, заголовок файла и опциональный заголовокSECTION_TABLE : Содержит заголовки секцийSECTIONS : Не заголовок, но полезно знать: это секции PEПодробнее : https://www.researchgate.net/figure/PE-structure-of-normal-executable_fig1_259647266
Простой разбор PE для получения абсолютных адресов IAT и ILT:
GetModuleHandleA(NULL);BaseAddress+PIMAGE_DOS_HEADER.e_lfnanew (RVA NT_HEADER)OptionnalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT] из PIMAGE_NT_HEADERIMAGE_DATA_DIRECTORY.VirtualAddress (RVA структуры IMAGE_IMPORT_DIRECTORY)BaseAddress + IMAGE_IMPORT_DIRECTORY.VirtualAddress (RVA структуры IMAGE_IMPORT_DESCRIPTOR)EAT разрешает все функции, экспортируемые PE, а также разрешает DLL. Она определена в структуре IMAGE_EXPORT_DIRECTORY:```c
typedef struct _IMAGE_EXPORT_DIRECTORY {
DWORD Characteristics;
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
DWORD Name; // name of DLL
DWORD Base; // first ordinal number
DWORD NumberOfFunctions; // number of entries in EAT
DWORD NumberOfNames; // number of entries in (1) (2)
DWORD AddressOfFunctions; // RVA EAT and contains also RVA of exported functions
DWORD AddressOfNames; // Pointer array contains address of function names
DWORD AddressOfNameOrdinals; // Pointer array contains address of ordinal number of functions (index in AddressOfFunctions)
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
Обратите внимание, что EAT определена в DLL, а не в «настоящем» PE (PE будет использовать EAT загруженной DLL для разрешения указателей на функции, которые он хочет использовать).
### Определение адреса функции