파이썬 코드를 어떻게 보호합니까?


632

저는 고용주 고객에게 배포 할 Python 소프트웨어를 개발 중입니다. 고용주는 시간 제한 라이센스 파일로 소프트웨어 사용을 제한하려고합니다.

.py 파일 또는 .pyc 파일을 배포하면 라이센스 파일을 확인하는 코드를 쉽게 디 컴파일하고 제거 할 수 있습니다.

또 다른 측면은 제 고용주가 코드를 도난 당하거나 최소한 "새로운 아이디어"를 두려워하여 고객이 코드를 읽는 것을 원하지 않습니다.

이 문제를 처리하는 좋은 방법이 있습니까? 바람직하게는 상용 솔루션입니다.

소프트웨어는 Linux 시스템에서 실행될 것입니다 (그래서 py2exe가 트릭을 할 것이라고 생각하지 않습니다).


25
py2exe는 .pyc 바이트 코드 파일을 .zip 아카이브에 저장하기 때문에 솔루션이 아닙니다. 그럼에도 불구하고, 적절한 스타 업 스크립트와 결합하여 Linux에서 실행되도록 유용 할 수 있습니다.
Ber


이것은 귀하의 질문에 가장 포괄적 인 답변입니다 : wiki.python.org/moin/Asking%20for%20Help/…
Mike

답변:


378

바이트 코드 컴파일 된 해석 언어 인 Python은 잠그기가 매우 어렵습니다. py2exe 와 같은 exe-packager를 사용하더라도 실행 파일의 레이아웃은 잘 알려져 있으며 Python 바이트 코드는 잘 알려져 있습니다.

일반적으로 이와 같은 경우에는 상충 관계를 만들어야합니다. 코드를 보호하는 것이 얼마나 중요합니까? 은행 송금의 대칭 암호화를위한 키와 같은 실제 비밀이 있습니까, 아니면 편집증입니까? 최고의 제품을 가장 빨리 개발할 수있는 언어를 선택하고 참신한 아이디어의 가치에 대해 현실적으로 표현하십시오.

실제로 라이센스 검사를 안전하게 시행해야한다고 결정한 경우 라이센스 검사 코드를 리버스 엔지니어링하기가 어려울 수 있지만 불가능하지는 않을 수 있도록 작은 C 확장으로 작성하십시오. .


157
라이센스 확인 코드가 C로 작성되어 리버스 엔지니어링하기 어려웠지만 여전히 라이센스 확인 코드에 대한 호출을 제거하는 것이 쉽지 않습니까?
블레어 콘래드

59
라이센스 확인이 수행되는 위치에 따라 가능합니다. 내선 번호로 전화가 많은 경우 근절하기가 어려울 수 있습니다. 또는 응용 프로그램의 다른 중요한 부분을 라이센스 확인으로 이동하여 내선 번호에 대한 호출을 제거하면 앱이 손상 될 수 있습니다.
Ned Batchelder

103
실제로이 모든 작업은 수정을 방지하는 것이 아니라 난이도를 높여 더 이상 가치가 없도록하는 것입니다. 충분한 이점이 있으면 무엇이든 리버스 엔지니어링하고 수정할 수 있습니다.
Ned Batchelder

11
@Blair Conrad : 라이센스 확인 코드가 기능을 숨기더라도 아닙니다. 예mylicensedfunction(licenseblob liblob, int foo, int bar, std::string bash)
Brian

8
실제로 상용 파이썬 코드가 C 라이브러리 내부에 임베디드 파이썬으로 제공되는 것을 보았습니다. 코드의 일부를 C로 변환하는 대신 전체 Cython 코드를 보호 C 레이어 안에 숨 깁니다. 그런 다음 파이썬으로 가져올 수있는 모듈을 원한다면 C 위에 얇은 파이썬 확장을 작성하십시오. 오픈 소스는 훨씬 쉬운 삶의 방식입니다.
Mike McKerns

454

"이 문제를 처리하는 좋은 방법이 있습니까?" 리버스 엔지니어링으로부터 보호 할 수있는 것은 없습니다. DVD 시스템의 펌웨어조차 리버스 엔지니어링되었으며 AACS 암호화 키가 노출되었습니다. DMCA가 범죄를 저지르고 있음에도 불구하고 말입니다.

기술적 인 방법으로 고객이 코드를 읽는 것을 막을 수 없으므로 일반적인 상업적 방법을 적용해야합니다.

  1. 라이센스. 계약. 이용 약관. 사람들이 코드를 읽을 수있는 경우에도 여전히 작동합니다. 일부 Python 기반 구성 요소는 해당 구성 요소를 사용하여 소프트웨어를 판매하기 전에 요금을 지불해야 할 수도 있습니다. 또한 일부 오픈 소스 라이센스로 인해 해당 구성 요소의 소스를 숨길 수 없습니다.

  2. 중요한 가치를 제공하십시오. 거부하기 어려운 가격으로 물건이 너무 좋으면 시간과 돈을 낭비하는 엔지니어링 인센티브가 없습니다. 리버스 엔지니어링은 비싸다. 제품을 약간 저렴하게 만드십시오.

  3. 리버스 엔지니어링을 나쁜 생각으로 만드는 업그레이드 및 개선 사항을 제공하십시오. 다음 릴리스에서 리버스 엔지니어링이 중단되면 아무런 의미가 없습니다. 이것은 터무니없는 극단적으로 수행 할 수 있지만 리버스 엔지니어링보다 다음 릴리스를 더 가치있게 만드는 새로운 기능을 제공해야합니다.

  4. 사용자가 비용을 지불 할만큼 매력적인 속도로 사용자 정의를 제공하면 개선 된 기능을 구축하고 지원할 수 있습니다.

  5. 만료되는 라이센스 키를 사용하십시오. 이것은 잔인하고 나쁜 평판을 주지만 소프트웨어 작동을 확실히 중지시킵니다.

  6. 웹 서비스로 제공하십시오. SaaS는 고객에게 다운로드하지 않습니다.


