
Une implémentation en Nim du chargement réflexif de PE depuis la mémoire
Une implémentation Nim du chargement réflexif de PE depuis la mémoire. La base de ce code provient de RunPE-In-Memory - que j'ai porté vers Nim.
Vous devez installer les dépendances suivantes :
nimble install ptr_math winim
Je n'ai testé cela qu'avec la version 1.6.2 de Nim, veuillez donc utiliser cette version pour les tests ou je ne peux garantir l'absence d'erreurs avec une autre version.
Si vous souhaitez passer des arguments à l'exécution ou ne pas en passer du tout, compilez via :
nim c NimRunPE.nim
Si vous voulez coder en dur des arguments personnalisés, modifiez const exeArgs selon vos besoins et compilez avec :
nim c -d:args NimRunPE.nim - cela a été contribué par @glynx, merci ! 😎
Si vous voulez un support complet des rappels Thread Local Storage (TLS), permettant l'exécution de PE Rust etc, compilez avec :
nim c -d:full_tls NimRunPE.nim
Remerciements à BlackBone & blog de lander/solstice-loader pour l'implémentation de l'option full_tls.
La technique elle-même est assez ancienne, mais je n'avais pas encore trouvé d'implémentation en Nim. Cela a donc changé maintenant. :)
Si vous prévoyez de charger, par exemple, Mimikatz avec cette technique - assurez-vous de compiler vous-même une version à partir des sources, car les binaires de version officielle n'acceptent pas les arguments après avoir été chargés de manière réflexive par ce chargeur. Pourquoi ? Je ne sais vraiment pas, c'est étrange mais c'est un fait. Si vous compilez vous-même, cela fonctionnera toujours :
Mon Packer privé est également armé avec cette technique - mais toutes les fonctions Win32 y sont remplacées par des Syscalls. Cela rend la technique plus furtive.