
SHAREM es un framework de análisis de shellcode, capaz de emular más de 45,000 APIs de Windows y prácticamente todas las syscalls de Windows. También contiene su propio desensamblador personalizado, con muchas características innovadoras, como la capacidad de mostrar el desensamblado desofuscado de un shellcode codificado, o integrar datos de emulación para mejorar el desensamblado.
¡Bienvenido a SHAREM!
SHAREM fue presentado en DEFCON 31 en la charla "Game-Changing Advances in Windows Shellcode Analysis" y en el Arsenal de Black Hat USA. Un plugin complementario para Ghidra fue puesto a disposición (por separado) por Trellix, cortesía de Max Kersten. Por lo tanto, puedes extender el poder de SHAREM a Ghidra, si así lo deseas.
SHAREM está diseñado para ser la herramienta definitiva para shellcode de Windows, con soporte para emular más de 45 000 WinAPIs, prácticamente todas las syscalls de Windows en modo usuario, y SHAREM proporciona numerosas funciones nuevas. SHAREM contiene un emulador, un desensamblador, depuración intemporal, desofuscación por fuerza bruta y muchas otras características. El emulador de SHAREM también puede mostrar estructuras completas (o incluso estructuras dentro de estructuras) y puede permitir que el shellcode codificado se desofusque a sí mismo. SHAREM registra la salida de todas las WinAPIs y syscalls de Windows analizadas, y también divide cada una en muchas categorías y subcategorías. La cobertura de código completa de SHAREM también permite descubrir funcionalidades inalcanzables.
El desensamblador de SHAREM es capaz de integrar funciones descubiertas en el desensamblado, etiquetando cada una en el desensamblador. SHAREM también mostrará la forma descifrada del shellcode codificado en el desensamblador, por lo que no es necesario depurar el shellcode.
Hemos creado una SHAREM Wiki que proporciona información instructiva sobre el uso de SHAREM, aunque hay partes y características significativas que aún no están documentadas. SHAREM se ha desarrollado durante un período de dos años con varias personas trabajando en él. El desensamblador de SHAREM es significativamente más preciso que los desensambladores líderes. Además, SHAREM puede integrar datos de emulación en el desensamblador, lo que permite obtener un desensamblado casi perfecto.
Tenga en cuenta que, como SHAREM acaba de ser lanzado, la documentación aquí es un poco escasa. Actualizaremos el GitHub con más información en las próximas semanas.
Si eres nuevo en SHAREM, no dudes en ver un breve video de demostración que muestra algunas de sus capacidades. Haz clic en la imagen para ver la demostración:

