본문으로 바로가기
728x90
반응형
해당 포스팅은 예전 사용하던
블로그(klonic.tistory.com)에서
이전한 글입니다.
 

목차

     

    개요

    pyinstaller 파이썬으로 작성된 .py 확장자를 가진 파이썬 소스 파일을 .exe 파일로 변환할 쓰는 도구입니다.

    pip install pyinstaller
    설치가 가능하고 설치가 되고 나면 cmd terminal에서 pyinstaller라는 명령어라는 명령을 내림으로써 사용이 가능합니다.

    문득 이렇게 exe 파일로 변환된 프로그램을 다시 .py 변경할 없을까라는 생각이 들었습니다.

     

    Tool Setup

    필요한 도구는 아래와 같습니다.

    1. HxD
       - 파일의 16진수 값을 보기 위한 헥사 에디터
       - https://mh-nexus.de/en/hxd

    2. pyinstxtractor.py
       - pyinstaller로 만들어진 exe 파일을 디컴파일 해주는 툴입니다.
       - https://sourceforge.net/projects/pyinstallerextractor

    3. uncompyle6 - pip install uncompyle6 로 설치 가능합니다


    How to ?

    테스트해볼 파일은 solveit.exe 파일입니다. 간단히 제작한 python 스크립트 파일입니다. pyinstaller를 통해 exe로 변환된 파일이기도 합니다. 이 파일을 가지고 파이썬 소스를 열어보겠습니다.

    2 도구인 pyinstxtractor.py solveit.exe 파일을 열면 다음과 같이 하나의 폴더가 생성됩니다.

    생성된 solveit.exe_extracted의 폴더는 다음과 같은 파일과 디렉터리를 가지고 있습니다.

    눈 여겨볼 것은 이중에 MakeProblem이라는 파일입니다. 다른 파일들과 다르게 용량도 적고 확장자도 없습니다. 같은 파일로는 struct 보이는데 글에서 다루는 문제를 해결하기 위해 분석해야 하는 파일은 MakeProblem입니다

    하나 python37.dll이라는 파일을 통해 해당 exe 파일 python3.7 버전으로부터 *. exe 바꿔졌다고 있습니다 파일(MakeProblem) HxD 써서 보면 E3부터 시작하는 파일의 구조가 보입니다

    여기서 하나 짚고 넘어가야 하는 점은 pyinstaller로 *. py을 *. exe 파일로 변환시켰을 때 pyinstaller는 매직 넘버를 자동으로 지운다고 합니다. 그러니 해당 소스 파일이 어느 버전인지 확인한 다음 그 매직 넘버를 HxD로 열어본 파일의 맨 앞에 추가해주면 소스를 열어 볼 수 있습니다.

    하지만 이 매직 넘버는 쉽사리 추측하기 어렵습니다. 그래서 같은 경로에 있는 base_libraray.zip 파일을 압축 해제한 다음 아무 파일이나 HxD로 열어보면 매직넘버가 무엇인지 알 수 있습니다.

    이 때 매직 넘버를 판단하는 근거는 "E3"가 어느 위치에서 시작됐는지입니다.

    사진은 매직 넘버를 추측하는데 쓰인 다른 파일입니다. E3 위치가 달라진 것을 확인할 있습니다. 매직 넘버를 복사해서 E3 위치 앞에 붙여 넣기 해준 다음 *. pyc 파일로 저장해줍니다저는 MakeProblem37 number.pyc 저장한 uncompyle6 통해 실행해 결과 소스코드가 확인됩니다.

     

     

     

     

    728x90
    반응형

    'Language > Python' 카테고리의 다른 글

    UserAssist 레지스트리 분석  (0) 2022.04.03
    0은 False이다 !!  (0) 2022.04.03
    pyJWT : encode /decode / registerd claim names  (0) 2021.08.13
    Python의 Strip()은 재귀 호출  (0) 2021.06.07
    [Python][Excel] : Sheet to file  (0) 2020.11.06