Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Shoggoth — Polimórfico criptografador que transforma shellcode, PE e arquivos COFF em payloads ofuscados e independentes de posição com criptografia RC4 e cifra de bloco aleatória, além de geração de instruções lixo usando a biblioteca AsmJit. | Kitploit
Ferramentas/GitHubGitHub/frkngksl/shoggoth
Frameworks de ExploraçãoGeração de PayloadsShellcodeAnálise de BináriosRed Teaming
GitHubfrkngksl/shoggoth

Shoggoth

Polimórfico criptografador que transforma shellcode, PE e arquivos COFF em payloads ofuscados e independentes de posição com criptografia RC4 e cifra de bloco aleatória, além de geração de instruções lixo usando a biblioteca AsmJit.

Ver Repositório
80510318há 6 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Shoggoth

Apresentado em

  • BlackHat Europe 2022 Arsenal - Gravação da Apresentação

Introdução

Descrição

O Shoggoth é um projeto open-source baseado em C++ e na biblioteca asmjit usado para criptografar shellcode, arquivos PE e COFF de forma polimórfica.

O Shoggoth irá gerar um arquivo de saída que armazena o payload e seu loader correspondente em uma forma ofuscada. Como o conteúdo da saída é independente de posição, ele pode ser executado diretamente como um shellcode. Durante a execução do payload, ele se descriptografa em tempo de execução. Além da rotina de criptografia, o Shoggoth também adiciona instruções lixo, que não alteram nada, entre as rotinas.

Comecei a desenvolver este projeto para estudar diferentes abordagens de geração dinâmica de instruções, práticas de montagem e detecção de assinaturas. Pretendo atualizar regularmente o repositório com meus novos aprendizados.

Funcionalidades

As funcionalidades atuais estão listadas abaixo:

  • Funciona apenas em entradas x64
  • Capacidade de mesclar o COFF Loader PIC com arquivos COFF ou BOF de entrada
  • Capacidade de mesclar o PE Loader PIC com arquivos PE de entrada
  • Cifra de fluxo com algoritmo RC4
  • Cifra de bloco com operações geradas aleatoriamente
  • Geração de instruções lixo

Fluxo de Execução

O fluxo geral de execução do Shoggoth para um arquivo de entrada pode ser visto na imagem abaixo. Você pode observar este fluxo com as configurações padrão.

Basicamente, o Shoggoth primeiro mescla o shellcode do loader pré-compilado de acordo com o modo escolhido (arquivo COFF ou PE) e o arquivo de entrada. Em seguida, adiciona múltiplas instruções lixo que gera a este payload mesclado. O stub contendo o loader, a instrução lixo e o payload é criptografado primeiro com criptografia RC4 e depois com criptografia de bloco gerada aleatoriamente, combinando os descriptografadores correspondentes. Finalmente, adiciona uma instrução lixo ao bloco resultante.

Geração de Código de Máquina

Enquanto o Shoggoth gera instruções aleatoriamente para stubs lixo ou rotinas de criptografia, ele usa a biblioteca AsmJit.

AsmJit é uma biblioteca leve para geração de código de máquina escrita em linguagem C++. Ela pode gerar código de máquina para arquiteturas X86, X86_64 e AArch64, e suporta instruções base e todas as extensões recentes. AsmJit permite especificar códigos de operação, registradores, operandos imediatos, rótulos de chamada e incorporar valores arbitrários em qualquer deslocamento dentro do código. Ao gerar algumas instruções de montagem usando AsmJit, é suficiente chamar a função da API que corresponde à operação de montagem necessária com valores de operandos da classe Assembler. Para cada chamada de API, o AsmJit mantém informações de código e realocação em sua estrutura interna CodeHolder. Após chamar as funções da API de todos os comandos de montagem a serem gerados, sua classe JitRuntime pode ser usada para copiar o código do CodeHolder para a memória com permissão executável e realocá-lo.

Enquanto procurava por uma biblioteca de geração de código, encontrei o AsmJit e vi que ele é amplamente usado por muitos projetos populares. Por isso decidi usá-lo para minhas necessidades. Não sei se o Shoggoth é o primeiro projeto a usá-lo no contexto de equipe vermelha, mas acredito que pode ser uma referência para implementações futuras.

Loaders COFF e PE

O Shoggoth pode ser usado para criptografar arquivos PE e COFF fornecidos, de modo que ambos possam ser executados como um shellcode graças a loaders pré-compilados independentes de posição. Simplesmente usei o método C para Shellcode para obter a versão PIC de loaders PE e COFF bem conhecidos que modifiquei para meus projetos antigos. Para compilação, usei o Makefile do projeto HandleKatz, que é um dump do LSASS na forma PIC.

Basicamente, para obter um shellcode com a técnica C para Shellcode, removi todas as variáveis globais no código-fonte do loader, armazenei todas as strings na pilha e resolvi os endereços das funções da API do Windows carregando e analisando as DLLs necessárias em tempo de execução. Depois, determinei o ponto de entrada com um script de linker e compilei o código usando MinGW com várias flags de compilação. Extraí a seção .text do arquivo executável gerado e obtive o shellcode do loader. Como o arquivo executável obtido após editar o código como acima não contém outras seções além da seção .text, o código nesta seção pode ser usado como independente de posição.

O código-fonte deles pode ser visto e editado nos diretórios COFFLoader e PELoader. As versões compiladas desses códigos-fonte podem ser encontradas no diretório stub. Por enquanto, se você quiser editar ou alterar esses loaders, deve obedecer às assinaturas e substituir os binários pré-compilados do diretório stub.

Para passar argumentos para um BOF, use a opção '--coff-arg'. O Shoggoth espera uma string hexadecimal pré-formatada contendo os argumentos empacotados, que pode ser criada usando o script beacon_generate.py da TrustedSec. Uma cópia deste script foi incluída como COFFArgGenerator/beacon_generate.py. (Muitos agradecimentos a @Octoberfest7)

Cifra RC4

O Shoggoth primeiro usa uma das cifras de fluxo, o algoritmo RC4, para criptografar o payload que obtém. Após gerar aleatoriamente a chave usada aqui, ele criptografa o payload com essa chave. O stub descriptografador, que descriptografa o payload em tempo de execução, é criado dinamicamente e montado usando AsmJit. Os registradores usados no stub são selecionados aleatoriamente para cada amostra.

Referenciei o código da Nayuki para a implementação do algoritmo RC4 que usei no Shoggoth.

Cifra de Bloco Aleatória

Após a primeira criptografia ser realizada, o Shoggoth usa a segunda criptografia, que é uma cifra de bloco gerada aleatoriamente. Com a segunda criptografia, ele criptografa tanto o descriptografador RC4 quanto, opcionalmente, o stub que contém o payload, instruções lixo e o loader criptografados com RC4. Ele divide o bloco a ser criptografado em blocos de 8 bytes e usa instruções geradas aleatoriamente para cada bloco. Essas instruções incluem ADD, SUB, XOR, NOT, NEG, INC, DEC, ROL e ROR. Os operandos para essas instruções também são selecionados aleatoriamente.

Geração de Instruções Lixo

Baixar ferramenta