데이터 번들 / 암호화를 위해 무엇을 사용합니까?


14

점점 더 많은 게임이 데이터 중심 경로로 가고 있습니다. 즉, 조작하기 쉬운 보안 계층이 필요합니다. 게임이 자산 (오디오, 아트, 데이터)을 완전히 묶는 곳을 보았는데 어떻게 관리하고 있는지 궁금합니다. 자산을 번들로 묶고 관리 할 수있는 응용 프로그램 / 라이브러리가 있습니까? 그렇지 않은 경우 포장 / 포장 풀기 / 암호화에 대해 지적해야 할 리소스가 있습니까?

이 특정 질문은 C ++을 중심으로하지만 C # / XNA에서 어떻게 관리되는지 들어 볼 수 있습니다.

명확하게 말하면 해킹을 방지하는 솔루션을 설계하지는 않습니다. 기본적으로 우리는 모두 0과 1을 조작합니다. 그러나 우리는 게임을하는 사람들의 99 %가 단순히 게임 세계를 구축하는 데 사용되는 XML 파일을 수정하지 못하도록하고 싶습니다. 많은 게임이 모든 리소스를 묶는 것을 보았습니다. 나는 그들이 사용하는 방법에 대해 궁금합니다.


좋은 질문, 내가 그것을 100 % 보호 할 수있는 방법이 있다고 믿지 않는 동안, 나는 그것을 압축하고 난독 화하는 깔끔한 방법이 있다고 믿습니다. 그리고 그것에 대해 더 알고 싶습니다 ...
Prix

아트 / 오디오 자산이 "민감한"것으로 간주되어야하는지에 대한 의문의 여지가 있습니다. 건전한 모드 커뮤니티를 지원하기 위해 많은 게임이 의도적으로 자산을 플레이어에게 노출하여 게임에 더 많은 가치를 부여 할 수 있습니다 (실제로 개발자에게도 비용이 들지 않음).
Ian Schreiber

주로 데이터 중심 게임 (예 : xml 파일)을 구동하는 민감한 데이터에 관심이 있습니다. 방금 게임이 모든 것을 하나 또는 두 개의 파일로 묶는 것을 보았습니다.
David McGraw

4
플레이어들이 그 데이터를 가지고 놀 때 무엇이 ​​문제입니까?
jsimmons

답변:


8

좋은 전략은 아카이브 형식을 처음부터 새로 작성하고 아카이브에 전체 순차 파일을 저장하는 대신 데이터 청크를 가리키는 테이블을 사용하여 색인화 된 형식으로 만든 다음 LZMA /를 사용하여 인덱스 테이블을 암호화하고 모든 청크를 별도로 압축하는 것입니다. Bzip2.

또 다른 접근법은 여기저기서 약간의 절차 적 데이터 생성기를 사용하는 것입니다. (원하는 경우 추가 측정으로 온라인 서버에서 해당 생성기에 대한 '파라미터'를 얻을 수도 있습니다) 일부 작업을 오프로드하여 GPU에서 전체 메모리 덤프를 방지하고 손실 된 성능을 보완 할 수도 있습니다.

그러나 나는 일반적으로 성능과 낭비 개발 시간을 방해하는 이러한 기술을 발견하는 동시에 최종 사용자에게 아무것도 제공하지 않고 잠재적 인 문제와 불필요한 버그를 제공합니다.

그럼에도 불구하고 100 % 안전한 것은 없습니다.


이것을 위해 +1. 압축은 난독 화의 필요성을 모두 충족 시키며 로딩 시간과 앱 설치 공간을 향상시킵니다. 데이터의 아카이브 / 패킹에는 어쨌든 추상화 계층이 필요하므로로드 / 압축 해제 할 수있는 것과 결합하는 것이 너무 많은 엔지니어링이되어서는 안됩니다. 압축을 사용하는 경우 압축 / 압축 해제 논리를로드 / 아카이브 항목과 별도로 유지해야합니다. 이렇게하면 나중에 더 나은 알고리즘으로 교체 할 수 있으며 필요한 인프라는 알고리즘간에 변경되지 않습니다.
MrCranky

@MrCranky : EA가 .package (DBPF) 아카이브 형식 (SPORE 및 The Sims 게임에서 사용)을 사용하여 EA가 수행하는 방식을 살펴보면 실제로이 동작을 볼 수 있습니다. 엔진에는 인덱스 테이블에 "압축 유형"에 대한 추가 필드가 있으며, 어떤 알고리즘을 사용할 것인지에 대한 내부 코드가 있습니다. 청크 유형에 따라 다른 압축 알고리즘을 사용합니다 (예 : 텍스트 청크는 특수 압축을 사용합니다). 사용하는 버전 관리 시스템은 모드 통합 및 이전 버전과의 호환성도 허용합니다. DBPF 형식에 대한 자세한 내용은 다음을 참조하십시오 : simswiki.info/DatabasePackedFile
voodooattack

흥미로운 것들 : 컴파일 타임에 #define으로 만 해왔지만 런타임은 몇 가지 좋은 가능성을 열어줍니다 (예 : 게임의 모든 파일을 다시 만들지 않고도 압축 유형을 변경할 수 있음).
MrCranky

11

민감한 데이터를 배송하지 마십시오.

게임 만 액세스 할 수 있도록 암호화 된 데이터를 배송 할 방법없습니다 . 정말 열심히 노력할 수는 있지만 DRM 문제에 신속하게 대처할 수 있습니다.

게임 자산을 눈에 띄지 않게하려면

  1. 그것을 압축
  2. xor 파일
  3. 확장 기능을 지루한 것으로 바꾸십시오 (즉 my_level.zip.xor, 사용 하지 마십시오 my_level.map).

이는 허위 사용자의 95 %를 중지시킵니다. 다른 5 %는 당신이 무엇을하든 얻을 것입니다.
실제로 압축 할 필요는 없습니다 xor. lzma 대신 알려진 키로 AES를 사용할 수 있습니다. 요점은 그것에 많은 시간을 소비하지 않는 것입니다.


그게 내가 보통 대부분의 게임에서 볼 수있는 것입니다 ... 쿠키.
Prix

2
실제로 zip + rename만으로 충분할 것입니다.
coderanger

1
나는 그렇게 생각하지 않는다. 나는 그것을 That will stop 95% of mischeivieous users.깨뜨리는 것을 좋아한다. 나는 실제로 그것을 얻는 사람들이 여전히 있다고 생각한다. 요즘 대부분의 10 살짜리 아이들은 메모장에서 파일을 열고 이름을 바꾸는 방법을 알고 있습니다.
Prix

1
어떻게하는지 알아 신경 쓰지 않겠어요
coderanger

zip + 이름 바꾸기로는 충분하지 않습니다. 리눅스는 파일 형식을 결정하기 위해 파일 확장자를 거의 사용하지 않습니다. 대신 처음 몇 바이트를보고이를 사용하여 유형을 결정합니다. 이름이 바뀐 zip은 Linux에서 여전히 zip으로 표시됩니다. Windows XP는이 작업을 수행하지 않으며 여전히 확장명을 사용합니다. Windows7이 어떻게 작동하는지 모르겠지만 앞으로 Windows에서 비슷한 기술을 사용할 것으로 기대합니다.
deft_code

4

이것에 많은 시간을 소비하는 것은 어리석은 일입니다. GPU에서 직접 텍스처 및 모델 데이터를 가져 오는 도구가 있으며 가상 루프백 장치에서 사운드를 쉽게 가리킬 수 있습니다. 진정으로 안전해야하는 것은 서버에 있어야하며 챌린지 / 응답을 통해서만 작동해야합니다. 클라이언트 데이터 유효성 검사는 Valve의 -verify_all과 같은 또 다른 이야기입니다. 로컬 실행 파일을 실행하여 신뢰할 수 없기 때문에 (또는 적어도 엔드 포인트 치트 방지 시스템을 신뢰하는 것 이상으로 신뢰할 수는 없습니다. 어리석은 생각입니다).


4

내 직업은 탬 퍼링 방지 소프트웨어입니다. 나는 구식 게임 크래커 인 누군가를 안다. 그는 숨쉬는 것과 같은 게임을한다. 당신은 그와 같은 사람들을 막을 수 없습니다. 게임이 충분히 인기가 있다면, 게임의 여러 크랙 버전은 사용자가 무엇을하든 출시 후 며칠 후에 토렌트 사이트에 충돌합니다. 내 충고는이 리버스 엔지니어링을 찌르기를 원할 것이라고 생각하는 평균 조를 막기 위해 최소한의 노력을 기울이는 것입니다.


1
그것이 목표입니다. 나는 해커와 싸우고 싶지 않다.
David McGraw

1

좋은 질문이지만 대답하기 쉽지 않습니다.
데이터 보안에 대한 나의 경험에서 다음에 대해 생각해야합니다.

1) 데이터가 안전하지 않은 경우 보안 대상은 누구이며, 그 영향은 무엇입니까-보안은 체계적인 기술 솔루션보다 위험 평가에 훨씬 더 중요합니다.
2) 귀하의 플랫폼이 데스크톱 (예 : Windows / OSX)이라고 가정합니다. 커널 수준 보안에 대한 자체 시도가있는 PS3 / Xenon과 같은 독점 하드웨어와는 다른 문제 공간 (이는 유효한 솔루션인지 토론 가능)
3) 암호화! = 보안. 암호화는 데이터가 될 수 없음을 보장 읽기 , 그것은 데이터가 될 수 없음을 보장하지 않습니다 기록 또는 재생이 / 프록시.

데이터 변조 방지 요구 사항을 충족해야하는 경우 데이터 해싱 에 대해 고려해야 합니다 (SHA-256 또는 SHA-512를 사용하는 것이 좋습니다). 체계.
또한 제품에 암호화 기술을 추가 하면 수출 제한 (암호화 기술이 제한된 무기 등급 기술로 분류 됨)으로 인해 법적 영향을 미칠 있으므로 이러한 법적 문제를 극복 한 라이브러리를 사용하는 것이 좋습니다.
마지막으로, 절대 자신 만의 암호화 기술을 사용하지 마십시오. AES, Blowfish, RSA 등과 같이 잘 알려져 있고 문서화되고 연구 된 알고리즘을 사용하십시오.

ps 공개 / 개인 키는 대량의 데이터를 암호화하는 데 적합하지 않거나 실용적이지 않으므로 DRM / PGP 등은 하이브리드 RSA + 대칭 시스템을 사용합니다 즉, RSA로 대칭 키를 보호 한 다음 해당 키를 사용하여 표준 대칭 암호화를 수행합니다.

그것은 매우 큰 복잡한 주제이며 나는 분명히 그것을 정의하지 않았습니다.

희망이 도움이


1

작고 (압축 가능하며) 엄청나게 안전하고 유연하도록 디자인되고 제작 된 (아마도 오버 엔지니어링 된) 형식의 예를 원한다면 블리자드의 MPQ 형식을 살펴 봐야합니다.

http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format

일반적인 아카이브 레이아웃은 다음과 같습니다.

아카이브 헤더 파일 데이터 파일 데이터-특수 파일 해시 테이블 블록 테이블 확장 블록 테이블 강력한 디지털 서명

이 형식에는 모든 것이 있습니다. 차단 가능, 확장 차단 가능, 데이터를 섹터로 분할 (쉽게 스트리밍 가능), 임의로 결합 할 수있는 7 (!) 압축 알고리즘 (사운드 압축을 계산하는 경우), 약한 디지털 서명, 강력한 디지털 서명 등을 지원합니다.

파일 아키텍처를 다루는 블리자드에서 API를 구입하면 필요한 모든 것을 얻을 수 있습니다.


링크에 대한 감사합니다, 나는 MPQ의 세부 사항에 더 많은 볼 생각하지 않을 것 (일반적으로 그들이 사용할 수있을 거라고 가정)

그것이 매우 안전하다면, 왜 그런 정도까지 리버스 엔지니어링되었으며 타사 라이브러리와 상호 작용할까요? ;-)
coderanger

* .mpq 파일과 상호 작용하는 대부분의 (읽기 : 모두) 도구는 한 사람이 작성하고 유지 관리하는 Stormlib에 따라 다릅니다.

내가 아는 한, Stormlib은 암호 해독 키가 실행 파일에 저장되어 있기 때문에 아카이브에서 유래 한 원래 게임이 필요합니다. 그러나 이것이 가장 안전한 이유는 침입이 불가능하기 때문이 아닙니다. 그러나 인터넷을 통해 전송되는 온더 플라이 데이터의 경우 그 누구에게도 뒤지지 않습니다. 데이터가 너무 많이 암호화되어 제 3자가 즉시 해독 할 수 없게됩니다.

실제로 'World of Warcraft'에서 블리자드는 스트리밍 기술을 개척하여 하드 드라이브에 다운로드 한 전체 데이터의 몇 퍼센트만으로 게임을 즐길 수 있습니다. * .mpq 형식은 이런 종류의 작업에 탁월합니다. 게임의 공식 출시 전 며칠 전 블리자드가 Starcraft 2 설치 프로그램을 출시했을 때 아카이브가 너무 많이 암호화되어 게임이 출시 된 후까지는 열 수 없었습니다. : P

0

이것이 최근에 부활되었으므로 귀하의 질문 (및 지금까지의 모든 대답)은 파일로드 만 처리하는 것처럼 보이며 파일을로드하려는 실행 파일만큼 안전합니다. PC에는 실제로 안전한 것은 없습니다 (사람을 지연시키는 것만). 서버의 항목을 검사 할 수는 있지만 그 검사조차 제거 할 수 있으므로 수정 된 exe가 무엇이든간에 실행될 수 있습니다. 콘솔은 여전히 ​​"꽤"안전하므로 대부분의 경우 중요한 파일의 해시를 생성 한 다음 개인 키로 해시에 서명하고 공개 키를 코드에 포함시키고 파일에 대한 보안 해시를 확인합니다.

나는 대화에 또 다른 공격을 던질 것이라고 생각했는데, 작년에 PC에 많은 것을 제공하지 않기 때문에 나는 만났다. 치트 엔진 은 거의 모든 프로그램을 사용할 수 있도록 해킹을 거의 자동화하는 매우 깔끔한 프로그램입니다. 그것은 사람들이 판매하는 것을 보았던 많은 해킹 / 속임수가 내가 본 것 (모든 대중 시장)에서 만들어 낸 것과 비슷한 방식으로 만들어졌습니다. 몇 가지 작업을 통해 이와 같은 것들로부터 다시 보호 할 수 있습니다. 게임의 인기와 누군가가 귀찮게 신경 쓰는지에 달려 있다고 생각합니다.

암호화 (C ++에서)에 대한 좋은 lib를 언급하는 것을 잊어 버렸습니다 .LibTomCrypt 입니다.

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