개요
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 pyarmor2. 암호화된 패키징 생성
pyarmor gen --pack onefile main.py3. 실행 파일 생성 확인
ls -lh dist/