CD 키 / 일련 번호로 게임을 어떻게 보호합니까?


25

그래서 나는 불법 또는 생성, 복제 또는 금지 된 CD로 클라이언트를 연결 해제하여 XNA 게임의 불법 복제 된 사본이 공식 게임 서버에 액세스하지 못하게하기로 결정했습니다 (중도 자이므로 게임 비용을 지불 한 사람들이 최상의 경험을 얻습니다) 키 (또는 게임이 디지털이고 CD가 없기 때문에 일련 번호).

일련 번호 보호 시스템을 내 게임 (클라이언트 및 기본 인증 서버 모두)으로 가져 오면 쉽게 해킹 할 수 없습니까?


나는 그런 종류의 소프트웨어를 잘 보호 해본 경험이 없다.

나는 전에 이것을 한 적이 없지만 기본 사항을 이해합니다. 클라이언트에서 키 검사를 수행 할 수없는 이유를 알고 있으므로 일회성 키 입력으로 로그인 / 패스 인증을 사용하는 것이 좋습니다.

현재이 보호의 목표는 잠재적 인 사기꾼을 방해하고 플레이어를 방해하는 행동을 공식 서버에서 차단하는 것입니다. 키를 사용하거나 사용하지 않고 개인 서버에서 누구나 게임을 즐길 수 있지만 다른 플레이어와 바람직하지 않은 경험을 할 가능성이 더 큽니다. 공식 서버에서 플레이하려면 온라인 상태 여야하기 때문에 플레이어를 구매하는 것이 쉬울 것 같습니다.

클라이언트 해킹이 너무 쉬우므로 초기 등록 (및 서버 측 인증) 절차 만 보호하므로 전송되는 동안 아무도 키를 훔칠 수 없습니다.


참조 :

멀티 플레이어 게임은 인증을 어떻게 처리해야합니까?


누군가가 투표를 거부하면 적어도 질문에 무엇이 잘못되었는지에 대한 의견을 기대합니다. 여러분, 저의 질문이 좋으면서 저보다 더 많은 사람들을 돕고 싶습니다.
user1306322

4
DRM 추가에 대한 자동 반응이라고 생각합니다. 이 유형은 특별히 나쁘지는 않지만 Spore가 Windows 설치를 차단 한 경우와 같이 많은 경험이 있습니다.
이즈 카타

CD 키 대신 사용자 이름 / 암호를 사용하여 로그온하고이를 사용하여 사용자를 인증하는 MMO 유사 / 마인 크래프트 유사 접근 방법을 고려 했습니까?
Tetrad

4
.NET 앱에서 DRM을 원하십니까? 이것은 리플렉터와 같은 도구로는 결국 실패합니다. Terraria를 살펴보십시오. 불법 복제로 인해 개발이 중단되었으며 많은 수익이 발생했습니다. @Tetrad의 인증 기반 아이디어는 사람들이 유효성 검사 기능을 패치하지 않아도되므로 아이디어를 좋아합니다. 모든 데이터를 서버에 보관하고 로그인에 성공하면 데이터를 제공하십시오. 데이터를 로컬에 보관하면 인증 기능을 패치 할 수 있습니다.

2
@Anko는 유명한 인용문 인 "우리는 더 많은 미네랄이 필요합니다"를 언급했습니다 . 그리고 사실과 전문 지식을 의미합니다. 아마도 세부 사항 일 수도 있습니다. 중요한 문제가 언제 충분히주의를 기울여야하는지 알지 못했을 것입니다. 추가 할 내용이있는 것처럼 느껴졌으며 사이트 방문자가이 주제에 흥미를 느끼고 (아마도 새로운 사용자가 될 수 있음), 현상금을 높였습니다.
user1306322 2016 년

답변:


24

기본적으로 세 가지 요구 사항이 있습니다.

  1. 여러 클라이언트 인스턴스에 동일한 키를 사용하는 것은 쉽지 않습니다.
  2. 유효한 새 키를 생성하기 쉽지 않아야합니다.
  3. 합법적 인 고객의 열쇠를 훔치기가 쉽지 않습니다.

첫 번째 부분은 매우 간단합니다. 두 명의 플레이어가 같은 키를 사용하여 같은 서버에 동시에 로그인하지 못하게하십시오. 서버가 로그인 한 사용자에 대한 정보를 교환하거나 공유 인증 서버에 접속하도록하여 서로 다른 서버의 다른 플레이어에 대해 동일한 키를 사용하더라도 동시에 실패 할 수 있습니다. 또한 의심스러운 키 사용 패턴을 찾아보고 키가 누출 된 것으로 확인되면 금지 된 키 목록에 추가하십시오.


