고객이 해석 된 언어로 작성된 코드를 보지 못하게하려면 어떻게해야합니까?


16

파이썬으로 상당히 복잡한 해석 프로그램을 만들고 있습니다. 나는이 코드의 대부분을 몇 달 동안 다른 목적으로 작업 해 왔기 때문에 클라이언트가 단순히 복사하여 판매하려고 시도하기를 원하지 않습니다.

문제는 클라이언트가 지불하는 서버에서 스크립트를 실행해야한다는 것입니다. 따라서 루트 액세스에서 컴퓨터의 특정 폴더를 보호하거나 특정 용도로만 디렉토리에 액세스 할 수있는 방법이 있습니까 ? OS는 우분투입니다.


13
귀하와 고객간에 어떤 종류의 계약 / 계약이 있습니까? 코드를 소유하고 있습니까, 아니면 코드 사용 허가를받은 것입니까? 아니면이 중 어느 것도 해결하지 못했습니까?
matt b

2
파이썬 소스를 바이너리로 컴파일 할 수 있다고 생각했습니다. 이 프로젝트가 가능합니까? 그렇다면 대신 바이너리를 배포 할 수 있습니다.
FrustratedWithFormsDesigner

nightcracker는 내 의견으로는 맞습니다. 적절한 라이센스 및 계약은 기술적 인 조치가 아닌이 모든 것을 방지해야합니다. 특히 무언가를 디 컴파일 / 디-난독 처리 할 수 ​​있고 모든root 작업을 수행 할 수 있기 때문 입니다.
바비

다른 방법으로 생각해보십시오. 계약이나 라이센스를 위반하면 울 때까지 고소 할 수 있습니다.
Jakob Bowyer

9
모든 사람들은 항상 그들의 코드가 상당한 가치가 있다고 말합니다.
Kaleb Brasee

답변:


40

라이센스를 부여하십시오.

정말 그게 다야!


6
내 첫 번째 생각은 이것을 답이 아닌 것으로 하향 조정하는 것이었지만, 당신은 옳습니다. 라이센스 및 계약 계약이 여기에 있습니다.
바비

@Bobby : 거의 유일한 방법입니다. 대안은 이전 버전을 훔치는 것이 즐겁고 유용한 새로운 기능을 너무 빨리 추가하여 기존 버전을 훔치는 것이 시간 낭비라는 것입니다.
S.Lott

크리에이티브 커먼즈는 라이센스로 충분합니까?

10
-1 질문은 클라이언트가 코드를 보지 못하게하는 방법을 묻습니다. 그렇지 않습니다. 사람들은 항상 라이센스를 준수하지는 않으며 소송을 제기하기 위해 합법적으로 확인할 수 없을 수도 있습니다.
Orbling

8
클라이언트가 Python 코드를 보는 것을 막을 수는 없습니다. 분해하기가 너무 쉽습니다. DRM이 작동하지 않습니다 (실행할 수 있으면 분해 할 수 있음). 따라서 유일한 대답은 합법적 인 것입니다. 그리고 법 집행을 위해 일단 법에 의존하고 있다면 기술 기반을 복잡하게하여 자신이나 고객의 삶을 더 힘들게 만들지 않아도됩니다.
ncoghlan

10

항상 모든 파일을 바이트 코드 pyc로 컴파일 할 수 있습니다. 소스 코드를 생성 할 수있는 디 컴파일러가 있지만 아무 것도 아닙니다.

그러나 이것은 프로그램 코드를 읽는 기능을 해결합니다. 나이트 크래커가 말한 것처럼 라이센스를 보호하는 유일한 방법은 코드를 컴파일하더라도 기계 코드를 말하도록하는데, 라이센스에 의해 작업이 보호되지 않는 경우 여전히 의지에 따라 상용화 될 수 있기 때문입니다.

결론은 바이트 코드로 컴파일하고 더 중요하게 라이센스하십시오.


질문이 있습니다. 바이트 컴파일러는 임의의 변수 이름을 사용합니까 아니면 이전 변수 이름을 사용합니까? (외부 모듈은 해당 네임 스페이스에 의존하기 때문에 이전 모듈을 사용해야한다고 생각합니다).

