다음을 통해 공유


기본 DRM 및 라이선스 확인

Microsoft Store 라이선스 시스템은 Microsoft Store를 통해 배포된 게임이 시작될 때 라이선스를 확인합니다. 직접 소유권, 공유 라이선스 또는 디스크 라이선스(Xbox 콘솔만 해당)를 포함하여 제품에 대한 유효한 라이선스가 사용자에게 없는 경우 OS에서 게임이 시작되지 않습니다. 그러나 PC에서는 사용자가 유효한 라이선스를 확보한 이후 손쉽게 콘텐츠를 해독하여 Microsoft Store 외부에서 실행하고, 다른 사람들과 공유하여 Microsoft Store 라이선스 시스템을 우회할 수 있습니다. 따라서 이러한 동작으로부터 PC 게임을 보호하려면 기본 라이선스 확인을 추가하는 것이 좋습니다.

DRM(디지털 권한 관리) 보호 수준

PC에서 Microsoft Store 라이선스 시스템은 가장 기본적인 공격만 방지합니다. 보호가 필요한 콘텐츠의 경우 이에 전적으로 의존하지 않는 것이 좋습니다. 다음은 더욱 지능적인 공격으로부터 좀 더 안전하게 보호할 수 있는 몇 가지 단계입니다.

  1. 게임 시작 시 게임이 시작된 라이선스 확인
  2. 게임의 라이선스 확인에 대한 변조 방지
  3. 라이선스 토큰을 사용하여 서비스 쪽 라이선스 확인

기본 라이선스 확인

최소한 DRM 보호가 필요한 모든 게임에 대해 기본 라이선스 확인을 추가하는 것이 좋습니다. 다음 코드 예제에서는 다른 게임 런타임 관련 API 호출을 사용하지 않는 경우에도 이러한 확인을 수행하는 기본 구현을 보여 줍니다. 시작 경로에 코드를 추가하고 라이선스 확인이 실패했을 때 표시할 특정 UI만 추가하면 됩니다.

void CALLBACK LicenseCheck(XAsyncBlock *async)
{
    XStoreGameLicense license;
    HRESULT hr = XStoreQueryGameLicenseResult(async, &license);
    if (SUCCEEDED(hr))
    {
        if (!license.isActive)
        {
            // Failed to retrieve a license
            // Consider the title to be unlicensed
        }
        else
        {
            if (license.isTrial)
            {
                // Validated that the user has a trial license
                // Check additional attributes to ensure active trial
                // See "Implementing Trials for your game"
            }
            }
            else
            {
                // Validated that the user has a real license
                // Consider the title to be licensed and continue
            }
        }
    }
    else
    {
        // Failed to retrieve a license
        // Consider the title to be unlicensed
    }

    delete async;
}

void CheckLicense()
{
    auto async = new XAsyncBlock{};
    async->context = this;
    async->queue = m_asyncQueue;
    async->callback = LicenseCheck;

    HRESULT hr = XStoreQueryGameLicenseAsync(
        storeContext,
        async);

    if (FAILED(hr))
    {
        // StoreContext may be invalid
        // If loose deployed or side-loaded package, check that the game configured to be licensed
        // See "Enabling XStore development and testing"

        delete async;
    }
}

타사 변조 방지

위의 기본 라이선스 확인도 몇 가지 방지 기능을 제공하지만 일반적으로 공격자는 이러한 확인을 우회하도록 게임 실행 파일을 수정하여 이러한 유형의 방지를 우회할 수 있습니다. 따라서 게임을 보호하는 다음 단계는 타사 변조 방지 제품을 사용하여 이러한 유형의 공격을 방지하는 것입니다. GDK PC 게임에 사용 가능한 옵션이 있습니다. 이 방지를 게임에 통합하는 방법에 대한 자세한 지침은 타사 공급업체에 문의해야 합니다.

서비스 쪽 라이선스 확인

변조 방지는 출시할 때 타이틀을 잘 보호하지만 결국 대부분은 우회할 것입니다. 한 단계 더 나아가 온라인으로 진행하는 게임에서는 서비스 쪽 라이선스 확인을 수행하여 많은 클라이언트 쪽 공격을 차단할 수 있습니다. 자세한 내용은 라이선스 토큰 개요를 참조하세요.

기본 개요는 다음과 같습니다.

  1. 게임 서비스는 게임 클라이언트에서 라이선스 토큰을 요청하고 고유한 요청임을 나타내는 게임 서비스 생성 GUID를 포함합니다.
  2. 그러면 클라이언트에서 클라이언트 API XStoreQueryLicenseTokenAsync를 호출합니다.
  3. 그러면 라이선스 서비스가 호출되고 게임에서 해당 사용자에게 라이선스를 반환해야 하는지 여부를 결정합니다.
  4. API에서 유효한 라이선스를 얻을 수 있으면 서비스에서 제공한 세션 식별자를 포함하는 서명된 라이선스 토큰이 반환됩니다.
  5. 그러면 클라이언트는 라이선스 토큰을 게임 서비스로 다시 전달합니다.
  6. 게임 서비스는 서명의 유효성을 검사하여 라이선스가 Microsoft Store에서 제공되고 수정되지 않았는지를 확인합니다.
  7. 그런 다음, 게임 서비스는 세션 GUID가 1단계에서 클라이언트에 전달된 GUID와 일치하는지 확인합니다.
  8. 그런 다음, 게임 서비스는 토큰의 라이선스 정보가 유효함을 신뢰할 수 있습니다.

이 기술은 온라인에서만 작동하며 게임이 자체 서비스를 제공해야 합니다. 이 기술은 현재 제공되는 가장 높은 수준의 보호 기능을 제공합니다.

참조

PC 지원 타이틀에 대한 상거래 관련 정보

게임용 제품 공유 모델

라이선스 토큰 개요

상거래 개요

XStore API 참조