안티 치트 인터페이스

EOS 제품에서의 안티 치트 구현과 관련된 전제 조건과 네트워크 아키텍처, 플랫폼 구성 요소 등을 알아봅니다.

Preview Only

안티 치트 인터페이스는 현재 Windows 플랫폼만 지원합니다. Mac과 Linux도 곧 지원할 예정입니다.

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

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

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

  • 치트 방지(Cheat prevention): 직접적인 방식으로 게임 프로세스 메모리를 읽고 쓰는 등의 일반적인 부정행위 기법을 수동적으로 방지함

  • 치트 탐지(Cheat detection): 게임 조작에 더 전문적인 방식을 사용하는 계정을 식별하여 해당 계정을 제재함

안티 치트 인터페이스를 사용하려면 다음을 수행해야 합니다.

  1. 개발 전제 조건을 검토하고 준수합니다.

  2. 네트워크 아키텍처클라이언트 정책유형을 결정합니다.

  3. 클라이언트 모듈, 파일 무결성 툴안티 치트 부트스트래퍼 실행 파일을 구성합니다.

  4. (Windows만 해당) Windows 서비스 설치 관리자를 구성합니다.

  5. 안티 치트 인터페이스를 게임 코드와 통합합니다.

    1. 연결 인터페이스로 사용자 ID를 설정합니다.

    2. 클라이언트-서버 또는 P2P 모드에 대한 콜백을 등록합니다.

    3. 보호된 세션 알림을 설정합니다.

  6. 통합 체크리스트를 통해 안티 치트 인터페이스가 제대로 작동하는지 확인합니다.

개발 전제 조건

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

게임 아키텍처

최대한 많은 게임 스테이트에 대해 권한이 있는 전용 게임 서버 사용을 적극 권장합니다.

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

게임 악용

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

게임 레벨 안티 치트

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

플레이어 신고

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

플레이어 진행 상황 관리

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

게임 네트워크 아키텍처

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

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

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

네트워크 아키텍처의 클라이언트-서버 모드 통신 흐름

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

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

P2P 메시(P2P 모드)

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

네트워크 아키텍처의 P2P 모드 통신 흐름

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

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

리슨 서버

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

네트워크 아키텍처의 리슨 서버 모드 통신 흐름

P2P 모드의 경우:

  • 권한 있는 게임 호스트 클라이언트는 각 플레이어를 피어로 등록하고 적절하게 데이터를 교환하여 게임 세션에 있는 모든 플레이어를 검증해야 합니다.

    • 피어에 대해 제거 작업이 필요한 콜백이 트리거되는 경우 권한 있는 게임 호스트는 게임 세션에서 해당 플레이어를 추방해야 합니다.

  • 권한 없는 게임 클라이언트는 해당 특정 클라이언트를 피어로 등록하고 적절하게 데이터를 교환하여 게임 호스트 클라이언트만 검증해야 합니다.

    • 게임 호스트에 대해 제거 작업이 필요한 콜백이 트리거되는 경우, 권한 없는 클라이언트는 연결을 해제하고 적절한 오류 메시지를 표시해야 합니다.

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

  • 더 간단한 접근 방식이지만, 권한 있는 게임 호스트 클라이언트의 특권이 더 크고 이러한 권한을 남용할 우려가 있습니다.

  • 로그인한 로컬 플레이어가 EOS_AntiCheatServer_BeginSession 호출에 지정되어야 한다는 점을 제외하고는 전용 서버와 동일하게 구현됩니다.

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

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

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

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

다른 사전 정의된 정책 유형이나 맞춤형 정책을 사용해야 할 수도 있지만, 신중히 고려해서 사용해야 합니다.

다음 정책 작업을 사용할 수 있습니다:

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

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

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

플랫폼 구성 요소

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

Windows

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

구성 요소

파일명

설명

서비스 설치 관리자

EasyAntiCheat_EOS_Setup.exe

(필수) 안티 치트 Windows 서비스 설치, 복구 또는 제거에 사용됩니다.

안티 치트 부트스트래퍼

start_protected_game.exe

안티 치트를 준비하고, 정상적인 안티 치트 클라이언트 보호를 통해 게임 프로세스를 시작합니다.

서비스

EasyAntiCheat_EOS.exe

안티 치트가 다른 구성 요소를 초기화할 수 있게 해주는 Windows 서비스 실행 파일입니다.

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

<GameRoot>\start_protected_game.exe
<GameRoot>\EasyAntiCheat\EasyAntiCheat_EOS_Setup.exe
<GameRoot>\EasyAntiCheat\Settings.json
<GameRoot>\EasyAntiCheat\SplashScreen.png
<GameRoot>\EasyAntiCheat\Localization

Windows 서비스 설치 관리자

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

구성
  1. 개발자 포털에서 ProductId를 얻습니다.

  2. 다음 명령을 실행하도록 설치 관리자를 구성합니다:

    • EasyAntiCheat_EOS_Setup.exe install

    • EasyAntiCheat_EOS_Setup.exe uninstall

  3. 성공한 경우, 이 명령의 프로세스 종료 코드는 0입니다. 프로세스 종료 코드가 0이 아니면, 실패한 것입니다.

스토어별 전제 조건
에픽게임즈 스토어

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

Steam

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

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

Mac

구성 요소

파일명

설명

안티 치트 부트스트래퍼

start_protected_game

안티 치트를 준비하고, 정상적인 안티 치트 클라이언트 보호를 통해 게임 프로세스를 시작합니다.

Mac **dist** 서브디렉터리 구조

<GameRoot>\start_protected_game
<GameRoot>\EasyAntiCheat\Settings.json
<GameRoot>\EasyAntiCheat\SplashScreen.png
<GameRoot>\EasyAntiCheat\Localization

Linux

구성 요소

파일명

설명

안티 치트 부트스트래퍼

start_protected_game

안티 치트를 준비하고, 정상적인 안티 치트 클라이언트 보호를 통해 게임 프로세스를 시작합니다.

Linux **dist** 서브디렉터리 구조

<GameRoot>\start_protected_game
<GameRoot>\EasyAntiCheat\Settings.json
<GameRoot>\EasyAntiCheat\SplashScreen.png
<GameRoot>\EasyAntiCheat\Localization

콘솔 지원

콘솔 플랫폼은 일반적으로 하드웨어 보안 기능에 의존하여 대부분의 치트 유형에서 전제 조건인 임의 코드 실행을 방지합니다. 이러한 플랫폼별 보안 기능은 대부분의 보안 요구를 충족하므로 콘솔에는 안티 치트 클라이언트 보호가 제공되지 않습니다.

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

플랫폼은 다양하지만, 게임 클라이언트에서 생성하고 게임 서버나 백엔드에서 독립적으로 검증하는 플랫폼 티켓이나 토큰으로 확실하게 확인할 수 있습니다. 이런 확인을 통해 사용자가 안티 치트 클라이언트 보호가 필요하지 않은 콘솔 플랫폼을 사용한다는 사실을 검증하면, 클라이언트를 안티 치트 클라이언트 확인에서 제외하도록 EOS_ACCCT_UnprotectedClient 플래그를 사용하여 해당 클라이언트를 안티 치트에 등록할 수 있습니다. 이렇게 하면 해당 클라이언트를 서버 측 안티 치트 게임플레이 데이터 컬렉션에서 계속 참조할 수 있습니다.