Jump to content

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


Recommended Posts

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).

  • Curtir 1
  • l33t 1
Link to post
Share on other sites
  • Fernando Mercês changed the title to PoC: Explorando o PEB e acessando a Export Table do Kernel32.dll em runtime

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...