
Ferramenta baseada em Python para gerar Shellcode a partir de PIC C
SHGenOB é uma ferramenta baseada em Python projetada para gerar shellcode a partir de Código Independente de Posição (PIC – Position Independent Code) escrito em C. Ela automatiza o processo de compilação do código C, extração da seção .text e, opcionalmente, criptografia do shellcode resultante usando criptografia XOR.
Este projeto é baseado inteiramente neste artigo de hasherezade.
Nota Importante para Usuários do SHGenOB: Para que esta ferramenta de geração de shellcode funcione corretamente, o código C no arquivo de entrada deve ser escrito como Código Independente de Posição (PIC). A ferramenta assume que o código fornecido segue os princípios e características do PIC descritos abaixo.
Código Independente de Posição (PIC) é um tipo de código de máquina que pode ser executado independentemente de seu endereço de memória absoluto. Essa característica torna o PIC particularmente útil na criação de shellcode, bibliotecas compartilhadas e certos tipos de malware. As principais características do PIC incluem:
PIC é essencial em cenários onde o endereço exato de carregamento do código não é conhecido antecipadamente, tornando-se um conceito crucial no desenvolvimento de shellcode e em certas áreas de programação de sistemas. Ao usar o SHGenOB, certifique-se de que seu código C de entrada siga esses princípios de PIC para gerar shellcode eficaz e confiável.
pip install pefile argparse
Execute o script a partir da linha de comando com a seguinte sintaxe:
python shgenob.py --code-file <path_to_c_file> [--masm-file <path_to_masm_file>] [--debug] [--xor-key <key>]
Argumentos:
--code-file ou -cf: (Obrigatório) Caminho para o arquivo main.c contendo o código PIC--masm-file ou -mf: (Opcional) Caminho para arquivo .masm externo para incluir lógica adicional de assembly no shellcode--debug ou -d: (Opcional) Ativar modo de depuração (pula a limpeza de arquivos intermediários)--xor-key ou -xk: (Opcional) Chave XOR para criptografar o shellcode (formato: AA,BB,CC)Exemplos:
# Uso básico
python shgenob.py --code-file main.c
# Com arquivo MASM externo
python shgenob.py --code-file main.c --masm-file custom_logic.masm
# Com todas as opções
python shgenob.py --code-file main.c --masm-file custom_logic.masm --debug --xor-key AA,BB,CC
save_to_file(content, filename): Salva o conteúdo fornecido em um arquivo no diretório atualcleanup(): Exclui arquivos intermediários (.asm, .exe, .obj, .lnk) no diretório atualxor_encrypt(shellcode, key): Criptografa o shellcode usando XOR com a chave fornecidainsert_shellcode_into_loader(formatted_shellcode, loader_file): Insere o shellcode no template do loaderextract_text_section(file_path, key): Extrai a seção .text de um arquivo PE e opcionalmente a criptografafind_file(root_dir, file_name): Procura por um arquivo no diretório dado e seus subdiretóriosrun_command_with_vcvars(command, vcvars_path): Executa um comando com as variáveis de ambiente do Visual Studio configuradascompile_cpp_file(cpp_file, vcvars_path, output_exe): Compila um arquivo C++ usando o compilador do Visual Studiomodify_asm_file(asm_file): Modifica o arquivo assembly gerado para compatibilidade com shellcodemain(cpp_file, args): Função principal que orquestra o processo de geração de shellcodeUse a flag --debug para pular o processo de limpeza e inspecionar arquivos intermediários. Isso é útil para solução de problemas e compreensão do processo de geração de shellcode.
Contribuições para melhorar o SHGenOB são bem-vindas. Por favor, siga estes passos: