개요
PyInstaller
로 패키징된 .exe
파일을 디컴파일 하는 방법과
Pyarmor
로 코드 난독화를 진행하고 난독화가 된 .exe
파일을 PyInstaller
를 디컴파일 했을 때와 동일하게 진행하면 어떤 결과가 나오는지 기록해보려고 한다!
PyInstaller Decompile
파이썬 프로그램을 .exe
로 변환할 때 흔히 사용되는 도구 중 하나가 바로 PyInstaller
이다.
PyInstaller로 생성된 .exe
파일을 파이썬 코드를 .pyc
(바이트 코드) 파일로 패키징한 형태이다.
이 경우에는 .exe
파일을 디컴파일하여 원래의 Python 코드(혹은 유사한 형태)를 복원할 수 있다.
디컴파일 과정
1. 파일 구조 추출
PyInstaller로 생성된 .exe
파일은 압축되어 있으므로, 이를 먼저 풀어야 한다.
여기서는 pyinstxtractor.py
스크립트를 사용하여 .exe
파일을 추출해볼거다.
- 다운로드: https://github.com/extremecoders-re/pyinstxtractor
- 사용법:
python pyinstxtractor.py example.exe
- 실행하면
extracted
디렉토리에 압축 해제된 파일들이 생성된다.
- 실행하면
2. 바이트코드 (.pyc) 디컴파일
바이트코드 디컴파일의 경우에는 여러 가지 도구를 사용할 수 있는데
그 중에는 uncompyle6
나 decompyle3
등이 존재한다.
그러나 본인은 디컴파일 하려는 파이썬 .exe
패키지가 파이썬 3.12 버전 이상을 사용 중이었기에 정상적으로 디컴파일이 진행되지 않았다.
영어 키워드로 검색을 조금 하고나니 reddit
에 다음과 같은 글을 볼 수 있었다.
https://www.reddit.com/r/learnpython/comments/1cue92l/can_i_decompile_a_python_exe_to_py_created_with/
질문자도 나와 동일한 문제를 겪고 있었고, 댓글에서 그 해답을 얻을 수 있었다.
https://pylingual.io/라는 사이트인데
여기다가 파일 구조 추출에서 진행했었던 .pyc
바이트코드를 업로드하면 정상적으로 디컴파일 되어 소스 코드로 나타난다!
Pyarmor로 코드 난독화하기
PyInstaller는 패키징할 때 코드에 대한 암호화 작업이 이루어지지 않기 때문에,
PyInstaller Decompile에서 진행했던 것 처럼 매우 쉽게 코드가 노출될 수 있다.
이를 방지하려면 패키지에 대한 암호화가 필수적인데, 이를 위해 Pyarmor
를 사용하면 쉽게 코드 난독화가 가능하다.
1. pyarmor 설치
pip install pyarmor
2. 암호화된 패키징 생성
pyarmor gen --pack onefile main.py
3. 실행 파일 생성 확인
ls -lh dist/