안티 치트 인터페이스

EOS 제품에 안티 치트를 구현하는 데 필요한 전제 조건, 네트워크 아키텍처, 플랫폼 컴포넌트 등에 대해 알아보세요.

9 분 소요

안티 치트 인터페이스는 EOS SDK 1.12 이상을 사용해야 합니다. 안티 치트 인터페이스는 Windows, macOS, ChromeOS, Linux 64비트 운영 체제를 지원합니다.

이지 안티 치트(Easy Anti-Cheat) 로도 알려진 안티 치트 인터페이스(Anti-Cheat Interface) 를 통해 온라인 멀티플레이어 플레이에서의 부정행위를 줄일 수 있습니다. 안티 치트 인터페이스는 게임 서버나 다른 게임 클라이언트로 검증할 수 있는 안티 치트 보호 모드에서 게임 클라이언트를 실행할 수 있는 툴을 제공합니다. 이러한 인터페이스는 디지털 저작권 관리(Digital Rights Management, DRM)나 코드 난독화 툴이 아니며, 완전히 오프라인에서 이루어지는 플레이나 솔로 플레이에는 유용하지 않습니다.

안티 치트 인터페이스는 두 종류의 보호를 제공합니다.

  • 치트 방지: 직접적인 방식으로 게임 프로세스 메모리를 읽고 쓰는 등의 일반적인 부정행위 기법을 수동적으로 방지함
  • 치트 탐지: 더 전문적인 방식으로 게임을 조작하는 계정을 식별하여 제재할 수 있도록 함

안티 치트 인터페이스를 사용하는 방법은 다음과 같습니다.

  1. 개발 전제 조건을 확인하고 준수합니다.
  2. 네트워크 아키텍처클라이언트 정책 유형을 결정합니다.
  3. 클라이언트 모듈, 안티 치트 무결성 툴, 안티 치트 부트스트래퍼 실행 파일을 구성합니다.
  4. (Windows만 해당) Windows 서비스 인스톨러를 구성합니다.
  5. 안티 치트 인터페이스를 게임 코드와 통합합니다.
    1. 연결 인터페이스로 사용자 ID를 만듭니다.
    2. 클라이언트-서버 또는 P2P 모드에 대한 콜백을 등록합니다.
    3. 보호된 세션 알림을 설정합니다.
  6. 통합 체크리스트를 통해 안티 치트 인터페이스가 정상 작동하는지 확인합니다.

개발 전제 조건

안티 치트 서비스가 효과를 발휘하려면 견고한 게임 기반을 바탕으로 실행되어야 합니다. 즉, 보안 모범 사례를 따르며 게임 문제 발생 시 적극적으로 해결할 수 있는 기반이 필요합니다.

게임 아키텍처

최대한 많은 게임 스테이트를 통제할 권한이 있는 전용 게임 서버를 사용하는 것이 좋습니다.

예를 들어 플레이어가 날거나, 순간 이동하거나, 매우 빠르게 움직일 수 있게 해주는 치트의 경우 보통은 플레이어 위치와 이동을 통제할 권한을 게임 서버에 제공하여 게임 아키텍처 레벨에서 완전히 방지할 수 있습니다.

게임 악용

플레이어가 게임 로직 오류, 버그 또는 특이 케이스를 종종 발견하고 이를 악용합니다. 그러나 안티 치트는 게임 코드가 작성된 대로 작동하는 것으로 이해하므로 이러한 문제를 해결할 수 없습니다. 게임 개발자는 개발을 진행하면서 새로운 악용 사례가 발견되는 대로 이러한 문제를 수정해야 합니다.

게임 레벨 안티 치트

여러분의 자체 개발팀은 게임별 세부사항에 대한 지식을 활용하여 게임 레벨에서 부정행위를 탐지하고 막을 수 있습니다. 치트 판매자의 표적이 되는 게임의 경우 소규모 개발팀을 두고 게임 문제를 해결하여 안티 치트 서비스를 보완하면 큰 도움이 됩니다.

플레이어 리포트

같은 게임 세션의 다른 플레이어가 부정행위를 한다고 생각할 때 이를 신고할 수 있는 리포트 인터페이스를 구현하는 것이 중요합니다. 플레이어 리포트는 각 게임의 안티 치트 보호 효과에 대한 유용한 컨텍스트와 피드백을 제공합니다.

플레이어 진행상황 관리

