본문 바로가기
파이썬코드공유

[강추] 파이썬 EXE 실행파일 디컴파일 초간단 방법(Magic Number 불필요)

by 하이어시스템 2023. 7. 17.
반응형

이전 포스팅에서는 파이썬 배포 프로그램의 난독화의 필요성에 대해서 소개해 드렸습니다. 이번에는 실제로 난독화된 실행파일을 디컴파일 하여 원래 소스를 복원해 내고 난독화된 상태로 패킹이 되었는지 검증을 해보도록 하겠습니다. 이번 포스팅에서는 Magic Number를 자동으로 복구해주는 툴을 이용하며, decompyle3, uncompyle6 같은 모듈 형식의 디컴파일러 대신 실행파일 형태의 디컴파일러를 사용하여 훨씬 효율적인 방법으로 진행을 합니다. 많은 도움이 되시길 바랍니다.

 

하이어시스템 소개

 

하이어시스템 소개 feat.김프로

소개 안녕하세요, 저는 하이어시스템의 김프로입니다. 여러분들이 어려움을 겪고 계신 일상 업무를 저의 안정적이고 빠른 소프트웨어로 자동화하는 것, 그것이 저의 목표입니다. '하이어시스템

wise-office-worker.tistory.com

1. EXE 실행파일 압축 해제

먼저 pyinstaller로 패킹된 exe 파일을 압축해제 합니다. 언패킹을 수행하는 유사한 프로그램들이 많이 있지만 아래의 프로그램을 강력하게 추천하는 이유는 매직넘버 복구라는 번거로운 작업을 언패킹과 동시에 자동으로 수행해주기 때문입니다.

https://github.com/extremecoders-re/pyinstxtractor

 

GitHub - extremecoders-re/pyinstxtractor: PyInstaller Extractor

PyInstaller Extractor. Contribute to extremecoders-re/pyinstxtractor development by creating an account on GitHub.

github.com

github 다운로드

 

설명의 편의를 위해서 c:\decompile 이라는 폴더를 생성하고 pyinstxtractor.py를 압축 해제하여 복사합니다. 그리고 디컴파일을 수행하고자 하는 실행파일(main.exe)도 복사합니다.

압축해제
작업 폴더

명령 프로프트상에서 pyinstxtractor.py를 이용해서 exe 파일을 언패킹 합니다.

Unpack exe

기존의 방식에서는 언패킹시 파일이 확장자 없는 형태의 'main' 과 같은 형식이었고, 매직넘버 Magic Number가 제거된 상태로 파일을 복구해야 하지만, 이 포스팅에서 사용한 언패킹툴 pyinstxtractor은 자동으로 파일 확장자 및 매직넘버 Magic Number를 복구해 주기 때문에 바로 디컴파일을 수행하시면 됩니다. ^^

언팩과 동시에 복원된 파일

2. 디컴파일

디컴파일도 훨씬 효율적인 방식으로 진행하고자 합니다. decompyle3, uncompyle6 같은 기존 모듈을 임포트하고 실행하는 방식에서 실행파일로 컴파일된 프로그램 pycdc.exe 파일을 이용해서 디컴파일을 수행하도록 하겠습니다. 이 프로그램은 https://github.com/zrax/pycdc 프로젝트를 어느 개발자가 실행파일로 만든것입니다.

pycdc.exe
0.23MB

이제 main.pyc 파일과 pycdc.exe 프로그램을 decompile 폴더에 복사한 후 아래와 같이 디컴파일 명령어를 실행합니다.

정상적으로 수행되었다면 지정한 이름의 결과 파일인 main_decompile.py 파일이 생성됩니다.

디컴파일 결과파일

결과물을 확인해보면 아래와 같이 복원된 소스코드를 확인할 수 있습니다. 하지만 소스코드는 개발자가 읽을 수 없도록 난독화(Obfuscation)가 있음을 알 수 있습니다. 그 이유는 이전 포스팅에서 pyinstaller로 패킹하기 전 소스코드를 난독화 하였기 때문입니다. ^^

디컴파일 된 모습

 

'파이썬 디컴파일 방지 난독화 초간단 방법'에 대해서는 아래의 포스팅을 확인해 보세요.

https://wise-office-worker.tistory.com/28

 

파이썬 디컴파일 방지 난독화 초간단 방법

파이썬으로 개발한 프로그램을 배포할 때 Pyinstaller 모듈을 사용하여 *.exe 로 패킹하여 배포합니다. 하지만 조금만 구글링을 해보면 파이썬 디컴파일 방식을 통해 소스코드를 복원해 낼 수 있음

wise-office-worker.tistory.com

반응형