Profile picture

[Python / GUI] Pyinstaller Decompile 방법 및 Pyarmor로 코드 난독화하는 방법

JaehyoJJAng2024년 09월 14일

개요

PyInstaller로 패키징된 .exe 파일을 디컴파일 하는 방법과

Pyarmor로 코드 난독화를 진행하고 난독화가 된 .exe 파일을 PyInstaller를 디컴파일 했을 때와 동일하게 진행하면 어떤 결과가 나오는지 기록해보려고 한다!


PyInstaller Decompile

파이썬 프로그램을 .exe로 변환할 때 흔히 사용되는 도구 중 하나가 바로 PyInstaller이다.

PyInstaller로 생성된 .exe 파일을 파이썬 코드를 .pyc(바이트 코드) 파일로 패키징한 형태이다.


이 경우에는 .exe 파일을 디컴파일하여 원래의 Python 코드(혹은 유사한 형태)를 복원할 수 있다.


디컴파일 과정

1. 파일 구조 추출

PyInstaller로 생성된 .exe 파일은 압축되어 있으므로, 이를 먼저 풀어야 한다.

여기서는 pyinstxtractor.py 스크립트를 사용하여 .exe 파일을 추출해볼거다.



2. 바이트코드 (.pyc) 디컴파일

바이트코드 디컴파일의 경우에는 여러 가지 도구를 사용할 수 있는데

그 중에는 uncompyle6decompyle3 등이 존재한다.


그러나 본인은 디컴파일 하려는 파이썬 .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 바이트코드를 업로드하면 정상적으로 디컴파일 되어 소스 코드로 나타난다!
image


Pyarmor로 코드 난독화하기


PyInstaller는 패키징할 때 코드에 대한 암호화 작업이 이루어지지 않기 때문에,

PyInstaller Decompile에서 진행했던 것 처럼 매우 쉽게 코드가 노출될 수 있다.


이를 방지하려면 패키지에 대한 암호화가 필수적인데, 이를 위해 Pyarmor를 사용하면 쉽게 코드 난독화가 가능하다.


1. pyarmor 설치

pip install pyarmor

2. 암호화된 패키징 생성

pyarmor gen --pack onefile main.py

3. 실행 파일 생성 확인

ls -lh dist/

Loading script...