7
포인트 2가 더 중요합니다. 리버스 엔지니어링과 연간 업데이트보다 저렴하게 구매하는 경우 아무도 시도하지 않으며 그렇게해도 소프트웨어 공급자 대신 해커에게 비용을 지불하지 않습니다.
m3nda

사실입니다. 리버스 엔지니어링은 가능하지만 대부분의 상황에서 비쌉니다. @ S.Lott, 나는 포인트 6이 질문에 따라 더 중요하다고 생각합니다. 소스 코드를 실제로 보호해야하는 경우 최종 사용자와 멀리 떨어져 있어야합니다.
Delali

7
질문 : "잠자는 동안 가족과 내 자신이 침입자에 의해 살해되는 것을 막을 수있는 좋은 방법이 있습니까?" 인터넷 : "아니요. 누구도 입국 할 수없고 100 % 투숙 할 수있는 집이 없습니다. 필사 인간 가족은 그 일을위한 잘못된 도구입니다."
간단한 알고리즘

포인트 5는 리버스 엔지니어링 및 크랙이 가능하다는 동일한 가정에 적용 할 수 없습니다.
jjmontes 2016

313

파이썬은 필요한 도구가 아닙니다

올바른 도구를 사용하여 올바른 작업을 수행해야하며 Python은 난독 화되도록 설계되지 않았습니다. 그것은 반대로입니다. 언어 철학이기 때문에 파이썬에서 모든 것이 공개되거나 공개되거나 수정되기 쉽습니다.

보이지 않는 것을 원하면 다른 도구를 찾으십시오. 이것은 나쁜 일이 아니며, 사용법에 따라 여러 가지 도구가 존재하는 것이 중요합니다.

난독 화는 정말 어렵다

컴파일 된 프로그램조차 리버스 엔지니어링 될 수 있으므로 코드를 완전히 보호 할 수 있다고 생각하지 마십시오. 난독 처리 된 PHP를 분석하고 플래시 암호화 키를 깰 수 있습니다. 최신 버전의 Windows는 매번 크랙됩니다.

법적 요구 사항을 갖는 것이 좋습니다.

누군가가 코드를 잘못 사용하는 것을 막을 수는 없지만 누군가가 쉽게 코드를 발견 할 수 있습니다. 따라서 이는 단순한 법적 문제입니다.

코드 보호가 과대 평가되었습니다

오늘날 비즈니스 모델은 제품 대신 서비스를 판매하는 경향이 있습니다. 서비스를 복사하거나 해적하거나 도용 할 수 없습니다. 아마도 흐름과 함께 갈 시간입니다 ...


16
파이썬은 필요한 도구가 아닙니다. Malbolge 는 :)
johndodo

8
좋은 대답이지만 "캐주얼 법적 문제"? 정말? 캐주얼 한 법적 문제 가 있는 곳은 어디 입니까?
Mark E. Haase

1
난해한 코드가 얼마나 자주 해킹당하는 빈도가 있다면 파이썬과 난독 화 된 코드를 사용할 수 있는지에 대해 말할 수 있다고 생각합니다.
sergzach

코드에 흥미로운 기능이 있다면 오용 할 수있는 코드는 @Macke
Delali

1
세상에서 "누군가가 쉽게 발견하는지"어떻게 알 수 있습니까?
Make42

145

파이썬을 컴파일하고 바이너리를 배포하십시오!

현명한 아이디어 :

사용 사이 썬 , Nuitka은 , 피부 헛간 다음 대신 파이썬 바이너리 라이브러리 (PYD)로 응용 프로그램을 배포, 또는 C 코드를 컴파일 파이썬 비슷한.

그렇게하면 파이썬 (바이트) 코드가 남지 않으며 누구나 (예 : 고용주) 일반 코드에서 기대할 수있는 합리적인 양의 모호함을 수행했습니다. 바이트 코드는 난독 화되지 않고 비교적 쉽게 적절한 소스로 디 컴파일 될 수 있으므로 .NET 또는 Java는이 경우보다 안전하지 않습니다.

Cython은 CPython과 점점 더 호환되고 있으므로 작동해야한다고 생각합니다. (실제로이 제품을 고려하고 있습니다 .. 이미 일부 타사 라이브러리를 pyd / dll로 빌드하고 있으므로 바이너리 코드로 자체 파이썬 코드를 제공하는 것은 우리에게 큰 단계가 아닙니다.)

사용 방법에 대한 자습서는 이 블로그 게시물 (나가 아님)을 참조하십시오 . (thx @hithwen)

미친 생각 :

Cython이 각 모듈에 대해 C 파일을 개별적으로 저장하도록 한 다음 모두 연결하고 무거운 인라인으로 빌드 할 수 있습니다. 그렇게하면 파이썬 모듈은 매우 모 놀리 식이며 일반적인 도구로는 칩을 만들기가 어렵습니다.