두 번째 부분의 한 가지 방법은 모든 유효한 발급 키의 데이터베이스를 유지 관리하는 것입니다. 키가 충분히 길고 (예 : 128 비트 이상) 무작위로 (보안 RNG를 사용하여) 선택하는 한 유효한 키를 추측 할 수있는 사람은 기본적으로 0입니다. (실패한 로그인으로 실패한 로그인 시도에 일종의 속도 제한을 사용하여 무차별 강제로 유효한 키를 찾으려고 시도하는 경우 훨씬 더 짧은 키도 안전 할 수 있습니다.)

또는 고유 식별자를 사용하고 비밀 마스터 키를 사용하여 계산 된 메시지 인증 코드 (예 : HMAC )를 추가하여 키를 생성 할 수 있습니다 . 다시 말하지만, MAC이 충분히 길다면 마스터 키를 모르는 사람이라면 누구나 ID에 대해 유효한 MAC을 추측 할 가능성은 무시할 수 있습니다. 이 방법의 한 가지 장점은 키 데이터베이스의 필요성을 제거하는 것 외에도 식별자가 고유 한 문자열 일 수 있으며 키가 발행 된 클라이언트에 대한 정보를 인코딩 할 수 있다는 것입니다.

MAC 사용의 한 가지 문제점은 공식 게임 서버 (또는 최소한 인증 서버)가 MAC을 확인하기 위해 마스터 키를 알아야한다는 것입니다. 즉, 서버가 해킹되면 마스터 키가 유출 될 수 있습니다. 이 위험을 완화하는 한 가지 방법은 다른 마스터 키를 사용하여 각 ID에 대해 여러 개의 MAC을 계산하는 것이지만 마스터 서버 중 하나만 게임 서버에 저장하는 것입니다. 이렇게하면 해당 마스터 키가 유출되어 가짜 ID를 생성하는 데 사용 된 경우이를 취소하고 다른 마스터 키로 전환 할 수 있습니다. 또는 MAC을 디지털 서명으로 대체 할 수 있으며 마스터 키의 공개 절반 만 사용하여 확인할 수 있습니다.


세 번째 부분의 한 가지 방법은받는 사람이 실제로 합법적 인 공식 서버인지 확인하지 않고 클라이언트가 다른 사람에게 키를 보내지 않도록하는 것입니다. 예를 들어, 로그인 프로세스에 SSL / TLS (또는 DTLS )를 사용하고 게임 서버에 대한 사용자 지정 인증서를 발급하며 클라이언트가 발급 한 클라이언트 신뢰 인증서 만 가질 수 있습니다. 편리하게도 TLS를 사용하면 공용 WLAN 등의 도청으로부터 클라이언트 키 (및 기타 인증 데이터)를 보호 할 수 있습니다.

불행히도이 방법은 타사 서버가 원하는 경우에도 클라이언트 키를 확인할 수 없습니다. 타사 게임 서버가 사용할 수있는 공식 인증 서버를 설정하여 (예 : 클라이언트가 인증 서버에 로그인하여 서버에 로그인하는 데 사용할 수있는 임의의 일회용 토큰을 받음)이 문제를 해결할 수 있습니다. 게임 서버 (토큰을 인증 서버에 제출하여 확인)

또는 실제 클라이언트 인증서 또는 이와 유사한 인증서를 클라이언트에 발급 할 수 있습니다. 클라이언트 인증서 인증 (권장)을 지원하는 기존 프로토콜 (TLS와 같은)을 사용하거나 다음과 같이 고유 한 프로토콜을 구현할 수 있습니다.

  • 클라이언트 인증서는 임의의 ID 문자열, 공개 / 개인 키 쌍 및 마스터 키를 사용하는 ID 및 공개 키의 디지털 서명으로 구성됩니다.
  • 로그인하기 위해 클라이언트는 자신의 ID, 공개 키 및 서명을 보냅니다. 서버는 클라이언트가 개인 키로 서명하고 (키를 알고 있음을 증명하기 위해) 서버에 서명을 보내는 고유 한 챌린지 문자열 (바람직하게는 서버 ID 및 클라이언트가 확인해야하는 타임 스탬프를 포함)으로 응답합니다.
  • 서버는 두 가지 서명을 모두 검사하여 ID + 공개 키가 합법적 인 클라이언트 키를 형성하고 (마스터 키로 서명 했으므로) 클라이언트 키가 실제로 클라이언트에 속한다는 것을 증명합니다 (클라이언트가 개인과의 서버 챌린지에 서명 할 수 있으므로) 키).

(이 프로토콜은 클라이언트가 서버 ID와 타임 스탬프로 구성된 "도전"을 생성하고 서명함으로써 더 단순화 될 수 있습니다. 물론 서버는 ID와 타임 스탬프가 유효한지 확인해야합니다. 이 간단한 프로토콜만으로도 중개인 공격자가 클라이언트 세션을 가로채는 것을 막을 수는 없지만 향후 로그인에 필요한 클라이언트의 개인 키를 얻을 수는 없습니다.)


2
하나의 사소한 점-완전히 임의의 키는 최대 키 공간을 제공하지만 발급 된 키 데이터베이스에 대해 유효성을 검사하는 경우 완벽하게 작동 할 수 있습니다. 서버에 부딪 치기 전에 대부분의 잘못된 유형이 발견되도록 키 자체에 약간의 유효성 검사를 추가하십시오.
Loren Pechtel

@LorenPechtel은 키의 사용자 친화성에 대해 강점이 있다고 생각합니다. 유료 사용자는 실수로 서버에 '잘못 입력 / 철자 실수'(오타) 키를 입력하고 보내는 것이 항상 가능합니다.
비슈누

@Vishnu 나는 키를 입력하는 사용자로 알고 있는데, 더 긴 키를 입력하더라도 그룹 당 몇 가지 검사 정보를 선호합니다.
Loren Pechtel

16

100 % 절약은 없지만 다소 간단한 방법으로 시작할 수 있습니다.

  • 생성 된 키 (예 : 포함 된 체크섬)를 확인하는 방법이 필요합니다. 물론 이것은 이해하기 쉽지 않아야합니다.

  • 선택 사항이지만 (권장되는) 서버 측 데이터베이스가있어 모든 주어진 키의 데이터베이스로 키를 확인하므로 알고리즘이있는 경우에도 키를 생성 할 수 없으므로 (무차별 무시).

거기에서 두 가지 다른 접근 방식을 사용할 수 있지만 두 가지 방법 모두 매우 중요합니다.

  • 클라이언트 측에서 키를 확인하지 마십시오. 실제로 .net / XNA로 작성된 내용을 디 컴파일하기가 다소 쉬우므로 매우 중요합니다. 키를 요청하거나 전달해야하는 경우 (로그인 또는 등록) 키를 해시 (소금 추가 등)로 해시하여 서버로 보냅니다.

실제 경로는 다음과 같습니다.

  • 인증 / 로그인 절차 중에 해시 키 (위 참조)를 보내야합니다.

  • 대안으로 (IMO가 더 좋은 방법이지만 많은 사람들이 이런 종류의 "DRM"을 좋아하지는 않지만) : 클라이언트에서 키를 전혀 사용하지 마십시오. 대신 사용자가 계정에 로그인하고 계정을 만들려면 유효한 CD 키 (위에서 언급 한 데이터베이스가 필요함)가 필요합니다. 이것은 유료 게임 MMORPG와 같은 최신 게임이이를 처리하는 방법입니다.

개인적으로 간단한 이유 때문에 계정 접근 방식을 사용합니다. 결국 사람들이 CD 키를 훔치는 것을 막을 수는 없습니다 (브 루트 포스, 리버스 엔지니어링 또는 스캠). 따라서 사람들은 새로운 키를 만들어 계속 플레이하거나 다른 사람을 게임에서 잠글 수 있습니다. 계정 바운드 키를 사용하면 아무도 이미 사용중인 키로 아무것도 할 수 없습니다. 누군가 다른 사람이 생성 한 키를 구입 한 경우에도 충분한 증거가 있다고 가정하면 계정 소유권을 이전 할 수 있습니다.


2
표준 체크섬 대신 암호화 보안 해싱 알고리즘을 사용해야합니다. 개인 키를 서버에 유지하고 클라이언트에 공개 키를 제공하면 서버에 액세스하지 않고도 시스템이 안전하다는 것을 알 수 있습니다.
Adam

@Adam : 암호로 안전한 해싱 알고리즘을 사용하면 공격자가 유효한 키를 생성 할 수 없지만 합법적 인 키를 전달하는 기관은 문제를 해결할 수 없습니다. 실제로 간단한 체크섬은 안전하지 않지만이 컨텍스트에서는 단방향 기능을 사용할 수 없습니다.
Marcks Thomas

예를 들어, 키의 첫 번째 부분을 임의의 문자 조합으로 만들고 두 번째는 해시로 만들 수 있습니다. 게임을 판매하는 사람은 키겐을 사용할 수 없었습니다 (키의 일부인 "공급 업체 ID"와 같이 충돌 / 충돌이 발생하지 않도록하는 방법이 없다면).
Mario

1

여러 Mac 게임을 제작 한 Pangea Software는 현재 무료 게임 개발 책에서 복제 방지에 관한 주제를 작성했습니다. 이 책은 또한 불법 복제 된 키 및 사람들이 사용하는 다른 핵을 다루는 방법을 설명합니다. 이 책은 Mac 게임 개발에 중점을두고 있지만 다른 플랫폼에도 유용 할 수 있습니다. 이 책에는 각 장의 소스 코드가 포함되어 있으며 아래 다운로드의 일부입니다. 복사 방지와 관련된 소스 코드 (C로 작성)도 있습니다.

이 책은 여기에서 다운로드 할 수 있습니다 .


그 책에서 유용한 것을 찾을 수 없었습니다.
user1306322

개인적으로 16 장에 유용한 팁이 있지만 YMMV가 있습니다.
Wolfgang Schreurs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.