네트워크 게임에서 비공식 클라이언트를 방지하는 기술


22

멀티 플레이어 네트워크 게임에서 사용자가 해킹 된 클라이언트 앱이 아닌 공식 클라이언트 애플리케이션에 연결되도록하기 위해 어떤 기술이 있습니까?

나는 이것을 할 확실한 방법이 없다는 것을 알고 있지만 오히려 문제를 완화시키는 데 사용할 수있는 기술에 관심이 있습니다.

특히 웹 기반 게임에 사용할 수있는 기술에 관심이 있지만 대부분은 일반적으로 적용될 수 있다고 생각합니다.

고맙습니다!


일부는 일반화 된 클라우드 게임이 모퉁이에 있다고 생각합니다. 그것은이 질문을 완전히 해결합니다.
Laurent Couvidou

답변:


13

흥미로운 문제이지만 여기서 잘못된 질문을하고있는 것 같습니다. 해킹 된 클라이언트 접근 탐지부터 시작하겠습니다.

클라이언트가 사용자 측에서 실행되면 코드로 원하는 모든 작업을 수행 할 수 있습니다 (너무 복잡 할 때까지는 항상 똑똑한 사람이있을 것입니다). 클라이언트와 서버 간 메시지의 하드 코딩 암호화, 클라이언트 인증서 생성 또는 클라이언트가 체크섬을 계산하고, 충분한 시간이 주어질 수 있고, 충분한 시간이 주어지면 디 컴파일 및 크랙 될 수 있습니다. 동글과 함께 제공되는 소프트웨어를 보았습니다.이 동글은 응용 프로그램 코드의 일부를 가졌지 만 실행할 수 있기 위해 동글이 뜨지 않은 경우 먼저 앱의 crc를 확인했습니다. 소프트웨어 업데이트를하는 경우 동글을 다시 보내야합니다.

또한 사용자는 마우스 움직임과 클릭을 시뮬레이션하여 자신의 클라이언트를 사용하여 부정 행위를 할 수 있습니다.

봇 플레이어를 감지하는 방법은 무엇입니까?

여기 몇 가지 옵션이 있습니다-클릭 사이의 시간 측정, 마우스 이동 속도 측정-마우스가 A 지점에서 B 지점으로 여러 번 정확하게 이동하고 정확히 동일한 좌표에 충돌합니까? 사용자 이동이 반복 가능합니까? 사용자가 수집 한 자원이 고갈되면 사용자가 다른 조치를 취하거나 몇 시간 동안 제자리에서 대기합니까? 하루가 끝나면 패턴 인식 코드를 작성하게됩니다.


4
봇 동작 주위에 약간의 노이즈를 추가하여 봇 확인 기술을 몇 분 안에 이길 수 있습니다.
AsTeR

+1; 예방이 불가능하다는 점을 감안할 때 (그리고 누군가가 실제로 결정되면 드라이버를 해킹 할 수 있으므로 사실을 강조해야 함) 대신 탐지에 집중해야합니다. 또한 게임을 중심으로 구축 할 수있는 합당한 커뮤니티가 정책을 위반하게 될 수도 있으므로이를 지원하는 도구를 제공하는 작업을 수행 할 수도 있습니다.
Maximus Minimus

2
프로그래밍 방식의 예방만으로는 불가능하기 때문에 WoW와 같은 게임에는 반복적 인 일을하는 사람들을 확인하고 그들이 인간임을 증명하는 질문을하는 수많은 관리자가 있습니다.
DampeS8N

1
@AsTeR 올바른 방향으로 나아 가기위한 아이디어 일뿐입니다. 예를 들어 다음과 같이이
Kamil

5
"그래서 문제는 봇 플레이어를 감지하는 방법일까요?" 봇없이 속임수를 쓰는 여러 가지 방법이 있습니다. 예를 들어, 클라이언트가 너무 많은 정보를 얻거나 클라이언트를 신뢰하게합니다.
Matsemann

9

멀티 플레이어 네트워크 게임에서 사용자가 해킹 된 클라이언트 앱이 아닌 공식 클라이언트 애플리케이션에 연결되도록하기 위해 어떤 기술이 있습니까?

