난독화 Python 코드

Fariba Laiq 2023년10월10일
  1. Base64 인코딩을 사용하여 Python 코드 난독화
  2. PyArmor를 사용하여 Python 코드 난독화
난독화 Python 코드

코드 난독화는 코드를 사람이 이해하기 어려운 형식으로 암호화하거나 변환하는 것을 의미합니다. 공격자의 리버스 엔지니어링을 피하고 지적 재산과 영업 비밀을 보호하기 위해 의도적으로 이 작업을 수행합니다.

Python은 코드를 난독화하는 여러 방법을 제공합니다.

Base64 인코딩을 사용하여 Python 코드 난독화

base64는 데이터가 바이트류 객체로 변환되면 데이터를 인코딩 및 디코딩하는 Python의 모듈입니다. Python의 코드를 인코딩하는 것은 코드를 난독화하여 보안을 위해 사람이 읽고 이해할 수 없도록 하는 유용한 트릭이 될 수 있습니다.

다음 코드에서는 base64 모듈을 가져오고 b64encode() 메서드를 사용하여 print('Delftstack') 문을 인코딩했습니다. UTF-8 형식의 문자열을 메서드에 전달해야 합니다.

인코딩된 텍스트를 이 메서드에 전달하여 b64.decode() 메서드를 사용하여 코드를 해독할 수도 있습니다. 마지막으로 eval()compile() 메서드를 사용하여 해독된 코드를 실행할 수 있습니다.

예제 코드:

# Python 3.x
import base64

code = "print('Delftstack')"
print("Code:", code)
encrypted_code = base64.b64encode(code.encode("utf-8"))
print("Obfuscated code:", encrypted_code)
mydecode = base64.b64decode(encrypted_code)
print("Decrypted Code:")
eval(compile(mydecode, "<string>", "exec"))

출력:

#Python 3.x
Code: print('Delftstack')
Obfuscated code: b'cHJpbnQoJ0RlbGZ0c3RhY2snKQ=='
Decrypted Code:
Delftstack

코드가 포함된 완전한 .py 파일을 가져와서 다음과 같은 방식으로 base64 기술을 사용하여 인코딩할 수도 있습니다. My_Script.py 파일에는 print('hello world') 코드가 포함되어 있습니다.

# Python 3.x
import base64

file = open("My_Script.py")
encrypted_code = base64.b64encode(file.read().encode("utf-8"))
print("Encrypted Code:", encrypted_code)

출력:

#Python 3.x
Encrypted Code: b'cHJpbnQoJ2hlbGxvIHdvcmxkJyk='

PyArmor를 사용하여 Python 코드 난독화

Python 프로그램은 PyArmor로 암호화할 수도 있습니다. 코드를 난독화하고 난독화된 스크립트를 고정 시스템에 바인딩하며 난독화된 스크립트를 만료시킬 수도 있는 명령줄 도구입니다.

PyArmor를 사용하려면 먼저 다음 명령을 사용하여 설치해야 합니다.

#Python 3.x
pip install pyarmor

여기에서 MyScript.py라는 파일에서 다음 코드를 난독화합니다. .py 파일을 별도의 폴더에 넣어야 합니다.

# Python 3.x
print("Hello World")

pyarmor obfuscate MyFolder/MyScript.py 명령은 위의 .py 파일을 난독화합니다. 동일한 파일 이름을 가진 dist 폴더 내에서 출력 파일을 볼 수 있습니다.

출력:

#Python 3.x
from pytransform import pyarmor_runtime
pyarmor_runtime()
__pyarmor__(__name__, __file__, b'\x50\x59\x41\x52\x4d\x4f\x52\x00\x00\x03\x06\x00\x33\x0d\x0d\x0a\x09\x30\xe0\x02\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x18\x58\xc1\xa9\xb3\xd3\xa5\x4a\x59\xc7\xef\x90\xbd\x03\x26\xa0\x44\x00\x00\x00\x00\x00\x00\x00\x00\x75\x29\x30\x1b\x83\xa8\x1a\x8c\x19\x5d\xf5\xfb\x82\xd2\xde\xf9\x3e\x55\x2a\x65\x05\x6c\xd5\x40\xf1\x45\xaf\x5a\x5e\xce\x5b\x94\xe6\xb5\x2d\xbf\x91\x08\x47\x5a\x41\x2a\x8e\x86\x28\x08\x76\x35\x77\xbf\x3f\x52\x28\x03\xbb\xcf\xd4\xac\xa5\x1e\x8a\x4d\xfe\xc4\x48\x04\xb7\x8f\xfb\x10\xa7\x25\x05\x97\x80\xfa\x74\x96\x4b\x61\x88\x8f\x98\x96\x1e\xa5\x3d\x98\x2e\xe0\x1e\x19\xa2\x15\x94\x8b\xc2\x5c\x2a\x1e\x2c\x6f\x46\x28\x08\x85\x3f\x0d\x8a\xd8\xb5\x9c\xcc\xee\x8e\xff\x6f\x31\xb3\x02\x53\xbd\x88\x4a\x98\x84\x61\xd5\xe9\xea\x66\x75\x69\x1c\xd2\x5d\x47\x5e\x5b\xc8\x2d\x5f\x01\x74\xaa\xf6\x3b\xfc\xd0\x9f\xfd\x9c\x27\x35\x2b\xbe\x41\xa6\xc1\x88\x79\xfc\xb3\xe8\xa7\x65\x19\xed\x8d\x85\xb1\x07\x35\x96\x4d\xea\x32\x71\xba\x63\xb0\x11\xaf\x31\x05\xe9\xa0\xba\xaa\x77\x96\x43\xeb\x4d', 2)
작가: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn