2017-03-02 1 views
1

Je n'ai pas d'installateur .exe, qui peut facilement être ouvert avec 7zip; et son contenu peut être extrait sans installation. J'utilise 7z.exe pré-compilé et subprocess de python pour l'extraire.Comment extraire le contenu d'exe-archive en utilisant python?

import os, subprocess 
subprocess.call(r'"7z.exe" x ' + "Installer.exe" + ' -o' + os.getcwd()) 

Mais maintenant, je suis la recherche d'une méthode qui sera le code pur et ne dépend pas de tout exécutable externe, pour extraire le contenu de exe tassée.

J'ai cependant essayé les bibliothèques comme tarfile, PyLZMA, py7zlib ils ne parviennent pas à extraire l'exe, ou se plaindront que le format de fichier non valide, etc.

Répondre

1

L'archive auto-extractible est juste un exécutable avec une archive 7zip sur la fin. Vous pouvez rechercher tous les démarrages possibles de l'archive et essayer de décompresser la poignée de fichier commençant par là:

HEADER = b'7z\xBC\xAF\x27\x1C' 

def try_decompressing_archive(filename): 
    with open(filename, 'rb') as handle: 
     start = 0 

     # Try decompressing the archive at all the possible header locations 
     while True: 
      handle.seek(start) 

      try: 
       return decompress_archive(handle) 
      except SomeDecompressionException: 
       # We find the next instance of HEADER, skipping the current one 
       start += handle.read().index(HEADER, 1)