@Garrett : 바이트 코드는 변수 이름을 포함합니다. 디스 어셈블 할 때 ( 이 레시피 의 디스 어셈블리소화 해보십시오) 여전히 읽을 수없는 혼란 이며, (최근) 디 컴파일러가 없습니다.

7

Cython을 사용하십시오. 이를 통해 프로그램을 기본 실행 파일로 컴파일 할 수 있습니다. 그렇다면 훔치기가 훨씬 더 어려워 합니다.

디렉토리와 관련하여 내가 줄 수있는 유일한 조언은 권한이 올바르게 설정되어 있는지 확인하는 것입니다. ACL이 루트가 파일에 액세스하는 것을 제한 할 수 있는지 100 % 확신 할 수는 없지만 ACL은 귀하의 친구 일 수 있습니다. 그들이 할 수 있더라도 root는 여전히 권한을 변경할 수 있습니다. 그는 뿌리이고 신입니다. 이것이 바로 이런 방식으로 작동합니다.

http://www.korokithakis.net/node/109


1

위의 사용자가 보았 듯이 디스어셈블러는 코드를 다시 가져올 수는 있지만 읽을 수는 없습니다 (적어도 오픈 소스 디스어셈블러는 아님).

나는 이것에 대해 생각하고 있었고, 당신 이이 문제를 해결할 수 있다고 생각하는 한 가지 방법 (강제 오픈 코드 문제라고 부르는 경우)은 자동 리팩토링 스크립트를 작성하는 것입니다. 이것은 실제로 매우 간단합니다. 스크립트에 모듈을 공급하면 모든 모듈 특정 변수의 이름이 바뀝니다. 컴파일 된 파일 만 공개하면 코드가 난독 화됩니다.

PyPI를 검색하면 http://pypi.python.org/pypi/pyfuscate/0.1 이 발견되었습니다 . 당신은 그것을 확인하고 다른 사람은 그것을 좋아하고 다시보고해야합니다 : D

또한 : 물론 라이센스도 있어야합니다.


1

라이센스도 제안하고 싶습니다. 라이센싱 외에도 비대칭 키 알고리즘을 사용하여 기본 루틴의 소스 코드를 암호화하여 클라이언트 시스템에서만 실행할 수 있습니다. 이 쌍의 키 중 하나는 클라이언트 컴퓨터의 하드웨어 (예 : 네트워크 카드의 일련 번호)에서 얻은 것입니다. 프로그램을 실행할 때 소스 코드를 해독하려면 쌍의 다른 키를 사용하십시오. 일반 텍스트로만 제공되는 것은 암호 해독 루틴이고 나머지는 암호 텍스트로 제공됩니다.

이렇게하면 클라이언트가 겉보기에 어설프게 보이는 코드를 복사하여 붙여 넣을 수 있지만 다른 곳에서는 실행할 수 없습니다. 내 제안은 완전히 방탄하지는 않습니다. 통역사는 해독 된 프로그램을 메모리 어딘가에 저장할 수 있습니다. 그런 다음 일부 해커가 실행 중에 일반 텍스트로 프로그램을 검색 할 수 있습니다.

폴더의 루트 액세스를 방지하기 위해 루트가 파일 / 폴더에 대한 액세스를 중지 할 수 없음에 동의합니다.


올바른 도구를 사용 하면 코드가 난독 화 되고 코드가 일반 텍스트로 표시되는 시점 이 항상 있습니다. 솔루션을 물리 치는 간단한 방법 은 사용자 정의 프로그램으로 ruby/ python/ 단순히 스왑 아웃 node하여 실행 API를 미러링하고 코드를 출력하는 것입니다.
Jamo

또한 개인 키 (암호 해독 용)를 환경에서 사용할 수 있어야하므로 공격자가 사용할 수 있습니다.
Fixee

0

라이센싱이 가장 좋습니다. 즉, 왜 기어를 사용해야합니까? 매우 중요한 경우 서비스를 시작하고 사물 주변에 일종의 서비스 API를 구축하여 사람들이 지적 재산을 보지 못하도록 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.