Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
BeatRev — POC para frustrar/derrotar analistas de malware | Kitploit
Ferramentas/GitHubGitHub/octoberfest7/beatrev
Engenharia ReversaAnálise de MalwareAprendizado e EducaçãoDesenvolvimento de Payloads
GitHuboctoberfest7/beatrev

BeatRev

POC para frustrar/derrotar analistas de malware

Ver Repositório
1542213há 4 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

BeatRev Versão 2

Isenção de Responsabilidade

O trabalho a seguir é uma POC para permitir que malwares se "vinculem" a uma vítima específica, a fim de frustrar os esforços de analistas de malware.

Não assumo nenhuma responsabilidade pelo uso malicioso de qualquer ideia ou código contido neste projeto. Disponibilizo esta pesquisa para educar ainda mais profissionais de segurança da informação e fornecer treinamento adicional / alimento para reflexão para Analistas de Malware, Engenheiros Reversos e Equipes Azuis em geral.

TLDR

Na primeira vez que o malware é executado em uma vítima, ele criptografa via AES a carga útil real (um RDLL) usando dados ambientais dessa vítima. Cada vez subsequente que o malware é executado, ele coleta as mesmas informações ambientais, descriptografa via AES a carga útil armazenada como um array de bytes dentro do malware e a executa. Se a descriptografia falhar / a carga útil não executar, o malware se autoexclui. Proteção contra engenheiros reversos e analistas de malware.

Atualizado em 6 de JUNHO de 2022

image

Não senti que este projeto estava finalizado, então voltei e fiz uma reescrita bastante substancial. A pesquisa original e o tradecraft podem ser encontrados Aqui.

As principais mudanças são as seguintes:

  1. Disponibilizei todo o código-fonte
  2. Integrei o ReflectiveDLL de Stephen Fewer ao projeto para substituir o Stage2
  3. Formatei alguns dos arrays de bytes deste projeto em formato de string e os analiso com UuidFromStringA. Este Repositório foi usado como modelo. Isso foi feito para reduzir a entropia do Stage0 e do Stage1
  4. O Stage0 recebeu uma boa quantidade de evasão de AV embutida. Agradecimentos ao Projeto Ares do Cerbersec pela inspiração
  5. O aplicativo builder para produzir o Stage0 foi incluído

Existem várias coisas diferentes que podem ser tiradas do código-fonte deste projeto para uso em outros lugares. Espero que seja útil para alguém.

Problemas da Versão Original e Mitigações

Havia algumas deficiências na versão original do BeatRev que decidi tentar resolver.

O Stage2 era anteriormente um executável independente armazenado como um fluxo de dados alternativo (ADS) do Stage1. Para alcançar a criptografia AES por vítima e a subsequente descriptografia e execução, cada vez que o Stage1 era executado, ele lia o ADS, descriptografava, escrevia de volta no ADS, chamava CreateProcess e, em seguida, recriptografava o Stage2 e o escrevia de volta no disco no ADS. Isso gerava muitas operações de I/O e a chamada CreateProcess, claro, não era ideal.

Me deparei com a pesquisa de Steven Fewer sobre DLLs Refletivas e pareceu uma boa adaptação. Stage2 agora é um RDLL; nosso malware / runner de shellcode / qualquer coisa que queiramos proteger pode ser portado para o formato RDLL e armazenado como um array de bytes dentro do Stage1, que é então descriptografado em tempo de execução e executado pelo Stage1. Isso remove todas as operações de I/O e a chamada CreateProcess da Versão 1 e é uma mudança bem-vinda.

O Stage1 não tinha nenhum tipo de medida real de evasão de AV programada; isso foi intencional, pois é trabalho extra e não era realmente o objetivo desta pesquisa. Durante a reescrita, encarei isso como um desafio adicional e adicionei hash de API para remover funções da Tabela de Endereços de Importação do Stage1. Isso ajudou na detecção e o Stage1 tem uma taxa de detecção de 4/66 no VirusTotal. Senti-me confortável em enviar o Stage1, dado que ele já está vinculado à máquina original onde foi executado e a assinatura do arquivo muda constantemente devido à criptografia AES que ocorre.

Recentemente, comecei a prestar atenção na entropia como meio de detectar malware; para tentar reduzir a entropia, que de outra forma seria muito alta devido a um blob binário gigante criptografado com AES, pesquisei a integração de shellcode armazenado como UUIDs. Como o binário é armazenado em representação de string, há menor entropia geral no executável. Usando essa técnica, a entropia do Stage0 agora é de aproximadamente 6,8 e do Stage1 de ~4,5 (em uma escala máxima de 8).

Finalmente, é uma tarefa enorme integrar e produzir um Stage0 completo devido a todas as peças que precisam ser manipuladas. Para facilitar isso, criei um aplicativo builder que ingere um arquivo de template Stage0.c, um stub Stage1, um stub Stage2 e um arquivo de shellcode bruto (isso foi construído em torno do Stage2 sendo um runner de shellcode contendo shellcode do CobaltStrike) e produz um payload Stage0 compilado para uso no alvo.

Detalhes Técnicos

O código DLL Refletiva de Stephen Fewer contém algumas instruções específicas do compilador Visual Studio; tenho certeza de que é possível portar a técnica para o MingW, mas não tenho as habilidades para fazê-lo. O principal problema aqui é que o shellcode do CobaltStrike (sem estado é ~265K) precisa ir dentro do RDLL e ser compilado. Para contornar isso e integrá-lo bem com o resto do processo, escrevi meu RDLL Stage2 para conter um bloco de memória variável global do tamanho do shellcode CS; esse bloco de memória de ~265K tem um pequeno placeholder que pode ser localizado no binário compilado. O código em src/Stage2 já tem isso adicionado.

Uma vez compilado, este Stage2stub é transferido para o kali onde um patch binário pode ser realizado para colocar o shellcode CS real no local de memória que lhe pertence. Isso produz o Stage2 completo.

Para evitar o fiasco de I/O e CreateProcess descrito anteriormente, o Stage2 completo também deve ser patchado no Stage1 compilado pelo Stage0; isso é necessário para permitir que o Stage2 seja criptografado uma vez no alvo, além de evitar que o Stage2 seja armazenado separadamente no disco. O mesmo conceito descrito anteriormente para o Stage2 é conduzido pelo Stage0 no alvo para montar o payload final do Stage1. Deve-se notar que a função memmem é usada para localizar o placeholder dentro de cada stub; esta função não está disponível no Windows, então uma implementação personalizada foi usada. Agradecimentos ao Foxik384 por seu código.

Para realizar um patch binário, devemos alocar a memória necessária antecipadamente; isso tem um efeito composto, pois o Stage1 agora deve ser grande o suficiente para conter também o Stage2. Com a etapa adicional de converter o Stage2 em uma string UUID, o Stage2 aumenta de tamanho, assim como o Stage1 para armazená-lo. Um RDLL Stage2 com tamanho compilado de ~290K resulta em um payload Stage0 de ~1,38M e um payload Stage1 de ~700K.

O aplicativo builder suporta apenas a criação de EXEs x64. No entanto, com um pouco mais de trabalho, em teoria, você poderia fazer do Stage0 uma DLL, assim como do Stage1, e fazer todo o ciclo de vida existir como um sequestro de DLL em vez de um executável independente.

Instruções

Estas instruções o guiarão no uso desta POC.

Baixar ferramenta