2017-03-02 4 views
1

저는 7zip으로 쉽게 열 수있는 .exe 설치 프로그램을 제공합니다. 설치하지 않고 내용을 추출 할 수 있습니다.python을 사용하여 exe-archive의 내용을 추출하는 방법은 무엇입니까?

미리 컴파일 된 7z.exe와 파이썬의 subprocess을 사용하여 압축을 풉니 다.

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

그러나 지금은 순수 코드되며 포장 된 EXE 파일의 내용을 추출하기 위해, 외부 실행에 의존하지 않는 방법을 찾고 을 해요.

나는 그들이 EXE 파일을 추출하는 데 실패, 또는 ​​파일 형식이 유효하지 않음을 불평하지만 tarfile, PyLZMA, py7zlib 같은 라이브러리를 해봤 등

답변

1

자동 압축 풀림 아카이브에서 7zip과 아카이브와 그냥 실행 파일입니다 끝. 가능한 모든 아카이브 시작 부분을 살펴보고 거기에서 시작하는 파일 핸들을 압축 해제 해보십시오.

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)