Descompactando arquivos executáveis

Olá, Khabrovites. No âmbito do curso "Engenharia Reversa. Básico" Alexander Kolesnikov (especialista em proteção complexa de objetos de informatização) elaborou um artigo.



Também convidamos a todos para um webinar aberto sobre o tópico "Exploração de vulnerabilidades no driver. Parte 1 " . Os participantes do webinar, junto com um especialista, analisarão as vulnerabilidades de estouro de driver e as especificidades do desenvolvimento de exploits no modo kernel.






Este artigo discutirá abordagens para analisar arquivos executáveis ​​compactados usando ferramentas simples de engenharia reversa. Discutiremos alguns dos compactadores usados ​​para compactar arquivos executáveis. Todos os exemplos serão conduzidos no sistema operacional Windows, entretanto, as abordagens estudadas podem ser facilmente portadas para qualquer sistema operacional.





Configuração de kit de ferramentas e sistema operacional

Para os testes, usaremos uma máquina virtual rodando Windows. O kit de ferramentas conterá os seguintes aplicativos:





  • depurador x64dbg;





  • Plug-in x64dbg Scylla instalado por padrão;





  • hiew Demo;





A maneira mais rápida e fácil de descompactar qualquer arquivo executável é usar um depurador. Mas, como também consideraremos a linguagem de programação Python, podemos precisar de um projeto:





  • projeto uncompile6 que permite analisar o bytecode de uma máquina virtual Python;





  • pyinstallerExtractor é uma ferramenta para extrair um arquivo pyInstaller.





Métodos gerais de desempacotamento

, . . , . — UPX. , .





, , . 1.5 .





-? , ? . , :





, UPX:





:





  1. — , , ;





  2. : , .





, , . :





  1. — , ;





  2. — ( , );





  3. ;





  4. .





. . pushad/popad



push



. ESP/RSP, "Hardware Breakpoint" , . , . .





UPX

. UPX:





:





:





ESP — . :





:





, Scylla Hide .





, .





PyInstaller

, . , PyInstaller — , Python . , Python . .





- . Python PyInstaller. :





def main():
    print("Hello World!")

if __name__ == '__main__':
    main()
      
      



pyInstaller



exe



:





pip install pyinstaller
pyinstaller -F hello.py #-F   
      
      



, , . , , , . .





, ./dist/test.exe



. pyinstallerextractor



uncompile3



:





, . exe



. test.pyc



. hiew



:





, Python. — uncompile6



.





.






"Reverse-Engineering. Basic".





« . 1».








All Articles