미치게 :

Python 런타임 및 모든 라이브러리 (dll)에 정적으로 링크 (및 최적화) 할 수있는 경우 단일 실행 파일을 빌드 할 수 있습니다. 그렇게하면 파이썬과 호출하는 프레임 워크 라이브러리와 호출하는 것을 가로 채기가 어려울 것입니다. LGPL 코드를 사용하는 경우에는 수행 할 수 없습니다.


Cython으로 컴파일하면 Python 3.4 Django 앱을 사용할 수 있습니까? 아니면 많은 노력을 기울이지 않고도 작동하도록 만들 수 있습니까?
다니엘

@Daniel : 확실하지 않습니다. 장고에서 시도하지 않았습니다. 그것에 대해 새로운 질문을 게시하십시오.
Macke


4
@mlvljr FWIW, 바이너리로 컴파일하는 IMHO는 모든 비밀을 판매하는 것과 NSA 급 리버스 엔지니어링으로부터 보호하는 것 사이의 훌륭한 균형입니다. 큰 파이썬 코드 기반이 있고 편집증이있는 이유가 있다면 Esp. ;)
Macke

2
hithwen의 POST가 이제 유효하지 않습니다.
qg_java_17137

58

고객이 파이썬의 힘을 사용하기를 원하지만 소스 코드를 노출하고 싶지는 않습니다.

내 제안은 다음과 같습니다.

(a) 중요한 코드를 C 또는 C ++ 라이브러리로 작성한 다음 SIP 또는 swig 를 사용 하여 C / C ++ API를 Python 네임 스페이스에 노출하십시오.

(b) Python 대신 cython 을 사용하십시오.

(c) (a)와 (b) 모두에서 파이썬 인터페이스를 사용하여 라이브러리를 라이센스 바이너리로 배포 할 수 있어야합니다.


1
같은 맥락에서 다른 가능성 : Shed Skin code.google.com/p/shedskin 및 Nuitka kayhayen24x7.homelinux.org/blog/nuitka-a-python-compiler
TryPyPy

TyPyPy가 제안한 Shed Skin을 보았는데 정말 좋은 것 같습니다!
Filipe

34

고용주는 다른 사람들이 귀하의 코드에서 얻은 아이디어를 "훔칠"수 있다는 것을 알고 있습니까? 그들이 당신의 일을 읽을 수 있다면 당신도 할 수 있습니다. 어쩌면 상황에서 이익을 얻을 수 있는지 살펴보면 잃을 수있는 금액을 두려워하는 것보다 투자 수익률이 높아질 것입니다.

[편집] Nick의 의견에 대한 답변 :

아무것도 얻지 못했습니다. 고객은 자신이 원하는 것을 가지고 있습니다 (그리고 자신이 변경을 한 이후에 지불했습니다). 그는 변경 사항을 공개하지 않기 때문에 다른 사람에게는 일어나지 않은 것처럼 보입니다.

이제 고객이 소프트웨어를 판매하는 경우 저작권 표시를 변경해야합니다 (불법이므로 귀하는 소송을 제기하여 이길 수 있습니다-> 간단한 경우).

고객이 저작권 고지 사항을 변경하지 않으면 2 단계 고객은 소프트웨어가 원본에서 나온 것을보고 무슨 일이 일어나고 있는지 궁금해 할 것입니다. 그들이 당신에게 연락 할 것이므로 당신은 당신의 작품의 재판매에 대해 배울 것입니다.

다시 한 번 우리는 두 가지 경우가 있습니다. 원래 고객은 몇 부만 판매했습니다. 그것은 그들이 어쨌든 많은 돈을 벌지 않았다는 것을 의미합니다. 또는 그들은 대량으로 판매되었습니다. 그것은 그들이하는 일에 대해 배우고 그것에 대해 무언가를 할 수있는 더 좋은 기회를 의미합니다.

그러나 결국 대부분의 회사는 법을 준수하려고 시도합니다. 일단 명성이 떨어지면 사업을하기가 훨씬 더 어렵습니다. 그래서 그들은 당신의 일을 훔치지 않고 그것을 개선하기 위해 당신과 함께 일합니다. 따라서 소스를 포함하면 (간단한 재판매를 방지하는 라이센스가있는 경우) 변경 사항이 다음 버전에 있는지 확인할 수 있기 때문에 변경 사항을 간단히 취소 할 수 있습니다. . 그것은 상생입니다 : 당신은 변경 사항을 받고 공식 릴리스에 포함시키지 않으려는 경우에도 필사적으로 변경이 필요한 경우 스스로 변경할 수 있습니다.


고객에게 소프트웨어를 릴리스하고 고객이 소프트웨어를 다시 공개하지 않고 내부적으로 수정하면 어떻게됩니까?
Nick T

@Nick : 어떤 식 으로든 상황을 바꾸지 않습니다. 내 편집 내용을 참조하십시오.
Aaron Digulla

6
아이디어를 훔친 +1 다른 사람이 솔루션을 어떻게 개선하고 자신의 제품을 개선하는지 볼 수있을 때 고객 서비스 능력을 사내 솔루션으로 제한해야하는 이유는 무엇입니까? "당신이 사과를 가지고 있고 사과를 가지고 있고 우리가이 사과들을 교환한다면, 당신과 나는 여전히 각각 하나의 사과를 가질 것입니다. 두 가지 아이디어. "
Jordan

