Получение списка DLL, загруженных в текущий процесс
12.06.2017 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодня я покажу вам небольшой трюк, с помощью которого вы сможете получить список всех DLL (динамических библиотек), загруженных в ваше приложение. Хитрость заключается в том, что для этого мы вообще не будем использовать никакие API.Сперва немного теории. Каждому процессу в системе соответствует особая структура PEB (Process Enviroment Block), в ней содержится большое количество полезной информации о процессе. Адрес PEB можно узнать из другой структуры - TIB (Thread Information Block), адрес которой, в свою очередь, всегда можно получить по фиксированному адресу [FS:0]. Так вот, одно из полей PEB указывает на массив структур, в которых содержится информация о всех динамических библиотеках, загруженных в адресное пространство процесса. Этот массив называется PEB_LDR_DATA. Перебирая по очереди записи из этого массива, можно получить интересующий нас список DLL, а также адреса загрузки в память и Virtual Address точки входа этих библиотек.
Переходим к программированию. Flat Assembler "из коробки" не знает структур для работы с PEB_LDR_DATA, поэтому придется ему в этом помочь:
Code (Assembler) : Убрать нумерацию
- struct UNICODE_STRING
- Length dw ?
- MaximumLength dw ?
- Buffer dd ?
- ends
- struct LIST_ENTRY
- Flink dd ?
- Blink dd ?
- ends
- struct LDR_DATA_ENTRY
- InMemoryOrderModuleList LIST_ENTRY
- BaseAddress dd ?
- EntryPoint dd ?
- SizeOfImage dd ?
- FullDllName UNICODE_STRING
- BaseDllName UNICODE_STRING
- Flags dd ?
- LoadCount dw ?
- TlsIndex dw ?
- HashTableEntry LIST_ENTRY
- TimeDateStamp dd ?
- ends
Читать статью целиком »
Просмотров: 3678 | Комментариев: 12