2017-03-02 1 views
1

Ich habe ein .exe-Installationsprogramm, das leicht mit 7zip geöffnet werden kann; und sein Inhalt kann ohne Installation extrahiert werden.Wie extrahiere ich Inhalte von exe-archive mit Python?

Ich verwende vorkompilierte 7z.exe und Pythons subprocess, um es zu extrahieren.

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

jetzt aber bin ich für ein Verfahren suchen, die reine Code sein und hängt nicht von einem externen ausführbaren, Inhalte von gepackten exe zu extrahieren.

Ich habe Bibliotheken versucht, wie tarfile, PyLZMA, py7zlib aber sie scheitern, die exe zu extrahieren, oder wird sich beschweren, dass das Dateiformat nicht gültig ist, usw.

Antwort

1

Die selbstextrahierende Archiv ist nur eine ausführbare Datei mit einem 7-Zip-Archiv auf das Ende. Sie könnten nach allen möglichen Starts des Archivs suchen und versuchen, das Dateihandle zu dekomprimieren, das dort beginnt:

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) 
Verwandte Themen