고객 중 한 명이 무료로 또는 익명으로 코드 또는 아이디어를 다시 공개하면 어떻게 되나요? 누가 그랬는지 고소 할 수 없으며 그들이 혜택을 얻지 못했기 때문에 그렇게하지 않을 것입니다. 고객 중 한 명이 기본 가격 만 지불하면 작업이 중단됩니다. (솔루션을 위해 둘 이상의 고객이있는 경우에만 작동합니다)
Skandix

1
@ Skandix 정확히 어떻게 작동합니까? 인터넷에 작품을 업로드해도 해가되지 않습니다. 많은 사람들이 그것을 발견하고 그 사람들이 대신 고객에게 돈을 지불한다면 그것은 당신을 해칠 것입니다. 코드 도난은 신화입니다. "나의 지식은 무료이며, 시간은 비싸다"(누가 말했는지 모르겠다).
Aaron Digulla

34

pyminifier를 살펴 보셨습니까 ? 파이썬 코드를 축소, 난독 화 및 압축합니다. 예제 코드는 캐주얼 리버스 엔지니어링에는 매우 불쾌합니다.

$ pyminifier --nonlatin --replacement-length=50 /tmp/tumult.py
#!/usr/bin/env python3
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ=ImportError
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱=print
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ巡=False
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ澨=object
try:
 import demiurgic
except ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ:
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Warning: You're not demiurgic. Actually, I think that's normal.")
try:
 import mystificate
except ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ:
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Warning: Dark voodoo may be unreliable.")
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺬ=ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ巡
class ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐦚(ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ澨):
 def __init__(self,*args,**kwargs):
  pass
 def ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ클(self,dactyl):
  ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ퐐=demiurgic.palpitation(dactyl)
  ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𠛲=mystificate.dark_voodoo(ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ퐐)
  return ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𠛲
 def ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐠯(self,whatever):
  ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱(whatever)
if __name__=="__main__":
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Forming...")
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺃ=ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐦚("epicaricacy","perseverate")
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺃ.ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐠯("Codswallop")
# Created by pyminifier (https://github.com/liftoff/pyminifier)

6
이것의 좋은 점은 기능을 해독하려고 시도하는 사람을 탈선시키는 것입니다. Cython 및 모듈 또는 인터넷 전화를 통한 추가 암호화와 결합하면 상을받을 수 있습니다.
m3nda

이 패키지가 달성 한 유일한 것은 코드가 난독 화되는 '난독 화'를 속이는 것입니다.
markroxor

내가 시도했을 때 오류가 발생했습니다. 데이터가 잘못 처리되어 완전히 변환되지 않았다고 생각합니다.
Vicrobot 2018 년

템플릿에 표시 할 변수 이름이 필요하므로 전체 프로젝트 또는 템플릿 엔진에서 작동하지 않습니다.
TomSawyer

이 라이브러리는 유지 관리되지 않는 것으로 보이며 들여 쓰기 오류가 발생합니다. Python 3.7
PV를 사용하고 있습니다.

25

난독 화에 의존하지 마십시오. 올바르게 결론을 내렸을 때 매우 제한적인 보호 기능을 제공합니다. 업데이트 : Dropbox에서 난독 화 된 파이썬 코드를 리버스 엔지니어링 한 종이에 대한 링크 입니다. 접근 방식-opcode remapping은 좋은 장벽이지만 분명히 패배 할 수 있습니다.

대신 많은 포스터에서 언급했듯이 다음과 같이 작성하십시오.

  • 리버스 엔지니어링 시간 가치가 없음 (소프트웨어가 너무 좋으므로 지불하는 것이 좋습니다)
  • 가능한 경우 계약서에 서명하고 라이센스 감사를 수행하십시오.

또는, 킥 -ass Python IDE WingIDE가하는 것처럼 : 코드를 제공하십시오 . 맞습니다. 코드를 제공하고 업그레이드 및 지원을 위해 사람들이 다시 방문하도록하십시오.


1
이 극단적 인 생각처럼. 거대한 방식으로 시장 점유율을 높이면 지원 및 애드온에 대한 고객 기반이 매우 커집니다. 나는 또한이 질문에 얽매이고 모든 "라이센스"답변은 기본적으로 불확실하다. 왜냐하면 광범위한 카피를 막지는 못하지만 시장 점유율에 유리하지는 않기 때문이다.
Thomas Browne

그러나 업그레이드는 또한 공짜입니다 ... 그러면 어떻게 청구합니까? 그것은 단지 지원이 아닌가?
Make42

WingIDE 비즈니스 모델과 관련하여 : 지원은 서비스, 소프트웨어 제품입니다. 제품 규모, 서비스는 그렇지 않습니다. 다른 비즈니스 모델이없는 경우 지원은 훌륭한 비즈니스 모델입니다. 즉, 어떤 이유로도 제품을 구매하지 않을 경우 제품을 제공하여 최소한 서비스를 구매하는 고객 기반을 확보해야합니다.
Make42

20

Cython을 사용하십시오 . 모듈을 고성능 C 파일로 컴파일 한 다음 원시 바이너리 라이브러리로 컴파일 할 수 있습니다. 이것은 .pyc 바이트 코드와 비교하여 기본적으로 되돌릴 수 없습니다!

