1

파이썬 (2.7)에서 프로그램을 만들고 리버스 엔지니어링에서 보호하려고합니다.리버스 엔지니어링에서 파이썬 코드 보호

나는 VM을 인식 코드를 암호화, cx_freeze (공급 기본 보안 - 난독 및 안티 디버깅)

나는 그런 난처 포장으로 더 보호를 추가 할 수있는 방법

, 안티 디버깅을 사용하여 컴파일.

페이로드로 암호화하고 런타임에 암호를 해독하는 방법을 생각했지만 어떻게해야 할 지 전혀 모른다.

+1

컴퓨터에있는 모든 잠금 장치에는 어딘가에 구멍이 있습니다. 그래서 왜 비싸고 결국에는 깨질 보안 문제를 구현해야합니까? – user2740652

+0

정확히 달성하려는 것은 무엇입니까? – fuz

+2

그리고 어떤 종류의 난독 화를 원한다면 런타임시 심볼 이름을 알 필요가없는 프로그래밍 언어 (Python이 사용하는)를 사용하는 것이 좋습니다. – fuz

답변

4

일반적으로 말하면, 해커에 대한 동기가 충분하면 프로그램을 깨뜨릴 수 없습니다.

하지만 여전히 당신은 열심히 역 cythonpyd 또는 so 파일로 핵심 코드를 컴파일하는 데 사용하려고 설계 할 수 있습니다.

+0

왜 이것이 더 어려워 집니까? Cython을 사용하면 기계어 코드를 얻을 수 있습니다. –

+2

글쎄, 파이썬 코드를 기계어 코드보다 이해하기가 상대적으로 쉽다. – Shane

+0

이것은 파이썬 바이트 코드를 컴파일 할 때만 해당됩니다. 파이썬 바이트 코드는 일반 소스 코드 대신 배포하고 싶습니다. 모든 cpython이 없기 때문에 모든 기계어 코드가 더 쉬울 것이라고 생각합니다. Otoh 파이썬 디버거도 존재하지만 대부분 기계 코드 디버거보다 훨씬 쉽게 속일 수 있습니다. –

3

이야기 시간 : 저는 오랫동안 파이썬 프로그래머였습니다. 최근에 저는 Python 프로그래머로서 회사에 가입했습니다. 저의 매니저는 10 년 동안 자바 프로그래머였습니다. 그는 나에게 프로젝트를 주었고 처음 리뷰에서 그는 우리에게 코드를 모호하게 만들었다 고 질문했다. 저는 파이썬에서 그런 종류의 일을하지 않는다고 말했습니다. 그는 우리가 자바에서 그런 종류의 일을한다고 말했고 파이썬으로 같은 것을 구현하기를 원합니다. 결국 주석과 공백을 제거하고 로컬 변수의 이름을 바꾸는 코드를 난처하게 만들었지 만 전체 파이썬 디버깅 프로세스가 엉망이되었습니다.

그런 다음 그는 나에게 묻습니다. ProGuard를 사용할 수 있습니까? 나는 그게 대체 뭔지도 몰랐다. 일부 검색 후 나는 그것이 자바에 대한 것이라고 파이썬에서 사용할 수 없습니다. 또한 우리가 자체적으로 구축 한 서버가 무엇이든간에, 우리는 실제로 코드를 보호 할 필요가 없다고 말했습니다. 그러나 그는 마지 못해 말하기를, 우리는 일련의 절차를 가지고 있으며 배치하기 전에 반드시 따라야 만한다고 말했다.

결국 저는 1 년 후에 파이썬이 자바가 아니라고 설득하기 위해 싸우면서 지쳤습니다. 나는 또한 그 시점에서 다르게 생각하게 만드는 것에 관심이 없었다.

TLDR; Python의 오픈 소스 특성 때문에 코드를 난독 화하거나 암호화 할 수있는 실행 가능한 도구가 없습니다. 또한 자신의 서버 (서비스로 소프트웨어 제공)에 코드를 배포하는 한 문제가되지 않는다고 생각합니다. 그러나 실제로 제품을 고객에게 제공하는 경우 코드 또는 바이트 코드를 마무리하고 실행 파일처럼 제공 할 수있는 몇 가지 도구가 있습니다. 그러나 원하는 경우 항상 코드를 볼 수 있습니다. 또는 코드 보호가 절대적으로 필요한 경우 더 나은 보호 기능을 제공하는 다른 언어를 선택하십시오. 다시 코드에서 리버스 엔지니어링을 수행 할 수 있다는 점을 다시 기억하십시오.

0

요즘에는 디지털 안전 장치를 만들 수있는 방법이 없습니다.

당신이 할 수있는 일은 실망스럽고 어려운 일이지만 그것을 달성하기위한 구체적인 방법은 모르겠습니다. 프로그램의 보안 수준은 실제로 프로그램 보안의 기능이 아니라 심리학입니다.

예, 심리학.

크래커와 앤 크래커 사이에서 서로 경쟁을 벌일 수 있다는 점을 감안할 때, 둘 다 지속적으로 서로 가깝게 시도 할 수있는 유일한 방법은 가능한 한 실망스럽게 만드는 것입니다. 우리는 어떻게 그것을 성취합니까?

뒤쪽에 통증이 됨으로써!

코드를 해독하기 어렵다는 것을 확인하기위한 모든 추가 조치가 필요합니다.

예를 들어, 프로그램 내에서 호출하는 바이트 코드의 컴파일 된 단일 블록으로 프로그램을 변환 할 수 있습니까? 외부 라이브러리를 사용하여 미리 암호화하고 나중에 해독하십시오. 함수의 코드 블록에 대해 추가 단계를 수행하십시오. 또는 사전 컴파일 된 블록의 기능을 준비하지만 고장났습니다. 런타임시 byteplay를 사용하여 다른 기능의 다른 바이트에 따라 바이트 코드로 바이트 코드를 수정하면 수정할 때 프로그램이 작동하지 않게됩니다.

사람들의 머리를 망칠 수있는 방법이 많이 있습니다. 파이썬에 대한 구체적인 방법을 말할 수는 없지만, "암캐가되는 법"이라는 맥락에서 생각한다면, 가장 이상한 방법으로 만들 수 있습니다. 그것은 당신의 코드를 다룰 난장판입니다.

재미있게도 어셈블리에서 파이썬보다 훨씬 쉽기 때문에 ctypes 등을 통해 외부 코드를 실행해야합니다.

내부 트롤을 소환하십시오!

+1

Downvoted, 이유가 무엇입니까? 누군가 코드에 균열을 일으킨 적이 있습니까? 나는 그랬다. 그것은 mindgame입니다. –

+0

아마도 : "요즘에는 디지털 안전 장치를 만들 수있는 방법이 없습니다"라는 것이 과장입니까? – zaph

+0

어디에도 연결하지 않는 컴퓨터를 계산합니까, USB, CD, DVD를 사용하지 않습니까? * 거기에 소프트웨어를 성공적으로 * airgap * 타겟팅! 마크 주커 버그 (Mark Zuckerberg)는 자신의 PC를 다룬다. 디지털은 안전합니다. 물론, 하드 디스크를 금고에 넣을 수는 있지만, 그 점이 무엇입니까? :) –