Marzo de 2026: SHAREM cargará hasta 61 DLL al iniciar, pero con la última actualización, ahora puede soportar 369 DLL y 45 538 WinAPIs únicas. Además, las DLL se cargan bajo demanda según sea necesario. Las características internas de Windows (como listas de módulos, flinks, blinks, etc.) se actualizarán automáticamente si es necesario cargar DLL adicionales, por ejemplo, a través de LoadLibraryA. Ha habido numerosas otras actualizaciones para mejorar la funcionalidad. Se han realizado cambios para ayudar a agilizar algunos problemas que me han informado sobre desafíos de instalación.
22 de marzo de 2026: La lógica para salir de bucles se ha refinado con más matices. Gran parte de esto ha sido reescrito y probado nuevamente. No recomendamos cambiar el valor predeterminado en config.cfg a menos que decidas usar esta función.
2024/2025: SHAREM puede usar opcionalmente IA para analizar resultados, con una clave de OpenAI (proporcionada por el usuario). Ten en cuenta que SHAREM fue creado antes de los avances recientes en IA, y su uso de IA solo ocurre después de que se completa el análisis inicial de SHAREM. Esta función opcional puede permitirle examinar lo que se ha encontrado y aplicarlo al marco MITRE ATT&CK y mucho más.
SHAREM se instala como un paquete local de Python, para que podamos acceder a él en otros proyectos. Esto permite importar partes de SHAREM. Por lo tanto, debe instalarse como un paquete. Nota: He oído informes de algunos problemas de instalación. Los cambios recientes deberían corregir este problema.
Se requiere Git para la instalación de sharem. Se puede instalar desde https://git-scm.com/download/win. Después de la instalación, reinicia el ordenador y continúa con la instalación de SHAREM. Git se utiliza para automatizar la instalación de SSDeep para Windows. También puedes hacerlo manualmente y modificar el .bat para excluir SSDeep, si lo haces tú mismo. Instalarlo manualmente evita la necesidad de usar Git. Nota: para Windows, nos estamos moviendo a un fork de SSDeep en la cuenta de Bw3ll que corrige algunos problemas de instalación con la versión anterior. Esta versión y la anterior eran envoltorios para SSDeep.
Ejecuta el archivo .bat. Llamará al archivo setup.py. Dependiendo de cómo llames a Python, es posible que necesites llamar al archivo .bat alternativo o incluso modificarlo ligeramente, si usas algo no estándar.
Haz
py -m pip list o python3 -m pip list para verificar que SHAREM esté instalado localmente como un paquete. Debe estar instalado como paquete para funcionar. ¿Qué sucede si NO lo ves? Entonces NO está instalado como paquete y SHAREM NO funcionará. Asegúrate de usar los archivos .bat y hacerlo en el símbolo del sistema de Windows desde el directorio installers. Si no funciona, busca mensajes de error. Si hay alguno, intenta corregirlos. Puedes intentarlo varias veces. Si aún así no funciona, abre un issue e intenta incluir toda esta información para que podamos tratar de descubrir qué está mal. Generalmente, no será necesario, pero ocasionalmente puede serlo. Si lo desinstalaste una vez y decidiste instalarlo de nuevo, es posible que necesites ejecutar el script de instalación nuevamente. Una vez que veas sharem aparecer cuando ejecutes py -m pip list, sabrás que está instalado correctamente como paquete local.
Después de instalar SHAREM, cuando ejecutes un shellcode por primera vez, debes estar dentro de la carpeta sharem_cli. Por ejemplo, cuando estés en ese directorio, puedes ejecutar py main.py -r32 shellcode.bin. ¿No tienes shellcode? No hay problema, puedes encontrar algunas muestras en el repositorio de muestras de shellcode que alojo en un repositorio separado.
Nota: La primera vez que intentes emular un shellcode en Windows, intentará cosechar e inflar las DLL de Windows. Este proceso comienza automáticamente al intentar emular un shellcode por primera vez. Copiará las DLL, moviendo las copiadas (y luego infladas) a un directorio de SHAREM. Hay pasos adicionales, pero todo este proceso inicial puede llevar varios minutos, o incluso 10-15 minutos, si tienes una CPU muy antigua. Una vez completado, no deberías tener que hacer esto de nuevo. Esto debe hacerse por separado tanto para shellcode de 32 como de 64 bits. Puedes navegar a sharem/sharem/sharem/sharem/DLLs/x86 y deberías ver que las DLL aparecen lentamente. Estas se toman del sistema operativo, se modifican para emular lo que el sistema operativo haría con ellas y se guardan en este directorio. Habrá un poco más de 60. Si ves alrededor de ese número de DLL y no se están guardando DLL adicionales, significa que probablemente está atascado. Simplemente presiona Enter nuevamente. Si eso falla, simplemente reinicia e intenta emular de nuevo. Una vez que las DLL estén guardadas, no deberías necesitar hacer esto de nuevo; solo la primera vez puede llevar tiempo, dependiendo de la velocidad de la CPU. Deberías ver los resultados de emulación al finalizar, como la enumeración de diferentes WinAPIs o syscalls de Windows.
Si el archivo termina en .txt, asumirá que el shellcode es una representación ASCII de HEX (en lugar de hexadecimal puro) y lo interpretará como tal. Esto funciona con algo encontrado en línea. Si se usa una representación ASCII del hexadecimal, es necesario que el nombre del archivo termine en .txt.
chmod +x linux_installer.sh Habilita la ejecución del instaladorsudo ./linux_installer.sh Ejecuta el instaladorNecesitarás agregar los archivos DLL de Windows. Actualmente no los tenemos disponibles como descarga separada para usuarios de Linux. Por el momento, los usuarios necesitarían cosecharlos instalándolos a través de Windows. (Nota: Estas DLL deben ser infladas por SHAREM. Las DLL no se pueden usar si no están infladas. La mayoría, aunque quizás no todas, fallarán si no se inflan en la cantidad adecuada). Más adelante, es posible que proporcionemos estos archivos como descarga separada en las próximas semanas. Pero mientras tanto, el usuario puede seguir los pasos de Windows para generarlos y moverlos a Linux, colocándolos en sharem\sharem\sharem\DLLs\x64 y sharem\sharem\sharem\DLLs\x86. También necesitarías los archivos foundDLLAddresses32.json y FoundDLLAddresses64.json, que deben ir en sharem\sharem\sharem .
SHAREM en 2024 ha agregado soporte para OpenAI, para que podamos aprovechar la IA para automatizar algunas tareas de análisis. Esto se puede activar mediante A en el menú principal - "leverage AI". Para hacer esto, debes tener una clave de OpenAI y ponerla en el archivo config.cfg, que está en sharem/sharem/sharem/sharem/config.cfg. Además, debes emular un shellcode antes de que te permita aprovechar la IA. Actualmente, esta es la única forma de usar la IA: no funciona de manera headless, pero si alguien necesita eso, por favor abra un issue y agregaré soporte para ello, como otra opción que se puede elegir a través de la configuración. Si ya tienes instalado SHAREM y obtienes la versión actualizada, es posible que desees instalar OpenAI manualmente, por ejemplo, pip install openai. Lo he agregado a los requisitos también para el archivo setup.py que se activa al ejecutar los scripts de instalación iniciales.
El excelente script de Ghidra de Max Kersten, tal como se mostró en Black Hat y DEFCON en agosto de 2023, se puede encontrar aquí: https://github.com/advanced-threat-research/GhidraScripts/blob/main/Sharem.java Algunas instrucciones de Max están aquí: https://github.com/advanced-threat-research/GhidraScripts/ Este plugin de Ghidra es cortesía de Trellix. Aún es necesario usar SHAREM. Este script ingiere la salida JSON producida por SHAREM y la convierte en un formato útil para Ghidra. Más información sobre Max se puede encontrar en https://maxkersten.nl/.
La documentación se puede encontrar en la SHAREM Wiki, que proporciona información instructiva sobre el uso de SHAREM, aunque hay partes y características significativas que aún no están documentadas.
SHAREM es un marco muy potente con numerosas capacidades, algunas bien documentadas y otras que no. Esta sección mostrará un pequeño número de esas capacidades.
SHAREM puede tomar un shellcode codificado y desofuscarlo mediante emulación. No solo captura toda la información de WinAPI o syscall, sino que si eliges verlo en el desensamblador, te muestra la forma decodificada del shellcode:

SHAREM no solo puede enumerar más de 12 000 funciones WinAPI, sino que también puede hacerlo con prácticamente todas las syscalls de Windows en modo usuario. Además, para algunas muestra información de estructuras. Para aquellos que trabajan con el registro, extraerá información del registro y la agregará a nuestro Administrador de Registro:

SHAREM también tiene la capacidad de descargar archivos a través de UrldownloadToFileA, si existen. Estos se descargan en la memoria del emulador, no se guardan en el disco. Si tiene éxito, capturará el hash. También hay un sistema de pseudoarchivos limitado, por lo que puedes ver correlaciones, como un archivo que se descarga como una cosa y se renombra a otra. Si la descarga necesaria no está disponible, simplemente se simulará como una descarga exitosa. La descarga en vivo es una opción que se puede habilitar o deshabilitar en la configuración.

Dr. Bramwell Brizendine, Austin Babcock, Jake Hince, Shelby VandenHoek, Sascha Walker, Evan Read, Dylan Park, Kade Brost, James Tate Forcella, William Lochte, Hunter Murphy y Tarek Abdelmotaleb.
Esta investigación y algunos coautores han sido apoyados por la subvención NSA H98230-20-1-0326.