Python 프로젝트를 위해 Cython을 설정하는 방법에 대한 자세한 기사를 작성했습니다.

Cython으로 Python 소스 보호


19

배송 .pyc 파일에는 문제가 있습니다. 파일은 작성된 파이썬 버전 이외의 다른 파이썬 버전과 호환되지 않으므로 제품이 실행될 시스템에서 어떤 파이썬 버전이 실행되고 있는지 알아야합니다. 그것은 매우 제한적인 요소입니다.


그렇습니다.하지만 난독 화 된 코드로 정확한 Python 버전을 배포하는 경우는 아닙니다.
Alex

17

경우에 따라 소프트웨어의 일부 또는 전부를 조직에서 호스팅하는 웹 서비스로 옮길 수도 있습니다.

이렇게하면 자체 서버 룸의 안전에서 라이센스 확인을 수행 할 수 있습니다.


+1 (다시 0으로) : 설정에 실제적인 접근 방식을 가정하면 문제에 대한 유일한 해결책 인 것 같습니다.
intuited

10
라이센싱 웹 서버가 다운되거나 고객의 인터넷 액세스가 다운 된 경우 라이센싱 검사에 대한 액세스 권한이 없어서 비즈니스를 운영 할 수 없다는 점에 만족하지 못할 것입니다.
DevPlayer

1
@DevPlayer 이에 대한 해결책이 있습니다. 소프트웨어가 원격 라이센스 서버에 도달 할 수 없을 때 임시 액세스를 허용하는 로컬 키 메커니즘을 구현할 수 있습니다.
Jeffrey

1
@ Jeffrey : 시작한 곳으로 바로 돌아갑니다. 코드를 보호하는 방법. 보다 안전하게하기 위해서는 주요 기능 중 일부를 자체 서버에 배치해야하므로이를 대체하는 데 상당한 노력이 필요합니다 (이 시점에서 오픈 소스 경쟁 업체를 시작하지 않는 이유는 무엇입니까?)
Oddthinking

14

완벽한 해결책은 없지만 다음을 수행 할 수 있습니다.

  1. 몇 가지 중요한 시작 코드를 기본 라이브러리로 이동하십시오.
  2. 기본 라이브러리에서 라이센스 검사를 시행하십시오.

원시 코드에 대한 호출을 제거하면 프로그램이 시작되지 않습니다. 제거되지 않으면 라이센스가 적용됩니다.

이것은 크로스 플랫폼 또는 순수한 Python 솔루션이 아니지만 작동합니다.


3
기본 라이브러리 접근 방식을 사용하면 자신의 코드와 API를 사용하여 라이센스를 검증 할 수 있으므로 라이센스 키 시스템을 프로그래밍 방식으로 무차별 강제 수행 할 수 있습니다.
Tom Leys

8
그래서? RSA를 사용하여 라이센스에 서명하고 1024 비트로 구성된 개인 키를 강제로 무력화 시키십시오. 가능하지만 많은 시간이 걸리므로 돈이 필요합니다.
Abgan

12

파이썬 코드를 보호하는 방법이 하나 더 있다고 생각합니다. 난독 화 방법의 일부. Mount and Blade와 같은 게임이나 자체 파이썬 인터프리터 (오픈 소스라고 생각하는 원래 인터프리터)를 변경하고 다시 컴파일 한 것으로 OP 코드 테이블의 OP 코드가 표준 파이썬 OP와 다르게 변경되었습니다. 코드.

따라서 파이썬 소스는 수정되지 않지만 * .pyc 파일의 파일 확장자가 다르고 op 코드가 공용 python.exe 인터프리터와 일치하지 않습니다. 게임 데이터 파일을 확인한 경우 모든 데이터는 Python 소스 형식입니다.

이런 식으로 미성숙 한 해커를 엉망으로 만들기 위해 모든 종류의 불쾌한 트릭을 수행 할 수 있습니다. 경험이없는 해커들을 막는 것은 쉽습니다. 이길 가능성이없는 것은 전문 해커입니다. 그러나 대부분의 회사는 프로 해커를 직원들에게 오랫동안 생각하지 않습니다 (아마도 해킹 당하기 때문일 것입니다). 그러나 미성숙 한 해커들이 여기 저기 있습니다 (호기심 많은 IT 직원으로 읽음).

예를 들어, 수정 된 인터프리터에서 소스의 특정 주석 또는 doc 문자열을 확인하도록 허용 할 수 있습니다. 이러한 코드 줄에 대해 특수한 OP 코드를 가질 수 있습니다. 예를 들면 다음과 같습니다.

OP 234는 소스 라인 "# Copyright I written this"또는 "# Copyright"이없는 경우 "if False :"에 해당하는 op 코드로 해당 라인을 컴파일합니다. 기본적으로 불분명 한 이유로 코드 전체를 비활성화합니다.

수정 된 인터프리터를 재 컴파일 할 수있는 한 가지 유스 케이스는 앱을 작성하지 않은 경우, 앱은 크지 만 금융 앱의 전담 서버 관리자 인 경우와 같이 앱을 보호하기 위해 비용을 지불하는 것입니다.

소스 또는 opcode를 눈알을 위해 열어 두는 것이 약간 모순되지만 네트워크 트래픽에는 SSL을 사용합니다. SSL도 100 % 안전하지 않습니다. 그러나 그것은 대부분의 눈이 그것을 읽지 못하게하는 데 사용됩니다. 약간의주의 사항은 합리적입니다.

