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.

Criação

Vamos precisar do Developer Command Prompt para executar os sequintes 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:

Warning

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.

#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:

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

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

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