난독화 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)
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