[Python] 코드 난독화 및 Decompile 방법

한호성·2023년 12월 12일
0

Introduction


Python으로 개발 진행 후, Client에게 파는 것을 고려해서 Decompile 과 난독화 하는 방법에 알아보았습니다.

pyarmor 라는 라이브러리와 pyinstaller를 활용해서, 난독화를 하고 난 후, .EXE 파일을 분해해서 Decompile 하는 방법에 대해 알아보도록 하겠습니다.
이후에는, 개념적인 부분을 더 공부해서 올리도록 하겠습니다 🙂
잠깐 조사한 바로는, python을 통해 완벽한 보안은 쉽지 않다고 하는데 그부분에 대해서 깊게 공부해보도록 하겠습니다.
( 내부는 python 코드로 하고 외부를 다른 compile 언어를 감싸서 활용한다고 하는 글을 읽었는데 자세히는 모르겠습니다 😢)

INDEX

  • Pyarmor 설치 및 난독화하여 .exe 파일 만들기
  • .exe 파일 python-exe-unpacker를 활용하여 분해하기
  • pyc파일 → py 파일로 변경하여 확인해보기

1. Pyarmor 설치 및 난독화하여 .exe 파일 만들기


순차적으로 진행해보도록 하겠습니다. 문제가 생겼던 부분들은 중간중간에 해결법을 적어두도록 하겠습니다 🙂

pip를 통해 “pyarmor”, “pyinstaller” 를 설치해주도록 합시다.

이후에 pyarmor를 활용하여 .exe로 패키지 해보겠습니다.

pyarmor pack --clean -e "--onefile " {entrypoint를 갖는.py ex) app.py, main.py}

이 때, packaging할 때, 특정용량이 넘게 되면 아래와 같은 오류를 뿜기 때문에 만약 이럴 경우엔 다른 방법을 찾아보아야 합니다.

보통 개인의 소스가 저 특정용량을 넘어가지는 않고 외부 라이브러리가 문제일 것으로 판단됩니다. 이 때, 중요한 .py들만 난독화를 하고 pyinstaller로 packaging하는것도 하나의 방법이라고 얕은 해결책으로 생각해보았습니다.

pyarmor obfuscate {중요한 .py}

어떤식으로든 .py가 난독화가 되게끔 하고, .exe파일로 만들어졌다고 생각하고 이어가도록 하겠습니다.

이어서 실제로 난독화가 잘 되어서 패키징되었는지 확인하기 위해 Decompile 작업을 진행해보도록 하겠습니다.

2. .exe 파일 python-exe-unpacker를 활용하여 분해하기


다음으로 .exe 파일을 분해하고, .pyc파일을 얻는 과정을 진행해보도록 하겠습니다.

필요한 파일들부터 알아보도록 하겠습니다.

https://github.com/WithSecureLabs/python-exe-unpacker
python pip install -r requirements.txt
python pyinstxtractor.py {.exe 파일경로}

#cf) 필요한 패키지 중 pycrypto 때문에 잘되지 않는다면 pycryptodome로 바꿔서 진행하면 잘 진행됩니다.

이렇게 되면 root directory에 결과물을 얻게 됩니다. (그림참조)

여기서 부터가 중요합니다.

unpacking이 된 directory에서 entrypoint로 사용한 확장자 없는 파일을 하나 얻을 수 있습니다.

base_library라는 zip 파일도 존재할 것입니다. python 버전마다 존재하는 고유한 maginc number를 app binary code 제일 앞에 추가해줘야 합니다.

, base_library.ZIP 을 풀은 후에 내부의 .pyc 파일 아무거나 HXD 프로그램을 이용해 열어주세요

pyc파일 2개 정도를 열어서 첫번재 줄에서 공통인 부분만 뽑아서 app.pyc로 이름을 바꾼 후 편집기에 추가해주시면 됩니다.

이 부분은 다른 블로그에 설명이 잘 되어있기 때문에 이해가 안된다면 찾아보셔도 좋을거 같습니다.

그렇다면 이제 pyc→ py로 바꾸기 위해 필요한 준비가 모두 끝나게 됩니다.

3. pyc파일 → py 파일로 변경하여 확인해보기


이 부분에서 굉장히 시행착오를 많이 겪고, decompile이 잘 안되는 상황을 겪었는데요,

3.9~3.10 python 버전까지 작동하는 라이브러리라고 합니다.

우선 visual studio 의 c++ 설치하고,

x86 x64 Cross Tools Command Prompt for VS{년도} 프로그램을 실행시킵니다. 이후에

git clone https://github.com/zrax/pycdc.git
cd pycdc
cmake .
MSBuild pycdc.sln

이것을 작동시키면 두개의 파일 나오는데,

이 2개의 파일을 통해 .pyc 파일을 .py 파일로 변경할 수 있습니다.

변경하고 싶은 .pyc 파일과 같은 root directory에 두고 작동시키면 다음과 같은 .py 파일을 얻을 수 있습니다.

명령어를 입력하면, 디스어셈블러(Disassembler) 내용이 든 .py파일이 생성됩니다.
.\pycdas.exe .\fileName.pyc > .\{result.py}

명령어를 입력하면, 파이썬 코드가 든 .py파일이 생성됩니다.
.\pycdc.exe .\fileName.pyc >.\{result.py}

pyarmor로 난독화 시켜 놓은게 잘 들어있는 것을 확인할 수 있었습니다. (사진 참조,.)

이제 무작정 따라해보고 결과를 얻었으니 고통스러운 개념 공부 시간을 갖도록 하겠습니다.

개념공부한 후 , 정리하는 글을 이어서 작성해보도록 하겠습니다 🙂

Reference


실제로 작업을 진행하기 위해 참고한 블로그들입니다.

pyarmor로 난독화 후 배포를 위한 파일 만들기

[python] pyinstaller로 만든 exe에서 코드 가져오기

Python .pyc 파일을 .py파일로 변환하는 방법

profile
개발자 지망생입니다.

0개의 댓글