Ir para conteúdo

PoC: Explorando o PEB e acessando a Export Table do Kernel32.dll em runtime


unc4nny

Posts Recomendados

Oi.

Talvez voce ja tenha se deparado com algumas amostras de Malware em que ele acessa o PEB para depois acessar a export table de alguma Dll e resolver uma funcao em runtime, evitando deixar strings no arquivo compilado para dificultar nossas vidas. Acredito que o nome dessa tecnica seja "Resolucao dinamica da IAT" (@Fernando Mercês se eu tiver falando abobrinha mim disgurpe pfvo D:).
Nao pretendo escrever um artigo sobre como funciona isso, ja que eu provavelmente nao sei o suficiente, masss... Eu escrevi um Proof of Concept (PoC) e coloquei ele no meu GitHub.

Segue alguns prints que eu tirei durante a execucao dele:

A funcao LoadLibraryA sendo carregada e posteriormente chamada:
Screenshot_20210123_141308.thumb.png.906b4a53e32770cde0aa97f6396a1a4d.png

Conteudo no registrador eax:

Screenshot_20210123_141441.png.a31cb3db204aea3818d72d3519f9a570.png

Conteudo na pilha (note o argumento sendo passado)

Screenshot_20210123_141533.png.1f45da1e5754fc4287d914f2d4457b4a.png

 

Visao no Ghidra:

Screenshot_20210123_141921.thumb.png.727ae4a890c5b97f632dca5c784bab87.png

O codigo fonte esta disponivel no meu repositorio. Se voce tem interesse em dar uma olhada, talvez ajude voce a reconhecer esses padroes mais rapido na proxima vez que voce for analisar um malware.

Essa documentacao visual do Corkami tambem eh muito util.

Eu ainda estou trabalhando no codigo, eu pretendo deixar ele muito bem documentado e legivel, ja que eu ainda acho que a documentacao sobre esse assunto ainda eh meio escassa. Eventualmente, eu ainda pretendo fazer de um modo que nao deixe uma string sequer no programa. Mas se voce quer algo que funciona logo, mesmo que nao muito bem documentado (na minha opiniao podia ter mais comentarios, mas como dizem... bons codigos falam por si mesmo), existe o lazy_importer. Eu fui obrigado a usar as definicoes de struct do codigo dele, ja que havia se passado uma semana e eu nao fazia idea do porque estava dando Acess Violation 0x000005. Ainda nao descobri o porque, mas nao havia muita diferenca entre as definicoes dele e minha, enfim... (mas aprendi sobre o reinterpret_cast lendo o codigo dele).

Link para o comentário
Compartilhar em outros sites

  • Fernando Mercês changed the title to PoC: Explorando o PEB e acessando a Export Table do Kernel32.dll em runtime

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...