
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 Instalador