안티 치트 서비스는 프로그레션이 게임 서버와 나중에 동기화되는 오프라인이나 솔로 플레이 시나리오를 효과적으로 보호할 수 없습니다.

게임 네트워크 아키텍처

안티 치트 인터페이스는 다양한 게임 네트워크 아키텍처에 대해 다양한 모드를 지원합니다. 안티 치트 클라이언트(Anti-Cheat Client) 인터페이스는 이러한 게임 네트워크 각각을 지원하지만, 안티 치트 서버(Anti-Cheat Server) 인터페이스는 전용 서버(클라이언트-서버 모드)에 대해서만 작동합니다.

전용 서버(클라이언트-서버 모드)

권한 있는 게임 서버에서 이 모드를 사용하면 안티 치트 클라이언트 및 서버 인터페이스를 모두 구현할 수 있습니다.

네트워크 아키텍처의 클라이언트-서버 모드 커뮤니케이션 플로

개별 게임 서버 운영자는 네트워크 연결을 조작하거나 기타 방법을 사용하여 서버 내 안티 치트를 의도적으로 비활성화하거나 연결 해제할 수 있습니다. 이는 커뮤니티 운영 서버를 지원하는 게임에서 발생할 수 있는 위험입니다. 이러한 위험성을 완화하기 위해 '공식' 게임 서버와 '비공식' 게임 서버의 유저 인터페이스를 서로 다르게 할 수도 있습니다.

클라이언트 보호 세션은 게임 서버 호출과 일치시켜야 합니다. 그래야 클라이언트가 게임에 참여하기 직전에 EOS_AntiCheatClient_BeginSession 함수를 호출하여 게임 서버에서 EOS_AntiCheatServer_RegisterClient 함수를 호출하도록 트리거할 수 있습니다.

P2P 메시(P2P 모드)

각 게임 클라이언트가 다른 모든 게임 클라이언트와 네트워크 메시지를 교환하지만, 어떤 클라이언트도 완전한 게임 세션 권한이 없는 풀 메시 레이아웃에서 이 모드를 사용합니다.

네트워크 아키텍처의 P2P 모드 커뮤니케이션 플로

이 모드에서는 안티 치트 서버 인터페이스를 사용하지 않습니다. 대신, 각 플레이어가 안티 치트 클라이언트 인터페이스를 사용하여 다른 플레이어가 안티 치트 보호를 활성화했는지 검증합니다.

로컬 사용자와 같은 게임 세션에 참여하는 각 피어에 EOS_AntiCheatClient_RegisterPeer 함수를 호출합니다.

리슨 서버

싱글 플레이어가 게임 세션의 권한 있는 게임 호스트 역할을 하는 경우 P2P 모드나 클라이언트-서버 모드를 사용해야 합니다.

네트워크 아키텍처의 리슨 서버 모드 커뮤니케이션 플로

P2P 모드의 경우:

  • 권한 있는 게임 호스트 클라이언트는 각 플레이어를 피어로 등록하고 적절하게 데이터를 교환하여 게임 세션에 있는 모든 플레이어를 검증해야 합니다.
    • 제거 작업이 필요한 콜백이 피어에 트리거되는 경우 권한 있는 게임 호스트는 게임 세션에서 해당 플레이어를 추방해야 합니다.
  • 권한 없는 게임 클라이언트는 해당 특정 클라이언트를 피어로 등록하고 적절하게 데이터를 교환하여 게임 호스트 클라이언트만 검증해야 합니다.
    • 제거 작업이 필요한 콜백이 게임 호스트에 트리거되는 경우 권한 없는 클라이언트는 연결을 해제하고 적절한 오류 메시지를 표시해야 합니다.

클라이언트-서버 모드의 경우:

  • 보다 간단한 접근 방식이지만, 권한 있는 게임 호스트 클라이언트의 특권이 더 크고 이러한 권한을 남용할 우려가 있습니다. 특히 권한을 갖는 게임 호스트 클라이언트가 악의적이라면 안티 치트가 세션에서 작동하지 않도록 고의로 차단할 수 있습니다. 그 경우가 우려된다면 P2P 모드를 구현하세요.
  • 로그인한 로컬 플레이어가 EOS_AntiCheatServer_BeginSession 호출에 지정되어야 한다는 점을 제외하면 전용 서버와 동일하게 구현됩니다.