나는 이것이 이것이 당신에게 접근하는 올바른 방법이라고 생각하지 않거나 적어도 당신이 염려해야 할 것은 아닙니다.

  1. 클라이언트 특정 정보 만 모든 클라이언트에게 보내야합니다 (예 : 클라이언트는 몬스터가 버릴 수있는 것을 알 필요가 없습니다. 정보를 죽인 후 정보를 보내면 지정된 클라이언트에게만 보내집니다)

  2. 서버 측 (포지셔닝 등)에서 대부분의 계산을 수행하십시오. 클라이언트는 자체 계산을 수행하지만 자신의 값만 자신의 동작 만 보낼 수는 없습니다. 서버는이 동작이 유효한지 그리고 그것이 게임에 어떤 영향을 미치는지 확인해야합니다.

  3. 1과 2는 일반적으로 예측과 결합됩니다. 클라이언트와 서버는 특정 동작을 예측하려고합니다. 예를 들어 클라이언트는 x 초 또는 ms마다 플레이어를 이동시킵니다. 서버로부터 수정을 받는다

  4. 클라이언트가 아닌 계정에 대해 사용자에게 요금을 청구하십시오. 이렇게하면 사용자는 깨진 버전을 보유 할 수 있지만 계정이 없으면 게임을 할 수 없습니다.

2를 사용하면 돈 해킹, 위치 해킹 또는 벽 해킹 등이 없는지 확인할 수 있지만 봇은 항상 많은 회사에서 문제가되었습니다. 블리자드와 같은 대기업 이름조차도 문제가 있습니다. 계정 당 재생 가능 시간을 제한하여 한 달에 540 시간 이상 온라인에 접속할 수 없도록 할 수 있습니다. XP를 농장하기 위해 몬스터 + 마우스 입력의 색상 값을 사용한 봇을 기억합니다. 다른 방법은 실행중인 다른 응용 프로그램 및 메모리 액세스를 확인하는 추가 프로그램을 제공하는 것이지만 몇 가지 새로운 문제가 발생합니다.

편집하다:

초보자를위한 매우 잘 작성된 기사 : http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/


네, 우리가 걱정해야 할 유일한 것이 아니라는 데 동의합니다. 우리는 이미 대부분의 작업을 수행하고 있지만 클라이언트 측의 일부 노출 요소는 피할 수 없습니다.
UpTheCreek

@UpTheCreek 가장 관심있는 부분을 말씀해 주시겠습니까? 봇, 데이터 변경, 보호해야 할 클라이언트 또는 클라이언트로 전송되는 정보의 종류. 이미 클라이언트 크랙 안전을 만드는 것은 쉬운 일이 아니지만 우려의 근원을 찾아 조금 더 나은 도움을 줄 수 있습니다.

우리에게는 서버 측 점검 / 시뮬레이션을 서버 비용과 균형을 맞추는 경우입니다. 우리가 원하는 모든 것을 포함시킬 수는 없습니다. 나는 이것에 대해 많이 생각했지만 클라이언트를 더 잘 보호하기 위해 독창적 인 트릭이 있는지 확인하고 싶었습니다 :) 클라이언트는 자바 스크립트 기반이므로 사용자가 해킹하는 것이 평소보다 훨씬 쉽다고 상상할 수 있습니다 !
UpTheCreek

4

"공식 고객"이 운영되고 있음을 보장하는 확실한 방법은 없습니다. 이러한 메커니즘은 서버에 일종의 "비밀"을 다시 전달하는 유효성 검사 코드에 의존하며, 충분한 시간이 주어지면 리버스 엔지니어링 될 수 있습니다. 이것은 기본적으로 해킹 방지 소프트웨어가 서버에 클라이언트가 정상임을 알리는 경우 발생합니다.

편집 : 위의 내용을 자세히 설명하려면 클라이언트 측의 유효성을 검사하는 코드를 고려하십시오. 두 가지 매우 어려운 작업이 있습니다. 원래 코드가 사용되고 있는지 확인하고 (또는 런타임에 원본 코드를 방해 할 수있는 다른 것은 존재하지 않습니다!)이 결과를 서버에 다시 전달하는 방식 이 커뮤니케이션은 위조 될 수 없습니다. 첫 번째 부분은 엄청나게 어려운 반면 두 번째 부분은 완전히 불가능합니다.

