2010-01-30 8 views
3

자동화를 위해 스크립팅 언어를 사용하는 클로즈드 소스 게임을하고 있습니다. 거의 모든 게임 논리는 스크립트에 의해 처리됩니다. 스크립트는 바이트 코드 형식으로 컴파일 될 수 있지만 언어의 특성으로 인해 식별자는 보존되어야합니다. 컴파일 된 스크립트는 바이너리 - 텍스트 인코딩을 사용하여 다른 텍스트 기반 리소스 형식에 포함될 수 있습니다.텍스트 파일에 포함하기위한 스크립트 암호화

배포 중에 소스를 보호하기 위해 컴파일 된 스크립트를 암호화하려고하지만 언어, 바이트 코드 형식 및 바이너리 - 텍스트 인코딩 체계가 모두 독점적이므로 암호화에 대해 걱정할 필요가 있습니까? 그렇다면 단순히 일부 바이트를 혼란시키고 하루 만에 사용해야합니까? 그렇지 않으면 완전한 암호화 솔루션을 사용해야합니까? 스크립트가 크고로드 시간이 중요하기 때문에 암호화가 실행 파일의 크기를 과도하게 늘려서는 안됩니다.

+0

볼 수있는 C++ 콘텐츠가 없습니다. C++ 태그가 제거되었습니다. –

+0

죄송합니다. 구현 언어가 C++이기 때문에 습관적으로 태그가 추가되었습니다. –

+0

원본을 정확히 보호 하시겠습니까? 그리고 왜? 암호화를 사용해야한다는 생각은 어디서 비롯된 것입니까? –

답변

1

Windows에서 실행 파일의 크기는 exe가 메모리에 매핑되고 필요에 따라 페이지되기 때문에로드 시간에 영향을 미치지 않습니다. 나는 왜 그것이 * nix를 위해 진실하지 않은지 상상할 수 없다.

따라서 스크립트를 .exe와 별도로 변경할 필요가없는 경우 .exe에 스크립트를 삽입하면 사용자가 쉽게 찾을 수 있어도 변경이 어려울 수 있습니다. 데이터 파일을 내 exe에 데이터를 쉽게 넣을 수있게 해주는 .obj 파일로 바꾼 작은 도구를 작성했습니다. 데이터 만 포함 된 개체 파일을 작성하는 것이 꽤 쉬웠습니다.

정말로이 실제 데이터를 전체 암호화보다 보호하는 데주의를 기울이는 것이지만, 해킹을 막으려 고 시도하는 경우 파일을 저장하기가 어려울 수도 있습니다.

+0

충분하면 충분합니다. 나는 순진한 교란과 'objcopy'의 현명한 사용이 나의 해결책이라고 생각한다. 그런데 필자는 게임 응용 프로그램이 아니라 스크립트 실행 파일의 크기를 언급했습니다. :) –

+0

@ 존 : 예, 이제 알겠습니다. 내가 알고 있듯이 강력한 암호화는 대개 암호화 알고리즘의 청크 크기와 일치하도록 최대 크기만큼 암호화하는 데이터를 증가시키지 않습니다. –

1

사람들이 이진 독점 형식을 읽을 수 없다고 가정해서는 안됩니다. 어떤 문서도없이 리버스 엔지니어링 프로토콜에 능숙한 사람들이 많이 있습니다.

소스를 안전하게 유지하려면 실제적인 보안이 필요합니다. 유일한 문제는 파일을 암호화하는 경우 게임을 실행하기 위해 사용자에게 암호 해독 키를 제공해야하며, 그렇게 할 때 누군가가 키를 얻는 방법을 배우기 전에 시간 문제가 발생한다는 것입니다 모든 파일의 암호를 해독하는 데 사용하십시오.

기본적으로 불행히도 할 수있는 일이 많지 않습니다. 코드를 모호하게 만들 수는 있지만 모든 사람을 막을 수는 없습니다.

1

당신이 말하는 것은 암호 해독 키를 함께 보내야하기 때문에 암호화되지 않을 것입니다. 그것은 단지 난독 화입니다. 아무리 해독 키를 숨기려고해도 프로그램에서 찾을 수 있으면 사용자도 찾을 수 있습니다.

일단 우리가 다양한 난독 화 방식에 대해 이야기하고 있다는 것을 알게되면 문제는 얼마나 까다 롭습니다. 아마도 독점적 인 바이트 컴파일은 암호화보다 높은 장벽이 될 것이고 나는 그것을 하루라고 부를 것입니다. 로직을 추적하고자하는 사람이라면 누구나 암호화 여부와 상관없이 디버거를 넣을 수 있습니다. 바이트 코드를 처리하기 위해 런타임 엔진을 이미 리버스 엔지니어링 한 경우에는 암호화되지 않은 데이터가있는 코드 부분에 이미 있습니다.

즉, 파일의 식별자가 문제가있는 것으로 밝혀지면 바이트 컴파일 전에 임의로 문자열을 기계식으로 변환 할 수 있습니다.

0

여기서는 암호화를 사용하지 않을 것입니다.

기본적으로 추가하는 암호화 계층에 관계없이 실행 파일 자체는 스크립트를 실행하기 위해 암호 해독을 수행 할 수 있어야합니다.당신은 문을 잠그지 만 열쇠는 자물쇠에두고 있습니다. 이것은 피할 수없는 일입니다.

암호화의 특징은 누가 데이터에 액세스 할 수 있는지에 대한 기준을 다소 높입니다. 해체 기술이 필요합니다. 단순히 실행 파일에 파일을 포함 시키면 캐주얼하지 않은 아주 좋은 해커를 걸러냅니다. 그러한 삽입으로 인해 방해받지 않는 사람들은 데이터 처리 경로를 따라갈 수 있고 해독 논리를 찾고 암호 해독 된 코드를 자유 자재로 찾아 낼 수 있습니다. 암호화 계층은 중요성을 높일 수 있습니다. 암호화 된 것은 확실히 가치가 있습니다. 따라서 너무 펑키 한 것들을 시도하면 상황이 더 나빠질 수 있습니다.

한편, 실행 가능 바이너리에 파일을 임베드하는 것은 좋은 생각입니다. 런타임시 파일 시스템에서 런타임에 위치를 찾아야 할 필요성이 제거됩니다 (하드 링크로 인해 Unix 시스템에서 Windows 시스템보다 UNIX 시스템에서 다소 어려운 것으로 밝혀졌습니다 : Windows에서 실행 파일은 쉽게 자체 경로를 얻을 수 있지만 Unix에서 하드 링크가 있으면 "the"실행 경로가 잘못 정의 된 것입니다.