파이썬 (2.7)에서 프로그램을 만들고 리버스 엔지니어링에서 보호하려고합니다.리버스 엔지니어링에서 파이썬 코드 보호
나는 VM을 인식 코드를 암호화, cx_freeze
(공급 기본 보안 - 난독 및 안티 디버깅)
, 안티 디버깅을 사용하여 컴파일.
페이로드로 암호화하고 런타임에 암호를 해독하는 방법을 생각했지만 어떻게해야 할 지 전혀 모른다.
파이썬 (2.7)에서 프로그램을 만들고 리버스 엔지니어링에서 보호하려고합니다.리버스 엔지니어링에서 파이썬 코드 보호
나는 VM을 인식 코드를 암호화, cx_freeze
(공급 기본 보안 - 난독 및 안티 디버깅)
, 안티 디버깅을 사용하여 컴파일.
페이로드로 암호화하고 런타임에 암호를 해독하는 방법을 생각했지만 어떻게해야 할 지 전혀 모른다.
일반적으로 말하면, 해커에 대한 동기가 충분하면 프로그램을 깨뜨릴 수 없습니다.
하지만 여전히 당신은 열심히 역 cython
이 pyd
또는 so
파일로 핵심 코드를 컴파일하는 데 사용하려고 설계 할 수 있습니다.
왜 이것이 더 어려워 집니까? Cython을 사용하면 기계어 코드를 얻을 수 있습니다. –
글쎄, 파이썬 코드를 기계어 코드보다 이해하기가 상대적으로 쉽다. – Shane
이것은 파이썬 바이트 코드를 컴파일 할 때만 해당됩니다. 파이썬 바이트 코드는 일반 소스 코드 대신 배포하고 싶습니다. 모든 cpython이 없기 때문에 모든 기계어 코드가 더 쉬울 것이라고 생각합니다. Otoh 파이썬 디버거도 존재하지만 대부분 기계 코드 디버거보다 훨씬 쉽게 속일 수 있습니다. –
이야기 시간 : 저는 오랫동안 파이썬 프로그래머였습니다. 최근에 저는 Python 프로그래머로서 회사에 가입했습니다. 저의 매니저는 10 년 동안 자바 프로그래머였습니다. 그는 나에게 프로젝트를 주었고 처음 리뷰에서 그는 우리에게 코드를 모호하게 만들었다 고 질문했다. 저는 파이썬에서 그런 종류의 일을하지 않는다고 말했습니다. 그는 우리가 자바에서 그런 종류의 일을한다고 말했고 파이썬으로 같은 것을 구현하기를 원합니다. 결국 주석과 공백을 제거하고 로컬 변수의 이름을 바꾸는 코드를 난처하게 만들었지 만 전체 파이썬 디버깅 프로세스가 엉망이되었습니다.
그런 다음 그는 나에게 묻습니다. ProGuard를 사용할 수 있습니까? 나는 그게 대체 뭔지도 몰랐다. 일부 검색 후 나는 그것이 자바에 대한 것이라고 파이썬에서 사용할 수 없습니다. 또한 우리가 자체적으로 구축 한 서버가 무엇이든간에, 우리는 실제로 코드를 보호 할 필요가 없다고 말했습니다. 그러나 그는 마지 못해 말하기를, 우리는 일련의 절차를 가지고 있으며 배치하기 전에 반드시 따라야 만한다고 말했다.
결국 저는 1 년 후에 파이썬이 자바가 아니라고 설득하기 위해 싸우면서 지쳤습니다. 나는 또한 그 시점에서 다르게 생각하게 만드는 것에 관심이 없었다.
TLDR; Python의 오픈 소스 특성 때문에 코드를 난독 화하거나 암호화 할 수있는 실행 가능한 도구가 없습니다. 또한 자신의 서버 (서비스로 소프트웨어 제공)에 코드를 배포하는 한 문제가되지 않는다고 생각합니다. 그러나 실제로 제품을 고객에게 제공하는 경우 코드 또는 바이트 코드를 마무리하고 실행 파일처럼 제공 할 수있는 몇 가지 도구가 있습니다. 그러나 원하는 경우 항상 코드를 볼 수 있습니다. 또는 코드 보호가 절대적으로 필요한 경우 더 나은 보호 기능을 제공하는 다른 언어를 선택하십시오. 다시 코드에서 리버스 엔지니어링을 수행 할 수 있다는 점을 다시 기억하십시오.
요즘에는 디지털 안전 장치를 만들 수있는 방법이 없습니다.
당신이 할 수있는 일은 실망스럽고 어려운 일이지만 그것을 달성하기위한 구체적인 방법은 모르겠습니다. 프로그램의 보안 수준은 실제로 프로그램 보안의 기능이 아니라 심리학입니다.
예, 심리학.
크래커와 앤 크래커 사이에서 서로 경쟁을 벌일 수 있다는 점을 감안할 때, 둘 다 지속적으로 서로 가깝게 시도 할 수있는 유일한 방법은 가능한 한 실망스럽게 만드는 것입니다. 우리는 어떻게 그것을 성취합니까?
뒤쪽에 통증이 됨으로써!
코드를 해독하기 어렵다는 것을 확인하기위한 모든 추가 조치가 필요합니다.
예를 들어, 프로그램 내에서 호출하는 바이트 코드의 컴파일 된 단일 블록으로 프로그램을 변환 할 수 있습니까? 외부 라이브러리를 사용하여 미리 암호화하고 나중에 해독하십시오. 함수의 코드 블록에 대해 추가 단계를 수행하십시오. 또는 사전 컴파일 된 블록의 기능을 준비하지만 고장났습니다. 런타임시 byteplay를 사용하여 다른 기능의 다른 바이트에 따라 바이트 코드로 바이트 코드를 수정하면 수정할 때 프로그램이 작동하지 않게됩니다.
사람들의 머리를 망칠 수있는 방법이 많이 있습니다. 파이썬에 대한 구체적인 방법을 말할 수는 없지만, "암캐가되는 법"이라는 맥락에서 생각한다면, 가장 이상한 방법으로 만들 수 있습니다. 그것은 당신의 코드를 다룰 난장판입니다.
재미있게도 어셈블리에서 파이썬보다 훨씬 쉽기 때문에 ctypes 등을 통해 외부 코드를 실행해야합니다.
내부 트롤을 소환하십시오!
Downvoted, 이유가 무엇입니까? 누군가 코드에 균열을 일으킨 적이 있습니까? 나는 그랬다. 그것은 mindgame입니다. –
아마도 : "요즘에는 디지털 안전 장치를 만들 수있는 방법이 없습니다"라는 것이 과장입니까? – zaph
어디에도 연결하지 않는 컴퓨터를 계산합니까, USB, CD, DVD를 사용하지 않습니까? * 거기에 소프트웨어를 성공적으로 * airgap * 타겟팅! 마크 주커 버그 (Mark Zuckerberg)는 자신의 PC를 다룬다. 디지털은 안전합니다. 물론, 하드 디스크를 금고에 넣을 수는 있지만, 그 점이 무엇입니까? :) –
컴퓨터에있는 모든 잠금 장치에는 어딘가에 구멍이 있습니다. 그래서 왜 비싸고 결국에는 깨질 보안 문제를 구현해야합니까? – user2740652
정확히 달성하려는 것은 무엇입니까? – fuz
그리고 어떤 종류의 난독 화를 원한다면 런타임시 심볼 이름을 알 필요가없는 프로그래밍 언어 (Python이 사용하는)를 사용하는 것이 좋습니다. – fuz