일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- jupyter
- 깃
- jupyter lab
- Houdini
- git
- 포인터
- c#
- github
- Python
- Flutter
- c언어
- docker
- HTML
- c# 윈폼
- Data Structure
- C# delegate
- Algorithm
- 유니티
- C++
- 도커
- C언어 포인터
- Unity
- c# winform
- gitlab
- 구조체
- dart 언어
- c# 추상 클래스
- vim
- 다트 언어
- 플러터
- Today
- Total
nomad-programmer
[Programming/Python] 코드 난독화(obfuscation) / Source Code 보호 본문
[Programming/Python] 코드 난독화(obfuscation) / Source Code 보호
scii 2019. 12. 23. 21:41Python, C#, JavaScript 등은 쉽게 소스로 환원 시킬 수 있기 때문에 원 소스 자체의 로직은 변경되지 않지만 사람이 읽기에 아주 어렵게하는 것이 난독화라고 한다.
또한, 소스코드의 무단 도용, 아이디어나 알고리즘의 무단유출을 막기 위함이 주된 목적이라 할 수 있다.
JavaScript 같은 경우에는 악성코드나 시그니쳐 등을 회피하기 위해 난독화 기법을 이용한다.
코드 난독화는 크게 보았을 때, 필요 이상으로 복잡한 코드를 만들거나 무의미한 코드를 삽입하여 난독화하는 방법과 데이터를 인코딩하여 가독성을 떨어트리는 방법이 있다.
C언어 소스코드를 대상으로 코드 내에서 사용 중인 변수의 이름을 바코드 조합('l', 'i', 'I', '1'의 조합)으로 바꾸어 코드를 난독화 시킨다. 코드 내의 변수명이 "ilI1IlIil", "IiIIll1lIiiI"와 같은 방식의 이름으로 이루어져 있다면, 각각의 변수를 구분하기 정말 힘들것이다. 설령 파악한다고하더라도 해당 변수가 어떤 역할을 하는지 변수명을 통한 유추를 막을 수 있다.
난독화 원리는 코드를 단어별로 분리하여 변수를 바코드 조합으로 변경한 후, 단어를 다시 이어 붙인다.
온라인상으로 난독화할 수 있는 사이트
Oxyry Python Obfuscator
Oxyry 에서 만든 난독화 사이트이다. 소스코드를 붙여넣기하면 그 즉시 난독화 해준다. 왼쪽 화면처럼 코딩된 코드의 경우 우측의 난독화 결과물을 잘 받아볼 수 있다. 하지만 짧고 간결한 소스의 경우는 난독화가 진행되지 않을 수 있다.
DevelopmentToolsNet
development-tools.net/python-obfuscator/
DevelopmentToolsNet에서 만든 파이썬 코드 난독화 사이트이다. 파일 업로드하는 형태로 파이썬 파일 업로드 후 Obfuscate 버튼을 누르면 난독화된 파일이 그 즉시 나오게된다. 이 사이트의 경우 짧고 간결한 파이썬 코드도 난독화가 된다.
이 사이트에서는 다운로드 기능을 제공하고 있는데 동작이 잘 안될수도 있다. 그래서 만약 아직까지도 그런다면 다운로드 링크 부분에서 우측 클릭 후 저장하거나 새 탭열기로 소스 코드를 복사하면 된다.
난독화 파이썬 모듈 및 난독화 방법
파이썬 소스 난독화 방법
https://www.smallsurething.com/how-to-obfuscate-python-source-code/
난독화 모듈
https://github.com/astrand/pyobfuscate
https://liftoff.github.io/pyminifier/
pyminifier가 제일 쓸만한 듯 하다. 그리고 Python2 에서 이 모듈을 사용한다면... 난독화한 코드를 아웃풋 파일로 만들때 TypeError를 만날 것이다. 이런 경우 아래의 명령으로 업데이트해준다.
pip install git+https://github.com/liftoff/pyminifier.git
근데, 업데이트를 실행하고 다시 하려고하면 __init__.py 파일에서 wirte함수는 str이 아닌 unicode를 사용해야 한다는 에러를 직면할 것 이다. unicode함수를 이용하여 직접 고쳐주자.
'Programming > Python' 카테고리의 다른 글
[Programming/Python] pyinstaller 파일 용량 문제 (0) | 2020.07.09 |
---|---|
[Programming/Python] License 생성, 부여, 검사 등의 모듈 (0) | 2020.03.24 |
[Programming/Python] .py file compile (0) | 2020.03.23 |
[Programming/Python] functools의 partial (0) | 2020.03.11 |
[Programming/Python] 컴파일 및 디컴파일 (0) | 2019.12.23 |