
DLL-подгрузка/проксирование с помощью Nim!
Этот репозиторий позволяет легко генерировать DLL-библиотеки на Nim, которые можно использовать для sideloading/прокси-загрузки.
Если вы не знакомы с тем, что такое DLL sideloading, загляните в этот пост в блоге.
Поместите легитимную DLL (или несколько DLL), которую вы хотите проксировать, в каталог build этого репозитория, а затем выполните make.
Это создаст два файла .dll в каталоге out:
Если sideloading прошёл успешно, вы должны увидеть всплывающее окно с сообщением и/или файл, записанный на рабочий стол.
Чтобы по-настоящему «вооружить» полезную нагрузку, вы можете заглянуть в репозиторий OffensiveNim за идеями и готовыми фрагментами кода :).
dllproxy.nim — это прокси-DLL, которая выполнит вашу полезную нагрузку и будет проксировать легитимные вызовы функций к оригинальной DLL (оригинальным DLL)gen_def.py анализирует таблицу экспорта оригинальной DLL и генерирует файл определения модуля (.def).Затем этот .def файл передаётся компоновщику во время компиляции, чтобы проксировать легитимные вызовы функций.
NimMain из таблицы экспорта DLL на NimСмотрите эту статью Microsoft
Обратите внимание на последнюю строку этого .def файла:
EXPORTS
GetFileVersionInfoA=ZCnerzNI.GetFileVersionInfoA @1
GetFileVersionInfoByHandle=ZCnerzNI.GetFileVersionInfoByHandle @2
GetFileVersionInfoExA=ZCnerzNI.GetFileVersionInfoExA @3
GetFileVersionInfoExW=ZCnerzNI.GetFileVersionInfoExW @4
GetFileVersionInfoSizeA=ZCnerzNI.GetFileVersionInfoSizeA @5
GetFileVersionInfoSizeExA=ZCnerzNI.GetFileVersionInfoSizeExA @6
GetFileVersionInfoSizeExW=ZCnerzNI.GetFileVersionInfoSizeExW @7
GetFileVersionInfoSizeW=ZCnerzNI.GetFileVersionInfoSizeW @8
GetFileVersionInfoW=ZCnerzNI.GetFileVersionInfoW @9
VerFindFileA=ZCnerzNI.VerFindFileA @10
VerFindFileW=ZCnerzNI.VerFindFileW @11
VerInstallFileA=ZCnerzNI.VerInstallFileA @12
VerInstallFileW=ZCnerzNI.VerInstallFileW @13
VerLanguageNameA=ZCnerzNI.VerLanguageNameA @14
VerLanguageNameW=ZCnerzNI.VerLanguageNameW @15
VerQueryValueA=ZCnerzNI.VerQueryValueA @16
VerQueryValueW=ZCnerzNI.VerQueryValueW @17
NimMain @19 NONAME PRIVATE
Эта последняя строка, по сути, указывает компоновщику удалить имя функции NimMain. Если скомпилировать DLL и передать компоновщику указанный выше .def файл, в таблице экспорта .dll появится следующая запись:
