캐주얼 해킹으로부터 저장 데이터를 어떻게 보호 할 수 있습니까?


32

게임 데이터를 안전하게 저장하기위한 옵션은 무엇입니까? C ++에 맞게 특별히 설계된 솔루션에 관심이 있습니다.

빠르고 사용하기 쉬운 것을 찾고 있습니다. 나는 다음과 같은 간단한 정보를 저장하는 것에 대해서만 걱정하고 있습니다.

  • 잠금 해제되지 않은 레벨

  • 각 레벨의 사용자 점수

나는 거기에 무엇을 사용할 것인지, 좋은 라이브러리를 사용하여 평범한 플레이어가 엉망으로 만들 수없는 멋지고 안전한 게임 데이터 파일을 제공한다는 것을 다시 알고 싶습니다.

나는 이것이 매우 멋지게 보이는 것을 여기 에서 발견 했지만 잠재적 인 다른 라이브러리 / 옵션에 대한 의견을 얻는 것이 좋을 것입니다.


5
왜 보안이 필요한가요? 플레이어가 막혔 기 때문에 저장을 편집하여 레벨 잠금을 해제하기 위해 속임수를 원한다면 왜 그렇게하지 않습니까?
Adam

2
글쎄, 게임은 IndieCity.com에 올라갈 것이며, 그들은 사용할 업적 시스템이 있습니다. 보스를 포함한 특정 레벨을 물리 치면서 몇 가지 업적을 달성하고 싶습니다. 플레이어가이 도전 과제의 잠금을 해제하는 방법을 속이는 것은 허용되지 않습니다. "CAP"규칙을 불렀습니다. 그래서 캐주얼 한 플레이어가 데이터를 변경하는 것을 막기 위해 어떤 형태의 보안 조치가 필요합니다.
dan369

1
저장 게임이 자체 서버에 남아 있지 않으면 저장 게임을 보호 할 수 없으므로 IndieCity.com에 해당 요구 사항에 제한이 있음을 알리는 것이 좋습니다.
Kylotan

답변:


24

먼저 매우 간단한 저장 파일이 있기 때문에 텍스트 파일을 사용할 수 있습니다.

가장 간단한 아이디어 중 하나는 문자열 키를 사용하여 데이터를 잠 그거나 잠금 해제하는 것입니다.

void encrypt(string& data,string key)
{
    for(unsigned i=0;i<data.size();i++)
        data[i] += key[i%key.size()];
}

void decrypt(string& data,string key)
{
    for(unsigned i=0;i<data.size();i++)
        data[i] -= key[i%key.size()];
}

그러나 약간의 Google 검색 후이 링크를 찾았습니다.

편집하다:

@ v.oddou에서 언급했듯이 서명 된 문자가 "정의되지 않은 동작"이라는 것을 기반으로 XOR을 사용하거나 서명되지 않은 문자로 캐스팅하면 더 안전하고 더 많은 플랫폼 코드가 생성됩니다. 이 같은:

void encrypt(string& data,string key)
{
    for(unsigned i=0;i<data.size();i++)
        data[i] ^= key[i%key.size()];
}

void decrypt(string& data,string key)
{
    for(unsigned i=0;i<data.size();i++)
        data[i] ^= key[i%key.size()];
}

이것은 좋은 작은 방법처럼 보입니다 :), 내 목적을 위해 충분합니다. "키"와 관련하여 여기에서 추가 질문을하는 것이 궁금합니다. 허용되는 키는 무엇입니까? 긴 문자열을 전달할 수 있습니까?
dan369

그리고 당신은 알고 있습니다. 나는 단지 이것과 함께 갈 것이라고 생각합니다. 그것이 내가 원하는 것입니다. 간단하고 사용하기 쉽고 너무 멋진 것은 없습니다 :).
dan369

2
@ Danran 그렇습니다. 모든 것이 키에 허용됩니다. Caesar 암호 또는 원하는 다른 길이의 다른 문구와 같은 결과를 얻을 수있는 하나의 문자 문자열 일 수 있습니다 . 예를 들어, 다른 알고리즘을 사용하여 데이터 위치를 스크램블 할 수도 있습니다. 짝수 및 홀수 위치의 값을 바꿉니다.
Ali1S232

XOR처리하고있는 데이터 유형의 범위를 초과하면 데이터가 손상 될 수 있으므로 증가 / 감소 대신 사용 하는 것이 좋습니다 ( char내가 가정)
bummzack