클라이언트와 서버를 정기적으로 업데이트 할 수 있으면 크래커가 계속 유지하기 어려워 지도록 비밀을 정기적으로 전환 할 수 있습니다. 그러나 비밀이 인코딩 / 구현되는 방식을 변경하지 않는 한 매우 빠르게 다시 크랙 될 수 있습니다. 기본적으로, 그것은 당신과 그것을 부수고 싶어하는 사람, 문제를 던질 시간과 돈이 더 많은 사람 사이의 무기 경주입니다.

그 부분을 받아 들인 후에 우리가 할 수있는 다른 일이 있습니까? 무한한 컴퓨팅 성능과 대역폭을 갖춘 완벽한 세상에서 클라이언트와 서버간에 상태를 지속적으로 전송하고 서버가 클라이언트에서 발생하는 상황을 완벽하게 시뮬레이션 할 수 있습니다. 그런 다음이 모델을 사용하여 클라이언트가 주장하는 조치를 검증 할 수 있습니다. 이것은 사람이나 봇이 플레이 중인지를 감지하지 않지만, 클라이언트가 벽을 통해 발생하는 샷을 주장하는지 또는 다른 상상할 수없는 행동을 주장하는지 여부를 검증 할 수 있습니다.

서버에 충분한 데이터를 보유하는 것도 불규칙적 인 행동을 감지하는 첫 번째 단계입니다. 사람에게 너무 빠르다는 것을 목표로합니다. 완벽한 시뮬레이션 상황은 일반적으로 실현 가능하지 않지만 일부 축소 된 추정 모델을 사용할 수 있습니다. 많은 상황.


+1. 나는 비밀을 자주 바꾸는 아이디어를 언급하기 위해 여기에 왔는데, 이는 해커가 자신의 작업을 반복해야한다는 것을 의미합니다. 복잡한 비밀은 예를 들어 더 나아질 것입니다. 서버가 전송하는 내용에 따라 변경됩니다.
Kylotan

4

게임 유형을 지정하지 않았으므로 RPG / MMO 게임에 크게 의존합니다. 그러나이 중 많은 부분이 FPS, 전략 및 액션 게임에 적용될 수 있으며 적용됩니다. 블리자드와 같은 대규모 멀티 플레이어 게임 회사가 게임에서이 문제를 처리하는 방법은 다음과 같습니다.

  1. 모든 계산 및 게임 작업을 서버 측에서 수행하면 클라이언트는 단순한 터미널 및 그래픽 엔진입니다. 따라서 플레이어가 다른 클라이언트를 사용하는 경우 실제로 게임 용어로는 중요하지 않으며 게임의 물리를 속일 수 없습니다.
  2. 클릭 이벤트 및 마우스 움직임의 완벽한 반복과 같은 명확한 컴퓨터 동작을 찾아 명백한 봇 프로그램 / 클라이언트를 확인합니다.
  3. 명백하지 않은 봇 프로그램 / 클라이언트를 확인하고 게임 내 중재자에게 문제를 경고합니다.

그런 다음 게임에 등장하거나 (가능한 경우 스타 크래프트 2와 같은 게임에서는 그렇지 않습니다) 그렇지 않으면 플레이어에게 '인간 점검'으로서의 행동에 대해보고 / 말합니다. 또는 적어도 그것이 처리되어야하는 방법입니다. 블리자드는 이것에 대해 꽤 좋지만 역사적으로 다른 MMO 회사는 그렇지 않았습니다.

