Как получить список длл который использует процесс, или были заинжекчены в него
Все загрузки происходят через LoadLibrary и его вариации, самая конечная функция LdrLoadDll, все это часть юзермодного кода загрузчика винды, он считывает файл, проецирует его в память процесса, выставляет секциям права, в конце вызывает точку входа, помимо этих действий он делает еще кучу вещей, но так же ведет специальные списки загруженных дллок.
Собственно у процесса есть специальная большая структура PEB - Process Environment Block, в ней хранится много информации о процесса включая струкуры загрузчика PEB_LDR_DATA, уже в этой структуре есть несколько списков которые и хранят загруженные модули, а именно InLoadOrderModuleList - в порядке загрузки, InMemoryOrderModuleList - в порядке адреса в памяти, InInitializationOrderModuleList - в порядке инициализации.
Все обычные апи юзают в конечном итоге именно эти списки, чтобы показать список модулей, всякие первобытные скрытия дллок так и работали с этими списками, т.е. удаляли опредленный модуль из них, и например античит переставал его видеть.
В остальном же, есть модуль мануалмапнут, т.е. спроецирован вручную в обход загрузчика винды, в списках его не будет, тогда задетектить можно только по формальным признакам, например по PE заголовку (который кстати говоря вполне может быть вырезан или зачищен), или по участкам исполняемой памяти которая не относится ни к какому модулю.