Desembalaje de archivos ejecutables

Hola, Khabrovites. Como parte del curso "Ingeniería inversa. Básico", Alexander Kolesnikov (especialista en protección compleja de objetos de informatización) preparó un artículo.



También invitamos a todos a un seminario web abierto sobre el tema "Explotación de vulnerabilidades en el controlador. Parte 1 " . Los participantes del seminario web, junto con un experto, analizarán las vulnerabilidades de desbordamiento de controladores y los detalles del desarrollo de exploits en modo kernel.






Este artículo discutirá los enfoques para analizar archivos ejecutables empaquetados utilizando herramientas simples de ingeniería inversa. Discutiremos algunos de los empaquetadores que se utilizan para empaquetar archivos ejecutables. Todos los ejemplos se llevarán a cabo en el sistema operativo Windows, sin embargo, los enfoques estudiados se pueden migrar fácilmente a cualquier sistema operativo.





Configuración del sistema operativo y el kit de herramientas

Para las pruebas, usaremos una máquina virtual con Windows. El kit de herramientas contendrá las siguientes aplicaciones:





  • depurador x64dbg;





  • el complemento x64dbg Scylla instalado de forma predeterminada;





  • hiew Demo;





La forma más rápida y sencilla de descomprimir cualquier archivo ejecutable es utilizar un depurador. Pero como también consideraremos el lenguaje de programación Python, es posible que necesitemos un proyecto:





  • proyecto descompile6 que le permite analizar el código de bytes de una máquina virtual Python;





  • pyinstallerExtractor es una herramienta para extraer un archivo pyInstaller.





Métodos generales de desembalaje.

, . . , . — 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