
DLL sideloading/proxying with Nim!
Ce dépôt vous permet de générer facilement des DLL Nim que vous pouvez utiliser pour le sideloading/chargement par proxy. Si vous n'êtes pas familier avec le sideloading de DLL, jetez un œil à cet article de blog.
Placez la DLL légitime (ou les DLL) que vous souhaitez proxifier dans le répertoire build de ce dépôt, puis exécutez make.
Cela générera deux .dll dans le répertoire out :
Si le sideloading réussit, vous devriez voir une boîte de dialogue apparaître et/ou un fichier écrit sur le bureau.
Pour vraiment « weaponiser » la charge utile, vous pouvez consulter le dépôt OffensiveNim pour des idées et des extraits de code prêts à l'emploi :).
dllproxy.nim est la DLL proxy qui exécutera votre charge utile et proxifiera les appels de fonction légitimes vers la ou les DLL d'originegen_def.py analyse la table d'exportation de la DLL d'origine et génère un fichier de définition de module (.def).Le fichier .def est ensuite transmis à l'éditeur de liens au moment de la compilation afin de proxifier les appels de fonction légitimes.
NimMain de la table d'exportation d'une DLL NimVoir cet article Microsoft
Remarquez la dernière ligne de ce fichier .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
Cette dernière ligne indique en gros à l'éditeur de liens de supprimer le nom de la fonction NimMain. Compiler la DLL et passer le fichier .def ci-dessus à l'éditeur de liens donne l'entrée suivante si l'on examine la table d'exportation de la .dll :