명확하지 않은 봇을 확인하는 것은 쉽지 않지만 몇 가지 기본 규칙은 다음과 같습니다.

  • 약간의 변화만으로도 동일한 행동을 반복해서 반복하는 선수를 찾습니다. 이것은 MMO의 리소스 노드에 앉아 다시 생성 될 때 농사를 짓거나 FPS의 건강 / 탄약 팩 사이에 원을 그리며 특정 경로를 벗어나지 않고 항상 같은 총을 사용하는 것일 수 있습니다. (FPS의 최적이 아닌 봇은 드물지만, 일부 현대 FPS와 같이 플레이어의 재능이 가진 게임 수가 더 중요한 곳에서 게임에 사다리가 있으면 봇은 다시 가치가 있습니다)
  • RTS에서 동일한 정확한 돌진 또는 전략을 반복적으로 실행하는 플레이어를 찾습니다. 스타 크래프트에는 봇이 수행 할 때 거의 달성 할 수없는 특정 빌드 순서가 있습니다.
  • 방대한 양의 자원을 모아서 하나의 아이템을 끝없이 연마하는 플레이어를 찾습니다. 이것은 Ultima Online에서 큰 문제였습니다.

문제는 게임의 인기가 높을수록 유익한 봇이 게임에서 쿼터를 줄일 수 있다는 것입니다. 사람들이 이러한 봇을 사용하고 만들 가능성이 더 높습니다. 또한 마우스 이동 속도를 제한하고 클릭에 임의의 휴머니즘 변형을 추가하고 심지어 봇이 인간 속도로 실수를하거나 메뉴의 일부를 열고 닫고 잘못된 버튼을 누른 다음 창을 닫고 키보드와 키보드를 전환하는 것은 사소한 일입니다 인간과 같은 마우스 작업은 손의 피로를 줄입니다. (당신은 당신이 그것을 깨닫지 못합니다)

따라서 누군가 또는 봇이 아주 오랫동안 반복적 인 작업을 수행하는 마지막 단계는 실제로 플레이어에게 다가 가서 대화하는 휴먼 모드 여야합니다. 그들이 거기 있고 인간의 응답으로 응답한다면 그들은 인간입니다. 일반적으로 모드는 플레이어에게 잠시 멈추거나 다른 곳을 따라 가서 다른 행동을 수행하도록 요청합니다. 후프는 시간이 지남에 따라 더욱 복잡해집니다.

et

물론 결국 누군가는 튜링 테스트를 통과하여 실제 사람과 구별 할 수없는 봇을 만들게됩니다. 그리고 저것을 목표로하는 많은 봇 작가들이 있습니다.

나는 처음으로 프로그래밍을 시작하고 마을에 서서 NPC를 모방 할 Ultima Online에 쓸모없는 봇을 만들었을 때 아이디어에 매료되었습니다. 이 명령은 매우 간단해서 쉽게 만들 수 있었으며, 다른 방향으로 나아 가기위한 주요 스트로크만으로, 채팅 로그 자체 이름을보고, 웹 버전의 AI를 통해 ALICE로 메시지를 전달했습니다. 나는 어느 것을 기억하지 못하고 아마도 더 이상 존재하지 않을 것입니다.

/접선

요점은 선을 그릴 위치를 결정해야한다는 것입니다. 당신의 시스템이 봇으로 식별하는 사람들과 대화 할 수있는 중재자의 힘을 감당할 수 없다면, 커뮤니티가 사람들을 봇으로 표시 한 다음 시간이 지나면 플레이어를 약 1 시간 동안 차는 것이 좋습니다. 금지하지 말고 그냥 차십시오. 대부분의 플레이어에게 실제 문제는 봇이 다른 인간 플레이어가 사용할 수있는 리소스를 낭비한다는 것입니다. 라그나로크 온라인 (Ragnarok Online)의 문제처럼 폭도가 부족한 경우, 아이템을 뭉치거나 내리지 않고 적의 모든 영역을 돌아 다니며 청소하는 봇은 일반적이며 다른 사람들을 위해 게임을 망치게합니다. 따라서 관리자 군대의 비용을 줄일 수 있습니다.

마지막으로, 게임 공간의 현실로 봇과 함께 살면서 사용을 장려 할 수도 있습니다. 이를 위해서는 봇, 트레이너 및 도우미 프로그램의 궁극적이고 일반적인 사용을 중심으로 게임을 설계해야합니다. 약 10 년 전에이 작업을 수행 한 MMO가 있다고 말하고 싶지만 어떤 MMO인지 기억이 나지 않습니다. 그것은 MMO가 무겁고 게임의 95 %가 주어진 시간에 키보드에서 떨어져 커뮤니티를 파괴했기 때문에 게임의 끝을 철자했습니다. 이 길을 가면 조심하십시오.


