Writing and Compiling Shellcode in C


Posted Jul 23, 2024. 4 min read


Bom nesse post vou mostrar rapidamente como utilizar o projeto masm_shc primeiro deixamos na mesma pasta o peb_lookup.h e nosso código em C.


⚠️ As informações que você encontrar neste post, técnicas, códigos, provas de conceito ou qualquer outra coisa são estritamente para fins educacionais.

Criação

Vamos precisar do Developer Command Prompt para executar os seguintes comandos "vcvarsall.bat" x64 e cl.exe /c /FA /GS- /I"D:\seu_diretorio" shellcode.cpp Então, esse comando irá gerar o shellcode.asm Aqui está o código do shellcode.cpp:


#include <Windows.h>
#include "peb_lookup.h"

int main()
{
    LPVOID base = get_module_by_name((const LPWSTR)L"kernel32.dll");
    if (!base) {
        return 1;
    }
    auto _WinExec = reinterpret_cast<decltype(&WinExec)>(get_func_by_name((HMODULE)base, (LPSTR)"WinExec"));
    if (!_WinExec) {
        return 4;
    }
    _WinExec("cmd.exe /C systeminfo > systeminfo.txt", SW_SHOWNORMAL);
    return 0;
}

Bom depois do shellcode.asm ter sido gerado, vamos utilizar o masm_shc.exe para corrigir algumas coisas do shellcode.asm então vamos dar os argumentos masm_shc.exe shellcode.asm shellcode2.asm e pronto em seguida vamos dar o comando "ml64.exe" shellcode2.asm /link /entry:AlignRSP que irá nos gerar um executável. Então, abrimos esse executável no
CFF-EXPLORER Para fazer o dump da seção .text, que será o nosso shellcode:


CFF-EXPLORER


Então, pronto! Temos nosso shellcode. Podemos usar um carregador simples para testar nosso shellcode:


CFF-EXPLORER


Se jogarmos esse shellcode no VirusTotal, obteremos os seguintes resultados:


VirusTotal


O objetivo deste post era mais mostrar o uso do projeto masm_shc. Não me aprofundei muito no tópico de criação de shellcode, pois estou meio sem tempo. Porém, vou ver se consigo reservar um tempo livre em um fim de semana para ler mais sobre o assunto. Já salvei alguns materiais que abordam esse tópico, como:

From a C project through assembly to shellcode
Leveraging from PE parsing technique to write x86 shellcode
introduction-to-windows-shellcode-development-part1
Introduction to Windows shellcode development – Part 2
Introdução ao desenvolvimento de shellcode do Windows – Parte 3
Windows x64 Shellcode Development
Basics of Windows shellcode writing
Windows shellcoding - part 1. Simple example
Windows shellcoding - part 2. Find kernel32 address
Windows shellcoding - part 3. PE file format