
SHAREM est un framework d'analyse de shellcode, capable d'émuler plus de 45 000 WinAPIs et pratiquement tous les syscalls Windows. Il contient également son propre désassembleur personnalisé, avec de nombreuses fonctionnalités innovantes, telles que la capacité d'afficher le désassemblage désobfusqué d'un shellcode encodé, ou d'intégrer des données d'émulation pour améliorer le désassemblage.
Bienvenue dans SHAREM !
SHAREM a été présenté à la DEFCON 31 dans « Game-Changing Advances in Windows Shellcode Analysis » et au Black Hat USA Arsenal. Un plugin Ghidra compagnon a été rendu disponible (séparément) par Trellix, grâce à Max Kersten. Ainsi, vous pouvez étendre la puissance de SHAREM à Ghidra, si vous le souhaitez.
SHAREM est conçu pour être l'outil ultime pour le shellcode Windows, avec la prise en charge de l'émulation de plus de 45 000 WinAPI, pratiquement tous les appels système Windows en mode utilisateur, et SHAREM offre de nombreuses nouvelles fonctionnalités. SHAREM contient un émulateur, un désassembleur, un débogage intemporel, un désobfuscation par force brute et bien d'autres fonctionnalités. L'émulateur de SHAREM peut également afficher des structures complètes (ou même des structures dans des structures) et permettre au shellcode encodé de se désobfusquer. SHAREM enregistre les résultats de toutes les WinAPI et tous les appels système Windows analysés, et les répartit également en plusieurs catégories et sous-catégories. La couverture complète du code de SHAREM lui permet également de découvrir des fonctionnalités inaccessibles.
Le désassembleur de SHAREM est capable d'intégrer les fonctions découvertes dans le désassemblage, en les étiquetant dans le désassembleur. SHAREM affichera également la forme déchiffrée du shellcode encodé dans le désassembleur, il n'est donc pas nécessaire de déboguer le shellcode.
Nous avons créé un Wiki SHAREM qui fournit des informations d'instruction sur l'utilisation de SHAREM, bien qu'il y ait des parties et fonctionnalités importantes non documentées pour le moment. SHAREM a été développé sur une période de deux ans avec plusieurs personnes travaillant dessus. Le désassembleur de SHAREM est nettement plus précis que les désassembleurs leaders. De plus, SHAREM peut intégrer les données d'émulation dans le désassembleur, permettant d'obtenir un désassemblage quasiment parfait.
Veuillez noter que SHAREM vient tout juste d'être publié, la documentation ici est un peu maigre. Nous mettrons à jour le GitHub avec plus d'informations dans les semaines à venir.
Si vous débutez avec SHAREM, n'hésitez pas à regarder une brève vidéo de démonstration présentant certaines de ses capacités. Cliquez sur l'image pour voir la démo :