3
마지막 단락에서 SOE의 Star Wars Galaxies는 매우 강력한 게임 내 스크립팅 / 매크로 언어를 사용하는 MMO의 예이지만 봇 문제는 많지 않았습니다. 결국 지루한 게임 내 필수품 중 일부가 스크립팅되었고 (예를 들어, 대부분의 스타 포트에는 완전히 자동화 된 치료기 버핑 봇 앞에 플레이어 대기열이 있었으며) 낮은 수준의 XP 연삭이 종종 이런 식으로 수행되었습니다. 너무. IMO는이 모든 것이 게임에 크게 추가 되었기 때문에 경고 나 의사 소통이 거의없이 아주 나쁜 결정과 게임 변경을 초래했습니다.
GAThrawn

3

특히 브라우저와 유사한 게임에서 반복적 인 작업을 수행하여 사용자가 이길 수있는 게임 기능을 피하십시오 . 반복적 인 작업을 유발하는 게임 기능은 다른 사용자가 할 일이 없기 때문에 다른 사용자를 화나게 할뿐만 아니라 게임을 훨씬 쉽게 재미있게 만듭니다 (그리고 훨씬 덜 재미 있습니다!).

주어진 게임 기능이 안정적 일 수 있다면 왜 게임에 그 기능이 있습니까? 이 기능은 사용자에게 봇을 구축하도록 명확하게 호출합니다.

이 게임은 일반적으로 일련의 사소한 선택으로 플레이어에게 합리적인 양의 엔터테인먼트를 제공함으로써 재생됩니다. 사소한 선택에 직면 할 수있는 능력은 인간을 봇과 분리시킵니다. 궁극적으로 봇을 검색하는 대신 봇을 구현할 수있는 게임을 검색하고 모든 사람이 사용할 수 있도록 직접 구현하십시오. 그렇게하면 지루한 작업을 수행하지 않고 게임 플레이어에게 시간을 절약 할 수 있습니다. 루트에서 봇과 싸우는 동안 : 재미있는 게임 기능이 없다면 봇이 어떻게있을 수 있습니까?

결론은 : 게임이 안정 될 필요가없는 최소한의 복잡성에 대한 임계 값이 있다고 말할 수 있습니다. 사소한 선택을 추가하여 궁극적으로 사용자 경험을 향상시켜 게임을 임계 값 이상으로 만듭니다.

어쨌든,이 패러다임은 더 이상 현재에는 적용되지 않을 것입니다. 그러나 저는 이것이 이것이 좋은 게임을 만드는 것이라고 생각합니다.


1
+1 부정 행위에 대한 유일한 효과적인 방법은 부정 행위가 처음에는 효과적이지 않은 방식으로 게임을 디자인하는 것입니다.
API-Beast

내가 가능성에 대해 생각한 사람이 아무도 없었기 때문에 나의 마지막 문장은 옳았다 ...
Jorge Leitao

2

기존의 대답은 이미 좋은,하지만 난 수표 비싼 경우 지적하고 싶었 (예 : 전체 게임 서버 측을 실행하면 반드시 클라이언트가 바람을 피우고 있지 않은지 확인하기 위해) 만 할에, 당신이 선택할 수있는 몇 가지 시간 .

예를 들어, 특정 지역 또는 특정 플레이어에 의한 액션 만 확인하거나 (시간이 지나면 무작위로 변경됨) 액션 대기열을 선택하고 유효성을 검사 할 액션을 임의로 선택하고 다른 액션을 무시할 수 있습니다. 어쩌면 누가 바람을 피우는 지 (기본적으로 가장 성공한 사람들을 찾는) 휴리스틱을 생각해 내고 서버에서 자신의 행동을 확인할 수 있습니다.