또한 충분한 사람들이 파이썬 소스와 opcode가 너무 가시적이라고 생각할 경우 누군가가 최소한 간단한 보호 도구를 개발할 가능성이 높습니다. 따라서 "Python 앱을 보호하는 방법"을 요구하는 사람들이 많을수록 개발을 촉진 할뿐입니다.


11

코드를 보호하는 신뢰할 수있는 유일한 방법은 제어하는 ​​서버에서 코드를 실행하고 해당 서버와 인터페이스하는 클라이언트를 클라이언트에 제공하는 것입니다.


10

나는 어떤 대답에서도 파이 콘크리트 를 보지 못하는 것에 놀랐다 . 아마도 질문보다 새로운 것이기 때문일까요?

정확히 필요한 것일 수 있습니다.

코드를 난독 처리하는 대신 코드를 암호화하고로드시 해독합니다.

에서 pypi 페이지 :

파이썬 스크립트 워크 플로우 보호

  • your_script.py import pyconcrete
  • pyconcrete는 가져 오기 모듈을 연결합니다
  • 스크립트가 import 할 때 MODULEpyconcrete import hook은 MODULE.pye먼저 .pyc 컨텐츠 MODULE.pye를 통해 해독 _pyconcrete.pyd하고 해독 된 데이터 를 통해 해독 하고 실행 하려고 시도합니다.
  • _pyconcrete.pyd DLL 또는 SO와 같은 비밀 키 레코드의 암호화 및 해독 비밀 키 는 이진 코드로 숨겨져 HEX보기에서 직접 볼 수 없습니다.

9

클라이언트가 누구인지에 따라 합리적인 라이센스 계약과 결합 된 간단한 보호 메커니즘이 복잡한 라이센싱 / 암호화 / 난독 화 시스템보다 훨씬 효과적입니다.

최선의 해결책은 코드를 서비스로 판매하는 것입니다. 서비스를 호스팅하거나 지원을 제공하는 것 등이 항상 실용적이지는 않습니다.

코드를 .pyc파일로 제공하면 보호 기능이 손상 될 수 #있지만, 그러한 기술이있는 것처럼 불법 복제 방지 효과는 거의 없으며 하루가 끝날 때 회사와의 적절한 라이센스 계약.

코드를 가능한 한 사용하기 좋게 만드는 데 집중하십시오. 행복한 고객을 보유하게되면 이론적 인 불법 복제를 막는 것보다 훨씬 많은 돈을 벌 수 있습니다.


8

코드를 훔치기 어렵게 만드는 또 다른 시도는 jython을 사용한 다음 java obfuscator 를 사용하는 것 입니다.

jythonc가 파이썬 코드를 java로 변환 한 다음 java가 바이트 코드로 컴파일되므로 꽤 잘 작동합니다. 따라서 클래스를 난독 화하면 실제 코드를 복구하는 것은 말할 것도없고 디 컴파일 후 무슨 일이 일어나고 있는지 이해하기가 어려울 것입니다.

jython의 유일한 문제는 c로 작성된 파이썬 모듈을 사용할 수 없다는 것입니다.


6

중요한 파일을 해시 및 서명하고 공개 키 방법으로 확인하여 표준 암호화 체계로 코드에 서명하는 것은 어떻습니까?

이러한 방식으로 각 고객의 공개 키를 사용하여 라이센스 파일을 발행 할 수 있습니다.

추가 당신은 같은 파이썬 난독을 사용할 수 있습니다 이 하나 (그냥 인터넷 검색).


1
서명을 위해 +1; 난독 처리기의 경우 -1 최소한 코드가 변경되는 것을 방지 할 수 있습니다.
Ali Afshar

2
이 컨텍스트에서는 서명이 작동하지 않습니다. 서명 확인 로더를 항상 우회 할 수 있습니다. 유용한 소프트웨어 보호를 위해 가장 먼저 필요한 것은 불투명 한 부트 스트랩 메커니즘입니다. 파이썬이 쉽게 할 수있는 것은 아닙니다.
ddaa

예, 비 파이썬으로 부트 스트랩.
Ali Afshar

또는 시작시뿐만 아니라 다른 여러 곳에서 라이센스의 유효성을 검사하십시오. 쉽게 구현할 수 있으며 우회 시간을 크게 늘릴 수 있습니다.
Abgan

6

getdropbox.com의 직원들이 Linux를 포함한 클라이언트 소프트웨어를 위해 어떻게 사용하는지 살펴보아야합니다. 크랙하기는 매우 까다 롭고 보호 메커니즘을 벗어나려면 꽤 독창적 인 분해가 필요합니다.


8
그러나 그것이 과거에 졌다는 사실은 그들이 실패했다는 것을 의미했습니다. 결론은 시도하지 않고 법적 보호를 위해 가십시오.
Chii

이 보호 메커니즘을 통과시키는 방법에 대한 정보가 있습니까?
Mitar

6

파이썬으로 할 수있는 최선은 일을 가리는 것입니다.

  • 모든 docstring을 제거하십시오
  • .pyc 컴파일 파일 만 배포하십시오.
  • 얼어 붙어
  • help (config)가 모든 것을 표시하지 않도록 클래스 / 모듈 내부의 상수를 숨기십시오.