Mars 2026 : SHAREM chargeait jusqu'à 61 DLL au démarrage, mais avec la dernière mise à jour, il peut désormais prendre en charge 369 DLL et 45 538 WinAPI uniques. De plus, les DLL sont chargées à la demande selon les besoins. Les fonctionnalités internes de Windows (telles que les listes de modules, flinks, blinks, etc.) seront automatiquement mises à jour si des DLL supplémentaires doivent être chargées, par exemple via LoadLibraryA. De nombreuses autres mises à jour ont été apportées pour améliorer les fonctionnalités. Des modifications ont été apportées pour rationaliser certains problèmes d'installation qui m'ont été signalés.
22 mars 2026 : La logique de sortie des boucles a été affinée avec plus de nuance. Une grande partie a été réécrite et retestée. Nous ne recommandons pas de modifier généralement les valeurs par défaut dans config.cfg, si vous décidez d'utiliser cette fonctionnalité.
2024/2025 : SHAREM peut éventuellement utiliser l'IA pour analyser les résultats, avec une clé OpenAI (fournie par l'utilisateur). Notez que SHAREM a été créé avant les récentes avancées en IA, et son utilisation de l'IA n'a lieu qu'après la fin de l'analyse initiale de SHAREM. Cette fonctionnalité optionnelle peut lui permettre d'examiner ce qui a été trouvé et de l'appliquer au framework MITRE ATT&CK et bien plus encore.
SHAREM est installé en tant que paquet Python local, afin d'y avoir accès dans d'autres projets. Cela permet d'importer des parties de SHAREM. Ainsi, il doit être installé en tant que paquet. Note : j'ai entendu des rapports de difficultés d'installation. Les modifications récentes devraient, espérons-le, corriger ce problème.
Git est requis pour l'installation de sharem. Il peut être installé depuis https://git-scm.com/download/win. Après installation, redémarrez l'ordinateur et continuez avec l'installation de SHAREM. Git sert à automatiser l'installation de SSDeep sous Windows. Vous pouvez également le faire manuellement et modifier le .bat pour exclure SSDeep, si vous le faites vous-même. L'installation manuelle évite d'avoir besoin de Git. Note : pour Windows, nous passons à un fork de SSDeep sur le compte Bw3ll qui corrige certains problèmes d'installation avec la version précédente. Cette version et la précédente étaient des wrappers pour SSDeep.
Exécutez le fichier .bat. Il appellera le fichier setup.py. Selon la façon dont vous appelez Python, vous devrez peut-être appeler le fichier .bat alternatif ou même le modifier légèrement, si vous utilisez quelque chose de non standard.
Faites
py -m pip list ou python3 -m pip list pour vérifier que SHAREM est installé localement en tant que paquet. Il doit être installé en tant que paquet pour fonctionner. Que se passe-t-il si vous ne le voyez PAS ? Alors il n'est PAS installé en tant que paquet, et SHAREM ne fonctionnera PAS. Assurez-vous d'utiliser le(s) fichier(s) .bat, et de le faire dans l'invite de commandes Windows depuis le répertoire installers. Si cela ne fonctionne pas, recherchez d'éventuels messages d'erreur. S'il y en a, essayez de les corriger. Vous pouvez essayer plusieurs fois. Si cela ne fonctionne toujours pas, ouvrez un problème et essayez d'inclure toutes ces informations, afin que nous puissions essayer de comprendre ce qui ne va pas. Généralement, cela ne sera pas nécessaire, mais occasionnellement cela peut l'être. Si vous l'avez désinstallé une fois et décidé de le réinstaller, il est possible que vous deviez exécuter à nouveau le script d'installation. Une fois que sharem apparaît lorsque vous faites py -m pip list, vous savez qu'il est correctement installé en tant que paquet local.
Après l'installation de SHAREM, lorsque vous exécutez un shellcode pour la première fois, vous devez être dans le dossier sharem_cli. Par exemple, lorsque vous êtes dans ce répertoire, vous pouvez exécuter py main.py -r32 shellcode.bin. Pas de shellcode ? Ce n'est pas grave, vous pouvez trouver quelques échantillons dans le dépôt d'échantillons de shellcode que j'héberge dans un dépôt séparé.
Remarque : La première fois que vous tentez d'émuler un shellcode sous Windows, il tentera de récolter et de gonfler les DLL Windows. Ce processus commence automatiquement lors de la première tentative d'émulation d'un shellcode. Il les copiera, déplaçant les DLL copiées (et plus tard gonflées) vers un répertoire SHAREM. Il y a des étapes supplémentaires, mais tout ce processus initial peut prendre plusieurs minutes, voire 10 à 15 minutes, avec un très vieux CPU. Une fois terminé, vous ne devriez plus avoir à le refaire. Cela doit être fait séparément pour les shellcode 32 et 64 bits. Vous pouvez naviguer dans sharem/sharem/sharem/sharem/DLLs/x86 - et vous devriez voir les DLL apparaître lentement. Elles sont prélevées du système d'exploitation, modifiées pour émuler ce que le système d'exploitation en ferait, et enregistrées dans ce répertoire. Il y en aura un peu plus de 60. Si vous voyez environ ce nombre de DLL et qu'aucune autre DLL n'est enregistrée, cela signifie que c'est probablement bloqué. Appuyez simplement sur Entrée à nouveau. Si cela échoue, redémarrez simplement et essayez à nouveau l'émulation. Une fois les DLL enregistrées, vous ne devriez plus avoir à le refaire ; ce n'est que la première fois qui peut prendre du temps, en fonction de la vitesse du CPU. Vous devriez voir les résultats d'émulation une fois terminés, comme l'énumération des différentes WinAPI ou appels système Windows.
Si le fichier se termine par .txt, il supposera que le shellcode est une représentation ASCII de l'hexadécimal (plutôt que de l'hexadécimal pur), et il l'interprétera comme tel. Cela fonctionne avec ce qui se trouve en ligne. Si vous utilisez une représentation ASCII de l'hexadécimal, le nom du fichier doit se terminer par .txt.
chmod +x linux_installer.sh Activez l'exécution de l'installateursudo ./linux_installer.sh Exécutez l'installateurVous devrez ajouter les fichiers DLL Windows. Nous ne les avons pas actuellement disponibles en téléchargement séparé pour les utilisateurs Linux. Pour l'instant, les utilisateurs devraient les récolter en les installant via Windows. (Remarque : Ces DLL DOIVENT être gonflées par SHAREM. Les DLL ne peuvent pas être utilisées si elles ne sont pas gonflées. La plupart, peut-être pas toutes, échoueront si elles ne sont pas gonflées de la bonne quantité.) Plus tard, nous pourrions les fournir en téléchargement séparé dans les semaines à venir. Mais en attendant, l'utilisateur peut suivre les étapes Windows pour les générer et les déplacer vers Linux, en les plaçant dans sharem\sharem\sharem\DLLs\x64 et sharem\sharem\sharem\DLLs\x86. Vous aurez également besoin des fichiers foundDLLAddresses32.json et FoundDLLAddresses64.json, qui doivent aller dans sharem\sharem\sharem.
SHAREM en 2024 a ajouté la prise en charge d'OpenAI, afin que nous puissions exploiter l'IA pour automatiser certaines tâches d'analyse. Cela peut être activé via A depuis le menu principal - « exploiter l'IA ». Pour ce faire, vous devez avoir une clé OpenAI et la placer dans le fichier config.cfg, qui se trouve dans sharem/sharem/sharem/sharem/config.cfg. De plus, vous devez émuler un shellcode avant de pouvoir utiliser l'IA. Actuellement, c'est la seule façon d'utiliser l'IA - cela ne fonctionne pas en mode headless - mais si quelqu'un en a besoin, veuillez ouvrir un problème, et j'ajouterai la prise en charge correspondante, comme une autre option pouvant être choisie via la configuration. Si vous avez déjà installé SHAREM et que vous obtenez la version mise à jour, vous pouvez simplement installer OpenAI manuellement, par ex. pip install openai. Je l'ai ajouté aux prérequis également pour le fichier setup.py qui est activé lors de l'exécution des scripts d'installation initiaux.
L'excellent script Ghidra de Max Kersten, présenté au Black Hat et au DEFCON en août 2023, se trouve ici : https://github.com/advanced-threat-research/GhidraScripts/blob/main/Sharem.java Certaines instructions de Max sont ici : https://github.com/advanced-threat-research/GhidraScripts/ Ce plugin Ghidra est gracieuseté de Trellix ! Vous devez toujours utiliser SHAREM. Il ingère la sortie JSON produite par SHAREM et la convertit en un format utile pour Ghidra. Plus d'informations sur Max lui-même sur https://maxkersten.nl/.
La documentation se trouve sur le Wiki SHAREM, qui fournit des informations d'instruction sur l'utilisation de SHAREM, bien qu'il y ait des parties et fonctionnalités importantes non documentées pour le moment.
SHAREM est un framework très puissant avec de nombreuses capacités, certaines bien documentées, d'autres non. Cette section présentera un petit nombre de ces capacités.
SHAREM peut prendre un shellcode encodé et le désobfusquer par émulation. Non seulement il capture toutes les informations WinAPI ou d'appel système, mais si vous choisissez de le visualiser dans le désassembleur, il affiche la forme décodée du shellcode :