2
xor를 사용하거나 데이터 복구를 증가 / 감소시키는 것은 중요하지 않습니다. 증가하는 generaees가 넘치면 나중에 decreament는 underflow를 생성합니다.
Ali1S232

24

안전한 클라이언트 측으로 간주 될 수있는 것은 없습니다. 당신에게 말하는 사람은 거짓말입니다.

원하는 암호화 및 스크램블 방법을 사용할 수 있지만 클라이언트도 해독 할 수 있어야하고, 사용자가 충분한 리소스를 가지고 있으면 해독 키 / 알고리즘에 액세스 할 수있는 클라이언트 자체에 액세스 할 수 있어야합니다.

당신은 그것을 기꺼이 깨달을 누군가에게 성가신 층을 추가 할 수 있지만 충분한 시간 주어지면 금이 것이고 , 그것에 대해 아무것도 할 수 없습니다.


26
당신이 말하는 것은 사실이지만, 저자는 "캐주얼 해킹"을 방지 할 방법을 명시 적으로 요청했기 때문에, 결정된 해커가 여전히 해킹 할 수 있다는 것을 알고 있습니다. :-\
loneboat

2
정확하게 판단되면 해커가 내 게임 데이터에 쉽게 액세스 할 수 있다는 것을 잘 알고 있습니다. 평범한 / 캐주얼 사용자가 단순히 파일을 열고 편집하기를 원치 않았습니다.
dan369

@ Danran : 좋아, 나는 그것을별로 좋아하지 않지만 일부 상황에서는 의미가 있다고 생각합니다. 나는 이것을 읽는 사람들에게 이것을 지적하는 것이 중요하다고 생각하기 때문에 대답을 삭제하지 않습니다.
o0 '.

2
또한 해킹할만한 가치가있는 것으로 판단되면 일반 사용자가 해킹 할 수 있도록 해킹 할 수 있습니다. 이를위한 포럼 전체가 있습니다.
Jesse Dorsey

@Noctrine :이 경우 적극적인 반응이 도움이 될 수 있습니다. 균열 도구가 열려있을 때 게임 주변의 커뮤니티를 알고 암호화 기술을 변경하고 패치를 해제하십시오. 게임에 온라인 구성 요소가있는 경우이 패치를 필수로 만들 수 있습니다. 물론 어떤 선수도 (그리고 확실히 저도 아닙니다) 처음부터 물건을 업데이트하도록 강요하는 것을 좋아하지 않으며, 연결이 필요하지 않습니다. (EA evil, simcity boo ...)
v.oddou

10

저장 파일은 암호화되지 않은 채로 둘 수 있지만 "보호"하려는 모든 값을 통해 계산 된 체크섬을 추가 할 수 있습니다.

따라서 크래커는 해싱을 재생산 할 수 있으며 (물론 적절한 소금과 함께 사용할 것임) 재생산을 시도하는 데 행복한 시간을 보낼 것입니다.

이것은 여전히 ​​100 % 안전하지는 않지만 아마도 가장 효과적인 솔루션 일 것입니다.


2

간단한 XOR 암호화를 제공했습니다.

#include <iostream>

using namespace std;

string encryptDecrypt(string toEncrypt) {
    char key[3] = {'K', 'C', 'Q'}; //Any chars will work
    string output = toEncrypt;

    for (int i = 0; i < toEncrypt.size(); i++)
        output[i] = toEncrypt[i] ^ key[i % (sizeof(key) / sizeof(char))];

    return output;
}

그리고 그것을 사용하는 방법 :

int main(int argc, const char * argv[])
{
    string encrypted = encryptDecrypt("kylewbanks.com");
    cout << "Encrypted:" << encrypted << "\n";

    string decrypted = encryptDecrypt(encrypted);
    cout << "Decrypted:" << decrypted << "\n";

    return 0;
}

이 코드의 출력은 다음과 같습니다.

Encrypted: :=.43*-:8m2$.
Decrypted:kylewbanks.com

0

여기 당신을 도울 수있는 몇 가지 프로그램 (무료 프로그램)이 있습니다. 둘 다 기본적으로 모든 리소스를 단일 exe로 결합합니다.

  • 현재 상용 제품인 NBinder 는 오래되었지만 기능적인 버전입니다.

  • 유사한 기능을 가진 또 다른 도구 인 Enigma Virtual Box

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