서버가 조치를 검증 할 때와 그렇지 않을 때를 포기하지 않도록하십시오. 조치를 취할 준비가 될 때까지 항상 표준 응답을 보내십시오 (유효성 검사와 그렇지 않은 경우 응답을 보내는 데 시간이 오래 걸리지 않음).

이런 식으로 당신은 여분의 서버 파워만을 사용하여 부정 행위로부터 보호 할 수 있습니다. (모든 행동의 유효성을 검증할수록 부정 행위로부터 보호 할 수 있습니다).


1

글쎄, 나는 "최상의 해결책"이 없다고 생각한다. 데이터 패키지를 인코딩하고 패키지를받는 서버에 규칙을 지정할 수 있습니다. 예를 들어 현실적이고 허용되는 가장 큰 움직임은 +1이며 속도를 높이기 위해 5 이상으로 설정하는 사기꾼 / 해커와는 다릅니다. 해커가 다른 플레이어보다 낫기 위해 무엇을 할 수 있는지 생각하고 규칙을 정하십시오.


0

가장 간단한 방법은 본질적으로 클라이언트를 바보 터미널로 만드는 것입니다. 모든 것은 서버에서 수행되며 클라이언트는 서버로 명령을 보냅니다. 이런 식으로 서버는 모든 것을 완전히 제어 할 수 있습니다.

그러나 서버가 더 많은 계산을 수행해야하고 사용자 경험이 부족하기 때문에 이것은 아마도 가장 적합한 경우는 아닙니다. 따라서 수행 할 로직을 클라이언트에 맡길수록 사용자 경험은 향상되지만 보안 수준은 떨어집니다. 따라서 수용 가능한 중간 지점을 찾아야합니다.

또한 "알아야 할"내용 만 클라이언트에게 보냅니다. 예를 들어, 적 플레이어가 벽 뒤에있는 경우 해당 정보를 클라이언트에게 보내지 마십시오. 그렇지 않으면 해킹 된 클라이언트가이 정보를 식별 할 수 있습니다 (wallhack).


-1

편집 : 나는 질문을 오해했다. 나는 "플레이어에게 10 억 골드를 생성하는 메시지를 보낼 수있는 해킹 된 소프트웨어"대신 "해적판 / 해킹 된 키 방지"로 해석했습니다.

요즘 대부분의 게임은 클라이언트가 서버에 보낼 수있는 모든 것을 수정할 수 있기 때문에 데이터베이스의 계정에 연결된 값을가집니다. 아마도 가장 간단하고 효과적인 방법 일 것입니다.

초고속 인터넷 및 P2P 파일 전송이 확산되면서 회사는 클라이언트에 로컬로 저장된 CD 키에서 서버의 계정에 연결된 키로 전환했습니다. 누구든지 클라이언트를 다운로드 할 수 있으므로 "공식"또는 "비공식"클라이언트 소프트웨어가 더 이상 없습니다. 그러나 게임을 할 수있는 계정이있는 경우에만 게임을 할 수 있습니다.

소프트웨어의 물리적 사본을 많이 생산할 필요가 없기 때문에 회사에도 이점이 있습니다.


나는 당신을 투표 한 사람이 아니지만, 나에게 이것은 실제로 어떤 보호도 제공하지 않습니다. 권한이있는 사용자 만 연결할 수있게하는 것처럼 들리는 것처럼 들립니다. 그러나 문제는 유효한 계정을 가진 사람이 메시징을 리버스 엔지니어링하고 자신의 해킹 된 클라이언트를 작성하는 것을 막을 수있는 것이 없다는 것입니다.
UpTheCreek

-1 이것은 질문에 대한 답변이 아니며 온라인 계정을 가지고 있다고해서 누군가가 게임 내 동작을 자동화하는 해킹 된 클라이언트와 연결하는 것을 막지는 못합니다. 와우는 완전히 온라인 기반이며 여전히 끊임없이 해킹됩니다. 이 눈보라를 방지하기 위해하는 것은 문제의 문제를 다루는 예입니다 그들의 "소장"안티 치트 소프트웨어 사용
dreta

아가, 네 말이 맞아 나는 그 질문을 오해했다.
Orin MacGregor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.