일부를 암호화하고 즉시 해독하여 eval ()에 전달하여 모호한 부분을 추가 할 수 있습니다. 그러나 당신이 무엇을 하든지 누군가가 그것을 깨뜨릴 수 있습니다.

이 중 어느 것도 결정된 공격자가 바이트 코드를 분해하거나 도움말, 디렉토리 등으로 API를 파는 것을 막지 않습니다.


5

시간이 제한된 라이센스를 가지고 로컬에 설치된 프로그램에서 라이센스를 확인한다는 아이디어는 작동하지 않습니다. 완벽한 난독 처리에도 라이센스 확인을 제거 할 수 있습니다. 그러나 원격 시스템에서 라이센스를 확인하고 닫힌 원격 시스템에서 프로그램의 상당 부분을 실행하면 IP를 보호 할 수 있습니다.

경쟁 업체가 소스 코드를 자체 코드로 사용하거나 동일한 코드의 영감을 얻은 버전을 작성하지 못하도록 보호하는 한 가지 방법은 프로그램 논리에 서명을 추가하고 (코드가 도용 된 것을 증명할 수있는 일부 비밀) 숨겨야합니다. 파이썬 소스 코드이므로 읽고 사용하기가 어렵습니다.

좋은 난독 화는 코드에 기본적으로 동일한 보호 기능을 추가하여 실행 파일 (및 바이너리 제거)로 컴파일하는 것과 동일합니다. 복잡한 코드가 어떻게 작동하는지 파악하는 것은 실제로 자체 구현을 작성하는 것보다 훨씬 어려울 수 있습니다.

프로그램 해킹을 방지하는 데 도움이되지 않습니다. 난독 화 코드를 사용해도 라이센스가 깨져서 프로그램이 약간 다르게 동작하도록 수정 될 수 있습니다 (코드를 2 진으로 컴파일하는 것이 기본 프로그램의 보호에 도움이되지 않는 것과 같은 방식으로).

기호 난독 화 외에도 코드를 리팩터링 해제하는 것이 좋습니다. 예를 들어 실제로 그래프가 다른 장소가 결국 동일한 일을하는 경우에도 호출 그래프가 여러 장소를 가리키는 경우 모든 것이 더욱 혼란스러워집니다.

난독 처리 된 코드 내부의 논리 서명 (예 : 프로그램 논리에서 사용하지만 서명으로도 사용되는 값 테이블을 생성 할 수 있음)은 코드가 사용자의 출처임을 확인하는 데 사용할 수 있습니다. 누군가가 난독 처리 된 코드 모듈을 자체 제품의 일부로 사용하기로 결정한 경우 (다른 것으로 보이도록 난독 화 한 후에도) 해당 코드는 비밀 서명으로 도난당했습니다.


4

나는 내 자신의 프로젝트를 위해 일반적으로 소프트웨어 보호를 살펴 보았으며 일반적인 철학은 완전한 보호가 불가능하다는 것입니다. 고객이 달성 할 수있는 유일한 방법은 다른 라이센스를 구입하는 것보다 우회하는 데 비용이 많이 드는 수준으로 보호 기능을 추가하는 것입니다.

그것으로 나는 파이썬 난독 화에 대해 구글을 점검하고 많은 것을 밝히지 않았다고 말했다. .Net 솔루션에서 난독 처리는 Windows 플랫폼의 문제에 대한 첫 번째 접근 방법이지만 Linux에서 Mono와 작동하는 솔루션이 있는지 확실하지 않습니다.

다음은 코드를 컴파일 된 언어로 작성하거나 실제로 진행하려는 경우 어셈블러로 작성하는 것입니다. 제거 된 실행 파일은 해석되는 언어보다 디 컴파일하기가 훨씬 더 어렵습니다.

모든 것이 절충점에 이릅니다. 일단은 파이썬에서 소프트웨어 개발이 쉬워 비밀을 숨기기가 매우 어렵습니다. 반면에 어셈블러로 작성된 소프트웨어는 작성하기가 훨씬 어렵지만 비밀을 숨기는 것이 훨씬 쉽습니다.

상사는 자신의 요구 사항을 지원하는 연속체의 어느 지점을 선택해야합니다. 그리고 나서 그가 원하는 것을 만들 수 있도록 도구와 시간을 주어야합니다. 그러나 내 생각에 그는 실제 개발 비용과 잠재적 인 금전적 손실에 반대 할 것입니다.


4

간단히 말해 :

  1. 소스 코드를 암호화
  2. 가져올 때 코드를 해독하기 위해 자신의 파이썬 모듈 로더를 작성하십시오
  3. C / C ++에서 모듈 로더 구현
  4. 안티 로더, 라이센스 제어, 하드웨어 지문 바인딩 등과 같은 기능을 모듈 로더에 추가 할 수 있습니다.

자세한 내용은이 답변을보십시오 .

당신이 주제에 관심이 있다면,이 프로젝트는 당신을 도울 것입니다 - pyprotect을 .


3

py2exe 바이트 코드를 메모리에로드하고 실행하는 C 실행 프로그램의 암호화 된 리소스에 넣을 수 있습니다. 여기여기에 몇 가지 아이디어가 있습니다 .

일부는 자체 수정 프로그램을 생각했습니다리버스 엔지니어링 비용을 높이기 위해 을 .

