e_yejun
Jun_ : Pwn
e_yejun
전체 방문자
오늘
어제
  • 분류 전체보기 (240)
    • Profile (1)
    • Pwnable (54)
    • Reversing (14)
    • Network (8)
    • Forensic (10)
    • Embedded (4)
    • Android (2)
    • Web (18)
    • 알고리즘 (42)
    • 프로그래밍 (24)
    • 프로젝트 (6)
    • 1-day (7)
    • CTF (15)
    • 기타 (33)
    • 일기장 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • how2heap
  • x64
  • BOF
  • rev-basic
  • 1-day
  • dreamhack.io
  • dvwa
  • wargame
  • Heap
  • X86

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
e_yejun

Jun_ : Pwn

기타

[Python] pyinstaller EXE 파일 소스코드 Decompile

2023. 7. 12. 17:45

Index

0x00 pyinstaller로 실습 exe 파일 생성
0x01 필요한 툴
0x02 pyinstxtractor.py (download)
0x03 HxD로 파일 형식 분석 및 시그니처 추가
0x04 uncompyle6 모듈을 통한 소스코드 확인
0x05 문제 해결
0x06 암호화된 키 값 확인

[Python] exe 파일 만들기 - pyinstaller
pyinstaller 설치 pip install pyinstaller 간단한 테스트를 해보자 import datetime now = datetime.datetime.now() nowDatetime = now.strftime("%Y-%m-%d %H:%M:%S") print(nowDatetime)#2020-11-23 02:35:20 cmd를 열어 test.py 파일의 경로로 이동 pyinstaller --onefile test.py ./dist 이동 cmd 창이 실행과 동시에 바로 종료된다면? import datetime import os now = datetime.datetime.now() nowDatetime = now.strftime("%Y-%m-%d %H:%M:%S") print(nowDatetime..
https://she11.tistory.com/83

앞선 위 포스팅에서 pyinstaller를 이용하여 파이썬 코드를 노출하지 않을 수 있는 방법을 설명했다. 하지만, 툴을 이용하면 원래 소스코드를 확인 할 수 있다.

[PyQt5] 나만의 퀴즈 프로그램 만들기
[PyQt5] Anaconda Qt Designer 설치이번 글에서는 PyQt를 이용한 파이썬 GUI 코딩을 하기 위해, 환경설정 방법을 작성한다. 다음과 같이 함께 진행하면 별 문제 없이 UI 디자인을 할 수 있는 Qt Designer를 설치할 수 있다. Anaconda 설치Anaconda | The World’s Most Popular Data Science PlatformAnaconda is the birthplace of Python data science. We are a movement of data scientists, data-driven enterprises, and open source communities.https://www.anaconda.com/ 위 사이트에 방문하여 Downlo..
https://she11.tistory.com/180?category=826489

이전에 만들었던 퀴즈 프로그램을 통해 직접 실습 해볼 것이다.


0x00 pyinstaller로 실습 exe 파일 생성

pyinstaller --onefile profile_problem.py

해당 python 파일의 이름은 profile_problem.py 이다. 먼저, pyinstaller를 이용해서 실행 파일로 만든다.

💡
필자가 이 글에서 사용한 파이썬 버전은 3.8이다!

경로에 build와 dist 폴더가 생성된 것을 확인할 수 있다.

.\dist\profile_problem\ 폴더로 들어가면 profile_problem.exe 파일이 있다.

실행 시에도 문제풀이 게임이 잘 실행된다. py 파일 안에는 문제의 정답을 비교하고 있지만, exe 파일로 변환되어서 확인할 수 없다. 이를 다시 py파일로 변환시켜서 소스 코드를 확인해보자.

0x01 필요한 툴

  • pyinstxtractor.py 설치 (https://sourceforge.net/project/pyinstallerextractor)
  • HxD Editor (https://mh-nexus.de/en/hxd/)
  • uncompyle6 (pip3 install uncompyle6)

0x02 pyinstxtractor.py (download)

pyinstaller로 만든 exe 파일을 디컴파일 해준다.

python pyinstxtractor.py profile_problem.exe

실행한 경로에 profile_problem.exe_extracted이라는 폴더가 생성되었을 것이다.

위 파일 중에 프로그램 이름과 동일한 파일이 있을 것이다. 우리는 이 파일을 수정하여 원본 소스 코드를 찾아낼 것이다. 먼저, 이 파일을 HxD 툴에 던져보자.

0x03 HxD로 파일 형식 분석 및 시그니처 추가

위와 같은 형식을 가지고 있다. pyinstaller는 py 파일을 exe로 변환시키고 파일 시그니처를 지운다. 그러니, 소스 파일의 버전을 확인하여 파일 시그니처를 앞에 추가해주면 소스 코드를 확인 가능하다.

42 0D 0D 0A 01 00 00 00 00 00 00 00 00 00 00 00

위 Hex 값으로도 소스 코드가 확인되는 경우도 있지만, pyinstaller가 실행된 버전에 따라 달라질 수 있기 때문에, base_library.zip 파일 안에 있는 pyc 파일로도 확인이 가능하다.

앞서 profile_problem 파일과 비교해보면 E3 00 ~ 앞에 16바이트로 구성된 시그니처가 있는 것을 확인할 수 있다. 이를 시그니처 값을 앞선 파일 맨 앞에 추가해서 pyc 파일로 저장해보자.

.pyc 파일로 잘 저장되었으면, uncompyle6 모듈을 통해 소스코드를 확인할 수 있다.

0x04 uncompyle6 모듈을 통한 소스코드 확인

uncompyle6 profile_source.pyc

퀴즈를 구성한 클래스를 확인할 수 있고, 문제를 확인해보니 첫번째 문제는 이예준, 두번째 문제는 정보보호학전공 인 것을 확인했다. 문제를 실행해서 해결해보자.

0x05 문제 해결

앞서 확인했던 소스 코드와 동일한 실행된 문제가 나왔으며, 우리는 문제의 답이 설정된 것을 알기 때문에, 쉽게 문제를 해결할 수 있었다. 실행 파일을 만든다고, 코드 전체가 숨겨지는 것은 아니기 때문에, 파이썬으로 만들어진 프로그램을 공유할 때는 조심해야 할 것 같다. 또한, 암호화를 통해 실행 파일로 묶는 방법을 사용하면 좋을 것 같다.

0x06 암호화된 키 값 확인

pyinstaller로 exe로 만들 때, 옵션을 통해 암호키를 입력하여 암호화 할 수 있다.

pyinstaller --clean -n PIE --key=jbuctf --onefile --noconsole pie.py

이 파일 역시 0x02의 pyinstxtractor.py 툴로 돌려준다.

에러가 발생한다. 암호화로 인해 발생하는 것이다.

위 사진과 같이 폴더는 동일하게 생성된다.

crypto_key 라는 파일이 있고, 이 파일을 HxD에 열어보자.

아까 위에서 pyinstaller 시 사용했던 키 문자열 값을 확인 할 수 있다. 에러는 났어도, 실행파일에 앞선 과정을 적용하면, 소스코드도 동일하게 나온다.


Uploaded by N2T

    '기타' 카테고리의 다른 글
    • GPS 좌표 (위/경도, 도분초, 10진수)
    • AWS 시작하기 (생성, 접속, 설정)
    • [PyQt5] Python과 Designer 연동
    • [PyQt5] Anaconda Qt Designer 설치
    e_yejun
    e_yejun
    정리노트 •_•

    티스토리툴바