
Curso prático de desenvolvimento de malware para Windows: API hashing, DLL sideloading, execução de shellcode, manipulação de PE, hospedagem de payload e laboratórios de entrega.
Desktop development with C++ ao instalarAdicionalmente (opcional), para uma experiência de engenharia reversa mais completa, configure os símbolos:
setx _NT_SYMBOL_PATH c:\Symbols;srv*c:\Symbols*https://msdl.microsoft.com/download/symbols
mkdir \symbols
Abra PMD.sln no Visual Studio.
Selecione o projeto setup e garanta que você consiga:
a. Compilar o projeto
b. Visualizar a instrução de impressão de debug no DebugView++.
Atualize as flags do compilador e do linker do projeto template para manipular as entradas da IAT e outras propriedades do PE.
a. Familiarize-se com a resolução dinâmica de API e com a documentação da MSDN.
b. Existem outras propriedades que se destacam? Se você executar o Strings.exe no binário, alguma string se destaca?
c. Você consegue removê-las/atualizá-las?
Use qualquer ferramenta de sua escolha para concluir o exercício (ex.: dumpbin/PE Bear). Um wrapper ao redor do pefile foi fornecido em scripts\props.py (certifique-se de instalar as dependências).
Baixe algumas amostras de malware do VXUG
a. Quais são as principais diferenças entre executáveis benignos e maliciosos?
b. Quais são as principais diferenças entre o nosso binário e os executáveis benignos?
O algoritmo de hash de API atualmente utilizado é o fnv1a.
solution e chame MessageBoxA usando o framework de hash de API.Baixe o Cisco Webex (https://www.webex.com/downloads.html)
Encontre o CiscoCollabHost e veja quais DLLs são carregadas
Abra o CiscoCollabHost no Ghidra e identifique diferentes maneiras de obter execução de código por meio de sideloading
Edite o dll_template para fazer sideload do seu binário alvo. Verifique se você consegue ver a string de debug no DebugView++.
Atualize o LastWriteTime e o CreationTime do dll_template.dll para corresponder aos da DLL alvo.
Compile e execute o projeto utilitário.
a. Adicionalmente, considere executá-lo no seu sistema host.
Copie a DLL identificada para o diretório x64/{Debug,Release} e atualize o código do loader.
Atualize execute_sc para executar seu shellcode com uma função diferente, usando o framework de hash de API.
Cadastre-se em um provedor de armazenamento em nuvem (ex.: AWS/CloudFlare)
Empacote seu payload e faça o upload dele
a. Adicionalmente, investigue maneiras de limitar/auditar o acesso aos downloads
Tire um snapshot da sua VM
Reverta para a VM base e execute seu cenário completo de "entrega"
.github\workflows\build.yml para fazer processamento adicional de pré/pós-processamento como você quiser, economizando tempo. Aqui estão algumas ideias:
props.py e valide/inclua a saídaLastWriteTime e CreationTime para corresponder a um alvo