
SHAREM é uma framework de análise de shellcode, capaz de emular mais de 45.000 WinAPIs e virtualmente todas as syscalls do Windows. Também contém seu próprio desmontador personalizado, com muitos recursos inovadores, como ser capaz de mostrar a desmontagem desofuscada de um shellcode codificado, ou integrar dados de emulação para aprimorar a desmontagem.
Bem-vindo ao SHAREM!
O SHAREM foi apresentado na DEFCON 31 em "Game-Changing Advances in Windows Shellcode Analysis" e no Black Hat USA Arsenal. Um plugin companheiro para Ghidra foi disponibilizado (separadamente) pela Trellix, cortesia de Max Kersten. Assim, você pode estender o poder do SHAREM para o Ghidra, se desejar.
O SHAREM tem a intenção de ser a ferramenta definitiva para shellcode do Windows, com suporte para emular mais de 45.000 WinAPIs, praticamente todas as syscalls do Windows em modo usuário, e o SHAREM oferece inúmeros novos recursos. O SHAREM contém um emulador, um desassemblador, depuração atemporal, desofuscação por força bruta e muitos outros recursos. O emulador do SHAREM também pode exibir estruturas completas (ou até estruturas dentro de estruturas) e pode permitir que shellcode codificado se desofusque. O SHAREM registra a saída de todas as WinAPIs e syscalls do Windows analisadas, e também divide cada uma em muitas categorias e subcategorias. A cobertura completa de código do SHAREM também permite descobrir funcionalidades inalcançáveis.
O desassemblador do SHAREM é capaz de integrar funções descobertas na desmontagem, rotulando cada uma no desassemblador. O SHAREM também exibirá a forma decifrada do shellcode codificado no desassemblador, então não é necessário depurar o shellcode.
Criamos uma Wiki do SHAREM que fornece algumas informações instrucionais sobre o uso do SHAREM, embora existam partes e recursos significativos atualmente não documentados. O SHAREM foi desenvolvido ao longo de dois anos com várias pessoas trabalhando nele. O desassemblador do SHAREM é significativamente mais preciso do que os principais desassembladores. Além disso, o SHAREM pode integrar dados de emulação no desassemblador, permitindo obter uma desmontagem quase perfeita.
Esteja ciente de que, como o SHAREM acaba de ser lançado, a documentação aqui é um pouco escassa. Atualizaremos o GitHub com mais informações nas próximas semanas.
Se você é novo no SHAREM, sinta-se à vontade para conferir um breve vídeo de demonstração, mostrando algumas de suas capacidades. Clique na imagem para ver a demonstração:

Março de 2026: O SHAREM carregará até 61 DLLs ao iniciar, mas com a atualização mais recente, agora pode suportar 369 DLLs e 45538 WinAPIs únicas. Além disso, as DLLs são carregadas sob demanda conforme necessário. Recursos internos do Windows (como listas de módulos, flinks, blinks, etc.) serão atualizados automaticamente se DLLs adicionais precisarem ser carregadas, por exemplo, via LoadLibraryA. Houve inúmeras outras atualizações para melhorar a funcionalidade. Foram feitas alterações para ajudar a simplificar alguns problemas que me foram relatados sobre desafios de instalação.
22 de março de 2026: A lógica para sair de loops foi refinada com mais nuances. Grande parte disso foi reescrita e retestada. Não recomendamos geralmente alterar o padrão no config.cfg, se você decidir usar esse recurso.
2024/2025: O SHAREM pode opcionalmente usar IA para analisar resultados, com uma chave OpenAI (fornecida pelo usuário). Observe que o SHAREM foi feito antes dos avanços recentes em IA, e seu uso de IA ocorre apenas após a análise inicial do SHAREM estar completa. Esse recurso opcional pode permitir examinar o que foi encontrado e aplicá-lo à estrutura MITRE ATT&CK e muito mais.
O SHAREM é instalado como um pacote Python local, para que tenhamos acesso a ele em outros projetos. Isso permite que partes do SHAREM sejam importadas. Portanto, deve ser instalado como um pacote. Nota: ouvi relatos de alguns problemas de instalação. Mudanças recentes devem corrigir esse problema.
Git é necessário para a instalação do sharem. Pode ser instalado em https://git-scm.com/download/win. Após a instalação, reinicie o computador e continue com a instalação do SHAREM. O Git é para automatizar a instalação do Windows SSDeep. Você também pode fazer isso manualmente e modificar o .bat para excluir o SSDeep, se você mesmo fizer. Instalar manualmente evita a necessidade de usar o Git. Nota: para Windows, estamos migrando para um fork do SSDeep na conta Bw3ll que corrige alguns problemas de instalação com a versão anterior. Esta versão e a anterior eram wrappers para o SSDeep.
Execute o arquivo .bat. Ele chamará o arquivo setup.py. Dependendo de como você chama o Python, pode ser necessário chamar o arquivo .bat alternativo ou até mesmo modificá-lo ligeiramente, se estiver usando algo não padrão.
Execute
py -m pip list ou python3 -m pip list para verificar se o SHAREM está instalado localmente como um pacote. Ele deve ser instalado como um pacote para funcionar. O que acontece se você NÃO o vir? Então NÃO está instalado como um pacote, e o SHAREM NÃO funcionará. Certifique-se de estar usando o(s) arquivo(s) .bat e fazendo isso no prompt de comando do Windows a partir do diretório installers. Se não funcionar, procure por mensagens de erro. Se houver alguma, tente corrigi-las. Você pode tentar algumas vezes. Se ainda assim não funcionar, abra uma issue e tente incluir todas essas informações, para que possamos tentar descobrir o que há de errado. Normalmente, não será necessário, mas ocasionalmente pode ser. Se você o desinstalou uma vez e decidiu instalá-lo novamente, é possível que precise executar o script de instalação novamente. Assim que você vir sharem aparecer ao executar py -m pip list, saberá que está instalado corretamente como um pacote local.
Após o SHAREM estar instalado, quando você executar um shellcode pela primeira vez, você deve estar dentro da pasta sharem_cli. Por exemplo, quando estiver nesse diretório, você pode executar py main.py -r32 shellcode.bin. Sem shellcode? Tudo bem, você pode encontrar algumas amostras no repositório de amostras de shellcode que hospedo em um repositório separado.
Nota: Na primeira vez que você tentar emular um shellcode no Windows, ele tentará coletar e inflar DLLs do Windows. Esse processo começa automaticamente ao tentar emular um shellcode pela primeira vez. Ele as copiará, movendo as DLLs copiadas (e posteriormente infladas) para um diretório do SHAREM. Existem etapas adicionais, mas todo esse processo inicial pode levar vários minutos, ou até 10-15 minutos, se for uma CPU muito antiga. Após a conclusão, você não deve precisar fazer isso novamente. Isso deve ser feito separadamente tanto para shellcode de 32 quanto de 64 bits. Você pode navegar até sharem/sharem/sharem/sharem/DLLs/x86 - e você verá DLLs aparecerem lentamente. Elas estão sendo retiradas do sistema operacional, modificadas para emular o que o SO faria com elas e salvas neste diretório. Haverá um pouco mais de 60. Se você vir cerca desse número de DLLs e não houver mais DLLs sendo salvas, isso significa que provavelmente está apenas travado. Apenas pressione Enter novamente. Se isso falhar, simplesmente reinicie e tente emular novamente. Depois que as DLLs forem salvas, você não deve precisar fazer isso novamente; é apenas na primeira vez que pode levar tempo, dependendo da velocidade da CPU. Você verá os resultados da emulação quando terminar, como a enumeração de diferentes WinAPIs ou syscalls do Windows.
Se o arquivo terminar em .txt, ele assumirá que o shellcode é uma representação ASCII de HEX (em vez de hexadecimal puro) e o interpretará como tal. Isso funciona com algo encontrado online. Se estiver usando uma representação ASCII do hexadecimal, o nome do arquivo terminando em .txt é um requisito.
chmod +x linux_installer.sh Habilite a Execução do Instaladorsudo ./linux_installer.sh Execute o InstaladorVocê precisará adicionar os arquivos DLL do Windows. Atualmente, não os disponibilizamos como download separado para usuários Linux. Neste momento, os usuários precisariam coletá-los instalando via Windows. (Nota: Essas DLLs DEVEM ser infladas pelo SHAREM. DLLs não podem ser usadas se não forem infladas. A maioria, embora talvez não todas, falhará se não forem infladas na quantidade adequada.) Posteriormente, podemos fornecê-los como download separado nas próximas semanas. Mas, enquanto isso, o usuário pode seguir as etapas do Windows para gerá-los e movê-los para o Linux, colocando-os em sharem\sharem\sharem\DLLs\x64 e sharem\sharem\sharem\DLLs\x86. Você também precisará dos arquivos foundDLLAddresses32.json e FoundDLLAddresses64.json, que devem ir em sharem\sharem\sharem.
O SHAREM em 2024 adicionou suporte para OpenAI, para que possamos aproveitar a IA para automatizar algumas tarefas de análise. Isso pode ser ativado via A no menu principal - "leverage AI". Para fazer isso, você deve ter uma chave OpenAI e colocá-la no arquivo config.cfg, que está em sharem/sharem/sharem/sharem/config.cfg. Além disso, você deve emular um shellcode antes de permitir usar a IA. Atualmente, esta é a única maneira de usar a IA - ela não funciona de forma headless - mas se alguém precisar disso, por favor, abra uma issue e adicionarei suporte para isso, como outra opção que pode ser selecionada via config. Se você já instalou o SHAREM e obteve a versão atualizada, pode querer instalar manualmente o OpenAI, por exemplo, pip install openai. Eu o adicionei também aos requisitos do arquivo setup.py que é ativado ao executar os scripts de instalação iniciais.
O excelente Script Ghidra de Max Kersten, mostrado no Black Hat e DEFCON em agosto de 2023, pode ser encontrado aqui: https://github.com/advanced-threat-research/GhidraScripts/blob/main/Sharem.java Algumas instruções de Max estão aqui: https://github.com/advanced-threat-research/GhidraScripts/ Este plugin Ghidra é cortesia da Trellix! Você ainda precisa usar o SHAREM. Ele consome a saída JSON produzida pelo SHAREM e a converte em um formato útil para o Ghidra. Mais sobre o próprio Max pode ser encontrado em https://maxkersten.nl/.
A documentação pode ser encontrada na Wiki do SHAREM, que fornece algumas informações instrucionais sobre o uso do SHAREM, embora existam partes e recursos significativos atualmente não documentados.
O SHAREM é uma estrutura muito poderosa com inúmeras capacidades, algumas bem documentadas e outras não. Esta seção mostrará um pequeno número dessas capacidades.
O SHAREM pode pegar um shellcode codificado e desofuscá-lo por meio de emulação. Não apenas captura todas as informações de WinAPI ou syscall, mas se você optar por visualizá-lo no desassemblador, ele mostra a forma decodificada do shellcode:

O SHAREM não apenas pode enumerar mais de 12.000 funções WinAPI, mas também pode fazer isso com praticamente todas as syscalls do Windows em modo usuário. Além disso, para algumas exibe informações de estrutura. Para aqueles que lidam com o registro, ele extrairá informações do registro e as adicionará ao nosso Gerenciador de Registro:

O SHAREM também tem a capacidade de baixar arquivos via UrlDownloadToFileA, se existirem. Eles são baixados na memória do emulador - não salvos em disco. Se bem-sucedido, capturará o hash. Há também um sistema de pseudo arquivos limitado, então você pode ver correlações, como um arquivo sendo baixado como uma coisa e renomeado para outra. Se o download necessário não estiver disponível, ele será simplesmente simulado como um download bem-sucedido. O download ao vivo é uma opção que pode ser ativada ou desativada no config.

Dr. Bramwell Brizendine, Austin Babcock, Jake Hince, Shelby VandenHoek, Sascha Walker, Evan Read, Dylan Park, Kade Brost, James Tate Forcella, William Lochte, Hunter Murphy, and Tarek Abdelmotaleb.
Esta pesquisa e alguns coautores foram apoiados pela NSA Grant H98230-20-1-0326.