Question:
Comment faire du reverse engineering d'un EXE "compilé" avec PyInstaller
Mick
2013-03-22 19:01:31 UTC
view on stackexchange narkive permalink

Ayant récemment regardé / lu une présentation donnée par Dave Kennedy à DEF CON 20 [PDF], j'aimerais savoir comment décompiler un script Python compilé avec PyInstaller.

Dans sa présentation, il crée un script de base inversé en Python, et le convertit en un EXE avec PyInstaller.

Ma question est de savoir comment prendre un PyInstaller créé EXE et récupérer complètement ou généralement le code logique / source du ou des scripts Python d'origine?

Quel est l'intérêt de créer un fichier exe lorsque vous êtes en mesure de pirater le fichier exe lui-même.
Le but de la génération d'un EXE avec PyInstaller est de sorte que les systèmes sur lesquels vous l'exécutez ne nécessitent pas l'existence d'un interpréteur Python ou de tout module tiers que vous utilisez. Cela rend votre script Python plus portable, mais ne cache pas le code / la logique à un reverse engineering.
Cinq réponses:
#1
+30
Ange
2013-03-22 20:39:38 UTC
view on stackexchange narkive permalink
  1. extraire les données ajoutées à EXE (bloc commençant par PYZ, jusqu'à la fin du fichier)
  2. extraire les fichiers voulus avec le visualiseur d'archives de PyInstaller
  3. decompyle .PYCs - Je recommande personnellement Uncompyle2 pour cela.
Plus à jour Uncompyle est à https://pypi.python.org/pypi/uncompyle6
Il y a aussi de l'aide dans cet article: https: //stackoverflow.com/questions/18303122/how-to-decompile-files-from-pyinstaller-pyz-file Vous pouvez utiliser ce script pour extraire les fichiers: https: // sourceforge. net / projects / pyinstallerextractor / La version 1.8 est également dans pastebin: https: //pastebin.com/fnMw9AuL* Assurez-vous d'avoir installé pyinstaller (`pip install pyinstaller`) Après avoir extrait le fichier, vous pouvez également utiliser cet outil: https: / /sourceforge.net/projects/easypythondecompiler/files/
Comment faites-vous le numéro 1?
#2
+10
Remko
2013-03-22 20:05:34 UTC
view on stackexchange narkive permalink

PyInstaller publie sa source afin que vous voyiez exactement comment il emballe le code python dans l'exécutable ...

Une approche plus générale serait d'utiliser un outil comme binwalk sur l'exe comme première étape.

Je ne suis pas sûr que binwalk soit le bon outil pour ce travail. Cela vous montrerait les sections compressées de l'exécutable, mais la sortie aurait probablement beaucoup d'autres faux positifs, à moins que vous ne le pointiez pour rechercher uniquement les sections compressées ... ce qui va à l'encontre de l'objectif de l'utiliser sur ce type de fichier, à mon humble avis.
@mrduclaw: mon expérience avec binwalk est que c'est un bon outil pour faire une analyse de haut niveau sur des fichiers binaires inconnus pour voir ce qui pourrait y être. Surtout si nous savons ce que nous recherchons mais ne savons pas dans quel fichier il se trouve. Je ne voulais pas proposer binwalk comme solution complète (j'ai modifié ma réponse pour indiquer que c'était une première étape)
Pour info, le lien vers binwalk semble être signalé comme site Web malveillant en juin 2020.
@Karsun faux positif sur un binaire sur mon site Web, j'ai signalé cela à google et cela semble aller à nouveau bien maintenant (merci de me le faire savoir)
#3
+9
Igor Skochinsky
2013-03-22 19:56:44 UTC
view on stackexchange narkive permalink

La présentation de hack.lu 2012 intitulée "Une analyse critique de la sécurité des logiciels Dropbox" a discuté de l'inversion du client de bureau Dropbox qui utilisait une implémentation similaire mais avec une touche supplémentaire d'interpréteur Python personnalisé avec un bytecode modifié.

Revue de la présentation: http://blog.csnc.ch/2012/12/asfws-a-critical-analysis-of-dropbox-software-security/
Lien vers les diapositives: http://archive.hack.lu/2012/Dropbox%20security.pdf

#4
+8
Glides
2013-03-22 19:22:07 UTC
view on stackexchange narkive permalink

Ce processus devrait vous rapprocher le plus possible de la source d'origine.

En gros, ce que font des outils comme pyinstaller et py2exe, ce sont les bibliothèques de packages et les dépendances toutes ensemble afin que vous puissiez exécuter le fichier EXE 'autonome' sans avoir à les télécharger ou à préparer la machine avec un interpréteur python.

Lorsque vous lancez le fichier EXE - il est décompressé en mémoire. Cela inclut les fichiers .pyc (code python qui est converti en bytecode). pyREtic est un outil qui vous permet de récupérer ceux-ci de la mémoire et de les reconvertir en source.

https://github.com/MyNameIsMeerkat/pyREtic

pyREtic

Rétro-ingénierie Obfuscated Python Bytecode Cette boîte à outils vous permet de ramener un objet en mémoire vers le code source, sans avoir besoin d'accéder au bytecode directement sur le disque. Cela peut être utile si les applications pyc sur le disque sont obscurcies de plusieurs manières.

#5
+4
0xec
2014-02-15 22:23:33 UTC
view on stackexchange narkive permalink

La solution unique pour toutes les choses pyinstaller exe. Utilisez ce programme pour désosser un fichier exe généré par pyinstaller.

https://sourceforge.net/projects/pyinstallerexerebuilder/



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...