디버거 방지를위한 자습서를 찾고 디스어셈블러가 실패하게하고 잘못된 디버거 중단 점을 설정하십시오. 하고 체크섬으로 코드를 보호 할 수도 있습니다. 더 많은 링크를 보려면 [ "암호화 된 코드"를 검색하고 "메모리에서"를 실행하십시오. "

그러나 다른 사람들이 이미 말했듯이 코드가 가치가 있다면 리버스 엔지니어는 결국 성공할 것입니다.


3

소프트웨어 라이센싱에 중점을두면 여기에 쓴 다른 스택 오버플로 답변을 살펴 보는 것이 좋습니다 . 라이센스 키 확인 시스템을 구성하는 방법에 대한 영감을 얻기 위해 에 .

GitHub 에 오픈 소스 라이브러리가 있습니다라이센스 확인 비트에 도움 에 있습니다.

설치 pip install licensing한 후 다음 코드를 추가 할 수 있습니다 .

pubKey = "<RSAKeyValue><Modulus>sGbvxwdlDbqFXOMlVUnAF5ew0t0WpPW7rFpI5jHQOFkht/326dvh7t74RYeMpjy357NljouhpTLA3a6idnn4j6c3jmPWBkjZndGsPL4Bqm+fwE48nKpGPjkj4q/yzT4tHXBTyvaBjA8bVoCTnu+LiC4XEaLZRThGzIn5KQXKCigg6tQRy0GXE13XYFVz/x1mjFbT9/7dS8p85n8BuwlY5JvuBIQkKhuCNFfrUxBWyu87CFnXWjIupCD2VO/GbxaCvzrRjLZjAngLCMtZbYBALksqGPgTUN7ZM24XbPWyLtKPaXF2i4XRR9u6eTj5BfnLbKAU5PIVfjIS+vNYYogteQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"

res = Key.activate(token="WyIyNTU1IiwiRjdZZTB4RmtuTVcrQlNqcSszbmFMMHB3aWFJTlBsWW1Mbm9raVFyRyJd",\
                   rsa_pub_key=pubKey,\
                   product_id=3349, key="ICVLD-VVSZR-ZTICT-YKGXL", machine_code=Helpers.GetMachineCode())

if res[0] == None not Helpers.IsOnRightMachine(res[0]):
    print("An error occured: {0}".format(res[1]))
else:
    print("Success")

RSA 공개 키 등이 구성되는 방식에 대한 자세한 내용은 여기를 참조하십시오 .


2

동일한 방법으로 c / c ++의 이진 파일을 보호하십시오. 즉, 실행 파일 또는 라이브러리 이진 파일의 각 함수 본문을 난독 처리하고, 각 함수 항목의 시작 부분에 "점프"명령을 삽입하고, 난독 화 된 코드를 복원하는 특수 함수로 이동하십시오. 바이트 코드는 파이썬 스크립트의 이진 코드이므로

  • 파이썬 스크립트를 컴파일하여 객체를 코딩하십시오.
  • 그런 다음 각 코드 객체를 반복하여 다음과 같이 각 코드 객체의 co_code를 난독 처리하십시오.
    0 JUMP_ABSOLUTE n = 3 + len (바이트 코드)

    삼
    ...
    ... 여기 난독 화 된 바이트 코드입니다.
    ...

    LOAD_GLOBAL? (__pyarmor__)
    n + 3 CALL_FUNCTION 0
    n + 6 POP_TOP
    n + 7 JUMP_ABSOLUTE 0
  • 난독 처리 된 코드 개체를 .pyc 또는 .pyo 파일로 저장

이러한 코드 객체가 처음 호출 될 때 일반 파이썬 인터프리터가 이러한 난독 화 된 파일 (.pyc 또는 .pyo)을 사용할 수 있습니다.

  • 첫 번째 연산은 JUMP_ABSOLUTE이며 오프셋 n으로 점프합니다.

  • 오프셋 n에서 명령은 PyCFunction을 호출하는 것입니다. 이 함수는 오프셋 3과 n 사이의 난독 처리 된 바이트 코드를 복원하고 원래 바이트 코드를 오프셋 0에 배치합니다. 난독 화 된 코드는 다음 코드에서 얻을 수 있습니다.

        char * obfucated_bytecode;
        Py_ssize_t len;
        PyFrameObject * frame = PyEval_GetFrame ();
        PyCodeObject * f_code = 프레임-> f_code;
        PyObject * co_code = f_code-> co_code;      
        PyBytes_AsStringAndSize (co_code, & obfucated_bytecode, & len)
    
  • 이 함수가 반환 된 후 마지막 명령어는 오프셋 0으로 이동하는 것입니다. 실제로 바이트 코드가 실행됩니다.

이 방법으로 파이썬 스크립트를 난독 화 하는 Pyarmor 도구가 있습니다 .



1

찾을 수있는 파이썬 소스 코드, 은폐에 대한 포괄적 인 해답이 여기가 .

가능한 컴파일 기술은 다음과 같습니다
.-컴파일 된 바이트 코드 사용 ( python -m compileall)
-실행 가능한 작성자 (또는 PyInstaller 와 같은 설치 프로그램 )
-서비스로서의 소프트웨어 (내 의견으로는 코드를 숨기는 가장 좋은 솔루션 ) -python
source code obfuscators


링크는 example.com으로 이동합니다.
Darian

@Darian 지적 해 주셔서 감사합니다. 링크를 업데이트했습니다.
마이크
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.