클라이언트 크리덴셜 및 정책 구성

안티 치트 인터페이스의 클라이언트 크리덴셜을 구성하는 경우 네트워크 아키텍처와 사용 사례를 고려합니다.

안티 치트 클라이언트 인터페이스의 경우 사전 정의된 GameClient 정책 유형을 사용해야 합니다. 게임 클라이언트에 대해 사용자 필수(User Required) 플래그를 항상 활성화해야 합니다.

안티 치트 서버 인터페이스와 신뢰할 수 있는 공식 서버만 사용하는 게임의 경우 사전 정의된 TrustedServer 정책 유형을 사용하고 크리덴셜을 비밀로 유지해야 합니다.

다음 정책 액션을 사용할 수 있습니다.

authenticateForLocalUser 필수 클라이언트 크리덴셜 보유자가 클라이언트-서버 모드나 P2P 안티 치트 클라이언트 모드를 사용하여 안티 치트 백엔드로 자체 인증할 수 있습니다.

authenticateForAnyUser 클라이언트가 클라이언트-서버 모드를 사용하여 리슨 서버를 호스팅하는 경우에만 이 정책 액션을 사용하세요. 클라이언트 크리덴셜 보유자가 안티 치트 서버 인터페이스를 사용하여 다른 사용자를 인증할 수 있습니다.

sendTrustedGamePlayDataForAnyUser 신뢰할 수 있는 공식 전용 서버에만 이 정책 액션을 사용합니다. 게임 클라이언트 또는 커뮤니티 호스팅 게임 서버에는 사용하거나 게시하지 마세요. 클라이언트 크리덴셜 보유자가 모든 사용자에 대한 안티 치트 게임플레이 데이터를 제출할 수 있으며, 변조 불가능한 신뢰할 수 있는 공식 전용 서버에서만 사용해야 합니다.

플랫폼 컴포넌트

안티 치트 인터페이스를 사용하려면 EOS SDK 패키지에 포함된 일부 바이너리를 게임 클라이언트에 배포해야 합니다. EOS SDK zip 파일에서 SDK > Tools > EOS_AntiCheatTools 로 이동합니다. dist 서브디렉터리에 있는 파일만 게임 클라이언트의 일부로 플레이어에게 배포해야 합니다. 다른 파일은 개발 전용이므로 배포해서는 안 됩니다. EOS SDK를 새 버전으로 업데이트할 때마다 사용 중인 플랫폼 컴포넌트 파일도 업데이트해야 합니다.

Windows

안티 치트 클라이언트는 64비트 Windows 버전만 지원합니다. 32비트 게임은 운영 체제 자체에 64비트 지원이 설치되어 있는 경우에만 지원됩니다.

컴포넌트파일명설명
서비스 인스톨러EasyAntiCheat_EOS_Setup.exe(필수) 안티 치트 Windows 서비스 설치, 복구 또는 제거에 사용됩니다.
안티 치트 부트스트래퍼start_protected_game.exe안티 치트를 준비하며 정상적인 안티 치트 클라이언트 보호하에 게임 프로세스를 시작합니다.
서비스EasyAntiCheat_EOS.exe안티 치트가 다른 컴포넌트를 초기화할 수 있게 해주는 Windows 서비스 실행파일입니다.

Windows 'dist' 서브디렉터리 구조

Windows 서비스 인스톨러

Windows의 경우 게임과 함께 설치하고 제거할 안티 치트 시스템 서비스를 구성해야 합니다. 이를 위해 게임을 설치하는 동안 Windows 사용자에게 관리자 권한이 필요하지만, 나중에 게임을 시작하는 데는 관리자 권한이 필요하지 않습니다. 안티 치트 보호 게임이 시작되면 안티 치트 부트스트래퍼가 자동으로 Windows 서비스를 시작합니다. 게임을 종료하면 Windows 서비스가 자동으로 중지됩니다.

구성
  1. 데브 포털에서 제품 ID를 얻습니다.
  2. 다음 명령을 실행하도록 인스톨러를 구성합니다.
    • EasyAntiCheat_EOS_Setup.exe install <내 제품 ID>
    • EasyAntiCheat_EOS_Setup.exe uninstall <내 제품 ID>
  3. 성공한 경우 이 명령의 프로세스 종료 코드는 0입니다. 프로세스 종료 코드가 0이 아니면 실패한 것입니다.
