2012-08-22 13 views
12

How do I protect Python code?을 읽은 후 Windows에서 정말 간단한 확장 모듈을 사용하기로 결정했습니다. 이전에 리눅스에서 자체 확장 모듈을 컴파일했지만 Windows에서 컴파일 한 것은 이번이 처음입니다. .dll 파일을 얻으 려했지만 대신 .pyd 파일이 있습니다. Docs은 종류가 동일하지만 init[insert-module-name]() 기능이 있어야한다고 말합니다..pyd 파일을 리버스 엔지니어링하는 것이 얼마나 어려운가요?

dll 파일로 리버스 엔지니어링하는 것은 어렵지 않습니다. 그렇지 않다면 .pyc 파일에서 .dll 파일까지의 범위에서 엔지니어를 역전시킬 경도는 무엇입니까?

+0

"예 .pyd 파일은 dll입니다."라고 말하면 dll 파일보다 리버스 엔지니어가 어렵지 않은지 묻는 질문은 무엇입니까? 그것은 여전히 ​​원시 코드입니다 ... –

+0

@MatteoItalia 저는 그들이 실제로 얼마나 다른지를 이해하는 데 어려움을 겪고 있습니다. 예를 들어 .pyc 파일도 컴파일 된 코드이지만 dll 파일보다 리버스 엔지니어링하기가 쉽습니다. – yasar

+1

@ yasar11732 .pyc 파일은 네이티브 코드가 아닙니다. – delnan

답변

9

그들은 이미 알고있는 것처럼 특정 구조의 DLL 파일과 같습니다. 원칙적으로 리버스 엔지니어링이 어렵고, 기계 코드이고, 메타 데이터가 거의 필요하지 않으며 코드가 인식을 넘어서 최적화되었을 수도 있습니다.

그러나 필요한 구조와 많은 함수가 PyObject * 및 기타 잘 정의 된 CPython 유형을 처리한다는 것을 알고 있으면 어떤 영향을 미칠 수 있습니다. 어셈블리 코드를 C로 매핑하는 것은 실제로 도움이되지 않습니다 (CPython 특정 매크로로 인해 어셈블리 코드가 더 어려워 진다면). 대부분 파이썬 유형과 상호 작용하는 코드는 C 구조체를 조작하는 코드와 상당히 다를 것입니다 (그리고 비교적 비 대한). 이것은 이해하기가 더 어렵게 만들 수도 있고, 재미있는 일을하지 않는 코드를 제공 할 수도 있으며 리버스 엔지니어가 건너 뛰고 이전에 영업 비밀을 얻을 수도 있습니다.

순수 C 코드 (즉, Python과 상호 작용하지 않음) 인 코드 조각에는 이러한 문제가 적용되지 않습니다. 그리고 당신은 아마 그것들을 많이 가지고있을 것입니다. 그래서 결국 중요한 차이를 만들어서는 안됩니다.

1

기본적으로 기본 코드입니다. 그러나 모든 함수에는 재미있는 인수 목록이 있기 때문에 각 함수의 기능을 이해하는 것이 더 어려울 수 있습니다. 나는 그들이 어렵지 않다면 dll만큼 어렵다고 말할 것이다.