SHAREM peut non seulement énumérer plus de 12 000 fonctions WinAPI, mais aussi le faire avec pratiquement tous les appels système Windows en mode utilisateur. De plus, pour certains, il affiche des informations de structure. Pour ceux qui traitent avec le registre, il extrait les informations du registre et les ajoute à notre Gestionnaire de registre :

SHAREM a également la capacité de télécharger des fichiers via UrldownloadToFileA, s'ils existent. Ceux-ci sont téléchargés dans la mémoire de l'émulateur - pas enregistrés sur le disque. En cas de succès, il capture le hash. Il existe également un pseudo-système de fichiers limité, vous pouvez donc voir des corrélations, comme un fichier téléchargé sous un nom et renommé en un autre. Si le téléchargement nécessaire n'est pas disponible, il sera simplement simulé comme un téléchargement réussi. Le téléchargement en direct est une option qui peut être activée ou désactivée dans la configuration.

Dr. Bramwell Brizendine, Austin Babcock, Jake Hince, Shelby VandenHoek, Sascha Walker, Evan Read, Dylan Park, Kade Brost, James Tate Forcella, William Lochte, Hunter Murphy et Tarek Abdelmotaleb.
Cette recherche et certains co-auteurs ont été soutenus par la subvention NSA H98230-20-1-0326.