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