스토어별 전제 조건
에픽게임즈 스토어

제공된 에픽게임즈 스토어 문서를 참고하세요.

Steam

Steamworks Installscript 문서를 참조하세요. 일반적으로 서비스 설치 작업을 트리거하는 '실행 프로세스' 블록과 서비스 제거 작업을 트리거하는 '제거 시 실행 프로세스' 블록을 정의합니다.

Windows가 아닌 플랫폼에서는 Steam Installscript 기능을 사용하지 못할 수도 있습니다.

Mac

컴포넌트파일명설명
안티 치트 부트스트래퍼start_protected_game.app안티 치트를 준비하며 정상적인 안티 치트 클라이언트 보호하에 게임 프로세스를 시작합니다.

Mac dist 서브디렉터리 구조

Linux

컴포넌트파일명설명
안티 치트 부트스트래퍼start_protected_game안티 치트를 준비하며 정상적인 안티 치트 클라이언트 보호하에 게임 프로세스를 시작합니다.

Linux dist 서브디렉터리 구조

Linux Wine/Proton 지원

Wine이나 Proton의 호환성 레이어를 이용하여 Linux에서 여러 Windows 게임을 실행할 수 있으며, 이때 안티 치트 클라이언트의 보호 기능으로 해당 구성을 지원할 수 있습니다. 게임에서 이 지원을 활성화하려면 SDK 1.14 버전 이상을 사용하고, Linux 플랫폼에 대한 클라이언트 모듈을 활성화해야 합니다.

Wine이나 Proton으로 게임을 실행할 때 Linux의 클라이언트 모듈을 사용하므로 Windows뿐만 아니라 Linux의 클라이언트 모듈 업데이트도 주기적으로 테스트하고 활성화해야 합니다.

콘솔 지원

콘솔 플랫폼은 일반적으로 하드웨어 보안 기능을 활용하여 임의 코드 실행을 방지합니다. 임의 코드 실행을 방지하는 것은 대부분의 치트 유형에 대응하기 위한 전제 조건입니다. 이러한 플랫폼별 보안 기능은 대부분의 보안 요구사항을 충족하므로 콘솔에는 안티 치트 클라이언트 보호가 제공되지 않습니다. 그러나 P2P 모드에서 안티 치트 클라이언트 인터페이스는 크로스 플랫폼 플레이를 지원할 수 있습니다.

PC와 콘솔 사용자 간의 크로스 플랫폼 플레이를 지원하려면 먼저 플레이어가 보호된 게임 세션에 참여할 때 클라이언트 보호가 필요 없는 플랫폼을 사용하는지 확인해야 합니다. 이를 확인할 때는 플레이어의 변조되지 않은 게임 클라이언트를 신뢰해서는 안 됩니다. 악의적인 사용자는 안티 치트가 시행되지 않도록 값을 조작할 수 있으므로 게임 클라이언트가 사용 중인 플랫폼을 메시지로 알리는 것만으로는 충분하지 않습니다.

EOS 연결 인터페이스는 EOS ID 토큰을 제공합니다. 이 토큰에는 플레이어가 일반 콘솔에서 게임을 실행할 때 안전하게 검증하도록 사용할 수 있는 디바이스 유형 필드가 포함됩니다. 다른 플랫폼을 지원하려면 플랫폼 벤더의 자체 문서를 참조하여 게임 클라이언트가 생성하고 게임 서버, 백엔드 또는 피어 플레이어가 독립적으로 검증하는 플랫폼 티켓이나 토큰으로 철저한 확인 절차를 진행할 방법을 찾습니다. 이런 확인을 통해 안티 치트 클라이언트 보호가 필요하지 않은 콘솔 플랫폼을 사용자가 이용한다는 사실을 검증하면 해당 클라이언트를 안티 치트에 등록할 수 있습니다. 이를 위해 안티 치트 클라이언트 확인 대상에서 클라이언트를 제외하도록 EOS_ACCCT_UnprotectedClient 플래그를 사용합니다. 이렇게 하면 보호된 PC 플레이어와 함께 P2P 모드 세션에 참여하거나 서버 측 안티 치트 게임플레이 데이터 컬렉션에서 참조될 수 있습니다.

ID 토큰에 대한 자세한 내용은 EOS ID 토큰을, 에픽 계정에 대한 자세한 내용은 EAS ID 토큰을 참고하세요.