[python 일반] 파이썬 디컴파일 방지 난독화 초간단 방법

파이썬으로 개발한 프로그램을 배포할 때 pyinstaller 모듈을 사용하여 exe 형태의 실행파일로 배포합니다. 하지만 조금만 구글링을 해보면 실행파일 디컴파일 프로그램을 통해 소스코드를 복원해 낼 수 있음을 알 수 있습니다. (초간단 디컴파일 방법은 이 글 맨 아래의 링크된 포스팅을 참고하세요)

 

파이썬은 인터프리터 방식으로 실행되므로 평상시에는 소스코드 상태로 존재하며 pyinstaller는 이런 소스코드를 묶어 바이너리 파일로 변환하는 기능만 할 뿐 소스코드를 난독화(Obfuscation)하는 기능이 없기 때문에 디컴파일을 통한 소스코드 복원이 상대적으로 쉬운편입니다. 의도적인 난독화 적용시 원본코드보다 가독성이 현저히 떨어져 사람이 해석하기 어렵기 때문에 중요한 알고리즘의 유출 방지, 지적재산권 보호등에 도움을 줍니다.

 

구글링을 통해 몇가지 파이썬용 난독화 도구들를 찾을 수 있었고 기능을 검토해 본 결과를 남기도록 하겠습니다.

1. pyarmor

가장 기능적으로 완성도가 높은 프로그램으로 개발자가 평상시에는 난독화에 대해서 고민할 필요가 없다가 배포시에만 pyarmor를 이용해서 난독화 적용 가능하며 내부적으로 pyinstaller 까지 호출하므로 한번에 실행파일로 패킹작업까지 가능하다는 장점을 가지고 있습니다. 그래서 테스트로 프로그램에 적용을 하던 중에 다음의 문제점을 발견하였습니다.

 

난독화 용량 제한

 

pyarmor는 소스파일이 32768바이트를 넘어가면 무료버전으로는 난독화가 불가능하였습니다. 해당 파일만 무시하고 난독화를 진행해도 될텐데 그대로 중지되어 더이상 진행이 되질 않았습니다. 어쩔수 없이 pyarmor는 다음에 검토하기로 보류하고 검토대상에서 제외하였습니다.

 

2. pyminifier

 

파이썬과 호환성 문제

 

pyminifier은 설치단계에서 부터 진행이 불가능하였습니다. 현재 파이썬 3.10 버전을 사용하고 있는데 정확한 원인은 알 수없지만 호환이 잘 되지 않는것 같았습니다. 구글링을 해봐도 해결방법을 찾지 못해 더이상 진행이 불가능하였습니다.

 

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

3. Oxyry Python Obfuscator : https://pyob.oxyry.com/

난독화 모습

 

파이썬 코드를 웹 사이트에서 바로 난독화하고 그 결과를 복사해 올 수 있는 가장 심플한 형태의 방법입니다. 단 몇 초면 전환이 가능하여 편리하게 사용할 수 있습니다. 다만 우리가 하는 난독화의 목적이 소스코드 보호인데, 소스코드를 웹 서버에서 전송하여 변환 값을 돌려받는 방식은 모순적일 수 있습니다. 궁극적으로는 로컬 버전을 사용하게는 맞으나, 로컬 버전은 아쉽게 유료로 서비스되고 있습니다.

 

난독화의 중요성에 비해 난독화 관련 프로그램수가 적고 기능도 제한되어 있어 만족할만한 방법을 찾지 못하였습니다. 우선은 '3. Oxyry Python Obfuscator' 의 방법을 이용해서 프로젝트에서 핵심 비지니스 로직만 부분적으로 난독화 하는 방법으로 진행을 하고 차후에 다시 pyarmor의 도입여부를 검토해 보도록 하겠습니다.

 

마치며

 

난독화는 파이썬 코드의 안전성과 보안성을 높이는 데 도움이 되지만, 완전한 보안을 제공하지는 않습니다. 고도의 기술을 가진자가 또는 악의적인 해커가 적절한 도구와 기술을 사용한다면 난독화된 코드 역시 해독할 수 있습니다. 따라서 중요한 정보를 포함한 코드의 경우, 추가적인 보안 메커니즘을 고려해야 합니다.

 

[출처] https://wise-office-worker.tistory.com/28

 

 

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
64 [python][자료구조] "pdf 취소선 검출" How to identify strike-out text from PDF files using Python 졸리운_곰 2024.07.18 544
63 [python][자료구조] 오픈 소스 Python PDF 파서 라이브러리 file 졸리운_곰 2024.07.16 444
62 [python][자료구조] 벡터화 | Vectorization file 졸리운_곰 2023.12.21 330
61 [python][자료구조] Python의 Loop? NO! , Python의 Vectorization? OK!!! file 졸리운_곰 2023.12.21 473
60 [python][자료구조] Python - MySQL 데이터 추가, 삭제, 업데이트 졸리운_곰 2023.05.13 488
59 [python][자료구조] Python의 JSON - 문자열을 JSON으로 변환하는 방법 졸리운_곰 2023.05.06 456
58 [python][자료구조] [Python] Logging to MongoDB (로그 남기기) file 졸리운_곰 2023.03.24 428
57 [python][자료구조] [스파르타 웹 개발 종합] 파이썬으로 크롤링하고 DB에 저장하기(request, bs4, mongoDB 패키지 사용) 졸리운_곰 2023.03.12 461
56 [python][자료구조] [MongoDB] Document Query(조회) – find() 메소드 졸리운_곰 2023.03.08 315
55 [python][자료구조] Python(flask)으로 mongoDB 제어하기 – pymongo file 졸리운_곰 2023.03.08 604
54 [python][자료구조] django sqlite3 MySQL로 전환하기 file 졸리운_곰 2023.03.02 409
53 [python][자료구조] django에서 db.sqlite3 데이터를 mysql로 옮기기 졸리운_곰 2023.03.02 427
52 [python][자료구조] Python - JSON 파일 읽고 쓰는 방법 졸리운_곰 2023.02.04 480
51 [python][자료구조] [인코딩] 유니코드 인코딩 처리 (특히 json 입출력 시) 졸리운_곰 2023.02.04 363
50 [python][자료구조] Dropbox API 사용하기 (with python) 졸리운_곰 2022.12.03 306
49 [Python][자료구조] SQLAlchemy Tutorial(한글) - 2 졸리운_곰 2022.12.03 393
48 [Python]][자료구조] SQLAlchemy Tutorial(한글) - 1 졸리운_곰 2022.12.03 275
47 [python][자료구조] python anaconda 에서 mysql 접속 졸리운_곰 2022.01.25 657
46 [python 자료구조] 림코딩의 파이썬으로 csv 다루기 강좌 (읽기,쓰기,수정,추가) 졸리운_곰 2022.01.16 521
45 python - 읽은 후 kafka 메시지를 삭제하는 방법 졸리운_곰 2021.07.13 900
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED