Jump to content
Sign in to follow this  
Davi

Criar um Protector / Packer

Recommended Posts

Como é possível criar um Protector / Packer? (tipo o Themida, que protege as  seções, e comprime), ou por exemplo o UPX.

 

Pode ser em qualquer linguagem, quero somente pegar a "base".

 

Share this post


Link to post
Share on other sites

O primeiro passo é conhecer o formato do arquivo PE com detalhes. Os compactadores executáveis são notoriamente difíceis de escrever; eles não exigem apenas conhecimento profundo do arquivo executável em si, mas também como ele interage com o sistema operacional durante o carregamento.

Geralmente o packer vai fazer estas coisas:

  • Primeiro, você pegará algum código executável e o transformará em um datablob(é uma coleção de dados binários armazenados como uma única entidade) usando um algoritmo reversível. O código pode ser uma função ou pode ser um programa inteiro. Uma função é fácil, um programa inteiro requer mais trabalho.
  • Você vai incorporar o datablob em algum lugar que o packer iria chegar até ele. Você pode incorporá-lo como um recurso no programa , baixá-lo da Internet ou usar um programa personalizado para inserir manualmente o load no executável do seu packer.
  • Em tempo de execução, seu packer encontrará o datablob, executará o algoritmo reverso e copiará o resultado em um buffer executável (geralmente VirtualAlloc , VirtualProtect ou uma das funções NTDLL que essas funções chamam). Se você estiver incorporando o load como um recurso, usará uma das APIs padrão para recuperá-la. Se você tiver incorporado manualmente o load no executável do packer, precisará ter algum tipo de método de assinatura que ele empacote e procure. Geralmente, você chamará GetModuleHandle para obter o endereço base de si mesmo em tempo de execução e, em seguida, poderá analisar o arquivo PE do packer na memória para localizar o próprio datablob.

Você pode avaliar o projeto UPX: Github

  • Curtir 2

Share this post


Link to post
Share on other sites
Posted (edited)
Em 06/03/2019 em 13:37, kassane disse:

O primeiro passo é conhecer o formato do arquivo PE com detalhes. Os compactadores executáveis são notoriamente difíceis de escrever; eles não exigem apenas conhecimento profundo do arquivo executável em si, mas também como ele interage com o sistema operacional durante o carregamento.

Geralmente o packer vai fazer estas coisas:

  • Primeiro, você pegará algum código executável e o transformará em um datablob(é uma coleção de dados binários armazenados como uma única entidade) usando um algoritmo reversível. O código pode ser uma função ou pode ser um programa inteiro. Uma função é fácil, um programa inteiro requer mais trabalho.
  • Você vai incorporar o datablob em algum lugar que o packer iria chegar até ele. Você pode incorporá-lo como um recurso no programa , baixá-lo da Internet ou usar um programa personalizado para inserir manualmente o load no executável do seu packer.
  • Em tempo de execução, seu packer encontrará o datablob, executará o algoritmo reverso e copiará o resultado em um buffer executável (geralmente VirtualAlloc , VirtualProtect ou uma das funções NTDLL que essas funções chamam). Se você estiver incorporando o load como um recurso, usará uma das APIs padrão para recuperá-la. Se você tiver incorporado manualmente o load no executável do packer, precisará ter algum tipo de método de assinatura que ele empacote e procure. Geralmente, você chamará GetModuleHandle para obter o endereço base de si mesmo em tempo de execução e, em seguida, poderá analisar o arquivo PE do packer na memória para localizar o próprio datablob.

Você pode avaliar o projeto UPX: Github

Dei uma olhada, basicamente é criado uma outra seção no PE e ela é descompressada usando o WriteProcessMemory(). 

Valeu!

Edited by Davi
  • Curtir 1

Share this post


Link to post
Share on other sites

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.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...