
Moniteur de processus .NET qui accroche le CLR au niveau natif, extrait les assemblys réflexifs de la mémoire et vérifie l'intégrité AMSI/ETW par rapport aux binaires sur disque.
outil windows que j'ai fait parce que j'en avais marre de fixer les forks de jlaive dans les échantillons de malware sans rien de public pour réellement les démonter à l'exécution.
en bref, c'est un moniteur de processus .net qui hook le clr au niveau natif, suit les chargements d'assembly par réflexion, et dump automatiquement les pe directement depuis la mémoire. il vérifie aussi l'intégrité d'amsi et d'etw par rapport aux binaires originaux sur disque tout en détectant les techniques de bypass telles que le patch de chaînes dans clr.dll et l'utilisation directe de LoadFromBuffer.
où trouver des échantillons ? je recommande de jeter un œil à https://tria.ge (pas une pub) et tu peux télécharger n'importe quel échantillon que tu veux et filtrer par famille
tu te demandes peut-être pourquoi le nom nemesis ?
parce qu'il représente exactement le but de l'outil. un nemesis est quelque chose qui constitue un défi constant ou une perte pour un adversaire et c'est l'idée derrière ce projet.
dans la mythologie grecque nemesis était l'esprit de la vengeance divine, celui qui rendait la monnaie de leur pièce à tous ceux qui devenaient trop arrogants ou qui se croyaient intouchables. un peu trop à propos pour des malwares qui se vantent d'être "fud" si tu veux mon avis.
je suis analyste malware. si tu fais ce boulot (un loisir pour moi) assez longtemps tu commences à voir les mêmes chaînes de loader encore et encore surtout depuis que jlaive (aussi appelé crybat) a explosé et que chaque script kiddy l'a forké.
le schéma est bête comme chou mais pénible comme pas possible à gérer :
something.bat → obfuscated powershell → csharp stub → your actual payload
tu double-cliques un .bat qui ressemble à de la salade de mots. cmd lance powershell avec un mur de bruit. powershell déchiffre/décompresse un stub .net (aes, gzip, base64). ce stub patche amsi + etw, charge par réflexion le vrai exe/dll en mémoire, et c'est fini rien de sympathique n'atteint jamais le disque sous une forme utile.
ça m'a agacé. il n'y a pas vraiment de bon outil public visant à combattre cette chaîne spécifique : hooker là où la payload .net se matérialise réellement, la dumper avant que le processus ne se bouffe lui-même, attraper les patchs amsi/etw que ces stubs font toujours. donc j'ai construit nemesis.
pas une solution miracle. pas pour remplacer ton sandbox. mais ça te donne quelque chose de concret à exécuter contre un .bat suspect sur une machine de test et à en extraire réellement des artefacts.
launcher (Launcher.exe)
Nemesis.dll avant que le thread principal ne s'exécutenemesis dll (Nemesis.dll)
nLoadImagenLoadFileAssemblyNative::LoadFromBuffer (pattern résolu à partir de nLoadImage)%TEMP%\Nemesis_dumpsamsi.dll / ntdll.dll avec les copies sur disque (attrape le patch classique ret sur AmsiScanBuffer / EtwEventWrite).rdata du clr quand le clr est chargé (certains bypass patchent celles-ci à la place, il y a un excellent papier vxug là-dessus appelé ; 2024-11-21 - New AMSI Bypss Technique Modifying CLRDLL in Memory.pdf )%TEMP%\Nemesis.log il a aussi ENABLE_VIRTUAL_TERMINAL_PROCESSING pour éviter les problèmes avec une console disons bizarre :Den gros : laisse la chaîne du bat s'exécuter, attrape la payload là où le crypter la charge réellement, et log les astuces d'évasion en chemin.
il faut visual studio 2022+ avec c++ desktop + masm (x64).
ouvre Nemesis.slnx, choisis Release | x64, build la solution.
c'est le cas d'usage réel : pointe-le vers un bat suspect et regarde ce qui en sort :
cd x64\Release
.\Launcher.exe "C:\path\to\suspicious.bat"
les arguments supplémentaires après -- sont passés à la cible :
.\Launcher.exe myapp.exe -- --some-flag
chemin de dll personnalisé :
.\Launcher.exe --dll C:\path\Nemesis.dll myapp.exe
artefacts :
%TEMP%\Nemesis.log%TEMP%\Nemesis_dumpsest :
n'est pas :
LNK1104 ? quelque chose a encore nemesis.dll chargé, tue la cible et rebuildpwsh.exe pendant le build est inoffensif, ignore-lesi tu veux comprendre ce que tu combats :
en utilisant nemesis tu acceptes ceci. il est fourni tel quel avec aucune garantie — tu assumes tous les risques.