
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.