멀티 플레이어 네트워크 게임에서 사용자가 해킹 된 클라이언트 앱이 아닌 공식 클라이언트 애플리케이션에 연결되도록하기 위해 어떤 기술이 있습니까?
나는 이것을 할 확실한 방법이 없다는 것을 알고 있지만 오히려 문제를 완화시키는 데 사용할 수있는 기술에 관심이 있습니다.
특히 웹 기반 게임에 사용할 수있는 기술에 관심이 있지만 대부분은 일반적으로 적용될 수 있다고 생각합니다.
고맙습니다!
멀티 플레이어 네트워크 게임에서 사용자가 해킹 된 클라이언트 앱이 아닌 공식 클라이언트 애플리케이션에 연결되도록하기 위해 어떤 기술이 있습니까?
나는 이것을 할 확실한 방법이 없다는 것을 알고 있지만 오히려 문제를 완화시키는 데 사용할 수있는 기술에 관심이 있습니다.
특히 웹 기반 게임에 사용할 수있는 기술에 관심이 있지만 대부분은 일반적으로 적용될 수 있다고 생각합니다.
고맙습니다!
답변:
흥미로운 문제이지만 여기서 잘못된 질문을하고있는 것 같습니다. 해킹 된 클라이언트 접근 탐지부터 시작하겠습니다.
클라이언트가 사용자 측에서 실행되면 코드로 원하는 모든 작업을 수행 할 수 있습니다 (너무 복잡 할 때까지는 항상 똑똑한 사람이있을 것입니다). 클라이언트와 서버 간 메시지의 하드 코딩 암호화, 클라이언트 인증서 생성 또는 클라이언트가 체크섬을 계산하고, 충분한 시간이 주어질 수 있고, 충분한 시간이 주어지면 디 컴파일 및 크랙 될 수 있습니다. 동글과 함께 제공되는 소프트웨어를 보았습니다.이 동글은 응용 프로그램 코드의 일부를 가졌지 만 실행할 수 있기 위해 동글이 뜨지 않은 경우 먼저 앱의 crc를 확인했습니다. 소프트웨어 업데이트를하는 경우 동글을 다시 보내야합니다.
또한 사용자는 마우스 움직임과 클릭을 시뮬레이션하여 자신의 클라이언트를 사용하여 부정 행위를 할 수 있습니다.
봇 플레이어를 감지하는 방법은 무엇입니까?
여기 몇 가지 옵션이 있습니다-클릭 사이의 시간 측정, 마우스 이동 속도 측정-마우스가 A 지점에서 B 지점으로 여러 번 정확하게 이동하고 정확히 동일한 좌표에 충돌합니까? 사용자 이동이 반복 가능합니까? 사용자가 수집 한 자원이 고갈되면 사용자가 다른 조치를 취하거나 몇 시간 동안 제자리에서 대기합니까? 하루가 끝나면 패턴 인식 코드를 작성하게됩니다.
멀티 플레이어 네트워크 게임에서 사용자가 해킹 된 클라이언트 앱이 아닌 공식 클라이언트 애플리케이션에 연결되도록하기 위해 어떤 기술이 있습니까?
나는 이것이 이것이 당신에게 접근하는 올바른 방법이라고 생각하지 않거나 적어도 당신이 염려해야 할 것은 아닙니다.
클라이언트 특정 정보 만 모든 클라이언트에게 보내야합니다 (예 : 클라이언트는 몬스터가 버릴 수있는 것을 알 필요가 없습니다. 정보를 죽인 후 정보를 보내면 지정된 클라이언트에게만 보내집니다)
서버 측 (포지셔닝 등)에서 대부분의 계산을 수행하십시오. 클라이언트는 자체 계산을 수행하지만 자신의 값만 자신의 동작 만 보낼 수는 없습니다. 서버는이 동작이 유효한지 그리고 그것이 게임에 어떤 영향을 미치는지 확인해야합니다.
1과 2는 일반적으로 예측과 결합됩니다. 클라이언트와 서버는 특정 동작을 예측하려고합니다. 예를 들어 클라이언트는 x 초 또는 ms마다 플레이어를 이동시킵니다. 서버로부터 수정을 받는다
클라이언트가 아닌 계정에 대해 사용자에게 요금을 청구하십시오. 이렇게하면 사용자는 깨진 버전을 보유 할 수 있지만 계정이 없으면 게임을 할 수 없습니다.
2를 사용하면 돈 해킹, 위치 해킹 또는 벽 해킹 등이 없는지 확인할 수 있지만 봇은 항상 많은 회사에서 문제가되었습니다. 블리자드와 같은 대기업 이름조차도 문제가 있습니다. 계정 당 재생 가능 시간을 제한하여 한 달에 540 시간 이상 온라인에 접속할 수 없도록 할 수 있습니다. XP를 농장하기 위해 몬스터 + 마우스 입력의 색상 값을 사용한 봇을 기억합니다. 다른 방법은 실행중인 다른 응용 프로그램 및 메모리 액세스를 확인하는 추가 프로그램을 제공하는 것이지만 몇 가지 새로운 문제가 발생합니다.
편집하다:
초보자를위한 매우 잘 작성된 기사 : http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/
"공식 고객"이 운영되고 있음을 보장하는 확실한 방법은 없습니다. 이러한 메커니즘은 서버에 일종의 "비밀"을 다시 전달하는 유효성 검사 코드에 의존하며, 충분한 시간이 주어지면 리버스 엔지니어링 될 수 있습니다. 이것은 기본적으로 해킹 방지 소프트웨어가 서버에 클라이언트가 정상임을 알리는 경우 발생합니다.
편집 : 위의 내용을 자세히 설명하려면 클라이언트 측의 유효성을 검사하는 코드를 고려하십시오. 두 가지 매우 어려운 작업이 있습니다. 원래 코드가 사용되고 있는지 확인하고 (또는 런타임에 원본 코드를 방해 할 수있는 다른 것은 존재하지 않습니다!)이 결과를 서버에 다시 전달하는 방식 이 커뮤니케이션은 위조 될 수 없습니다. 첫 번째 부분은 엄청나게 어려운 반면 두 번째 부분은 완전히 불가능합니다.
클라이언트와 서버를 정기적으로 업데이트 할 수 있으면 크래커가 계속 유지하기 어려워 지도록 비밀을 정기적으로 전환 할 수 있습니다. 그러나 비밀이 인코딩 / 구현되는 방식을 변경하지 않는 한 매우 빠르게 다시 크랙 될 수 있습니다. 기본적으로, 그것은 당신과 그것을 부수고 싶어하는 사람, 문제를 던질 시간과 돈이 더 많은 사람 사이의 무기 경주입니다.
그 부분을 받아 들인 후에 우리가 할 수있는 다른 일이 있습니까? 무한한 컴퓨팅 성능과 대역폭을 갖춘 완벽한 세상에서 클라이언트와 서버간에 상태를 지속적으로 전송하고 서버가 클라이언트에서 발생하는 상황을 완벽하게 시뮬레이션 할 수 있습니다. 그런 다음이 모델을 사용하여 클라이언트가 주장하는 조치를 검증 할 수 있습니다. 이것은 사람이나 봇이 플레이 중인지를 감지하지 않지만, 클라이언트가 벽을 통해 발생하는 샷을 주장하는지 또는 다른 상상할 수없는 행동을 주장하는지 여부를 검증 할 수 있습니다.
서버에 충분한 데이터를 보유하는 것도 불규칙적 인 행동을 감지하는 첫 번째 단계입니다. 사람에게 너무 빠르다는 것을 목표로합니다. 완벽한 시뮬레이션 상황은 일반적으로 실현 가능하지 않지만 일부 축소 된 추정 모델을 사용할 수 있습니다. 많은 상황.
게임 유형을 지정하지 않았으므로 RPG / MMO 게임에 크게 의존합니다. 그러나이 중 많은 부분이 FPS, 전략 및 액션 게임에 적용될 수 있으며 적용됩니다. 블리자드와 같은 대규모 멀티 플레이어 게임 회사가 게임에서이 문제를 처리하는 방법은 다음과 같습니다.
그런 다음 게임에 등장하거나 (가능한 경우 스타 크래프트 2와 같은 게임에서는 그렇지 않습니다) 그렇지 않으면 플레이어에게 '인간 점검'으로서의 행동에 대해보고 / 말합니다. 또는 적어도 그것이 처리되어야하는 방법입니다. 블리자드는 이것에 대해 꽤 좋지만 역사적으로 다른 MMO 회사는 그렇지 않았습니다.
명확하지 않은 봇을 확인하는 것은 쉽지 않지만 몇 가지 기본 규칙은 다음과 같습니다.
문제는 게임의 인기가 높을수록 유익한 봇이 게임에서 쿼터를 줄일 수 있다는 것입니다. 사람들이 이러한 봇을 사용하고 만들 가능성이 더 높습니다. 또한 마우스 이동 속도를 제한하고 클릭에 임의의 휴머니즘 변형을 추가하고 심지어 봇이 인간 속도로 실수를하거나 메뉴의 일부를 열고 닫고 잘못된 버튼을 누른 다음 창을 닫고 키보드와 키보드를 전환하는 것은 사소한 일입니다 인간과 같은 마우스 작업은 손의 피로를 줄입니다. (당신은 당신이 그것을 깨닫지 못합니다)
따라서 누군가 또는 봇이 아주 오랫동안 반복적 인 작업을 수행하는 마지막 단계는 실제로 플레이어에게 다가 가서 대화하는 휴먼 모드 여야합니다. 그들이 거기 있고 인간의 응답으로 응답한다면 그들은 인간입니다. 일반적으로 모드는 플레이어에게 잠시 멈추거나 다른 곳을 따라 가서 다른 행동을 수행하도록 요청합니다. 후프는 시간이 지남에 따라 더욱 복잡해집니다.
et
물론 결국 누군가는 튜링 테스트를 통과하여 실제 사람과 구별 할 수없는 봇을 만들게됩니다. 그리고 저것을 목표로하는 많은 봇 작가들이 있습니다.
나는 처음으로 프로그래밍을 시작하고 마을에 서서 NPC를 모방 할 Ultima Online에 쓸모없는 봇을 만들었을 때 아이디어에 매료되었습니다. 이 명령은 매우 간단해서 쉽게 만들 수 있었으며, 다른 방향으로 나아 가기위한 주요 스트로크만으로, 채팅 로그 자체 이름을보고, 웹 버전의 AI를 통해 ALICE로 메시지를 전달했습니다. 나는 어느 것을 기억하지 못하고 아마도 더 이상 존재하지 않을 것입니다.
/접선
요점은 선을 그릴 위치를 결정해야한다는 것입니다. 당신의 시스템이 봇으로 식별하는 사람들과 대화 할 수있는 중재자의 힘을 감당할 수 없다면, 커뮤니티가 사람들을 봇으로 표시 한 다음 시간이 지나면 플레이어를 약 1 시간 동안 차는 것이 좋습니다. 금지하지 말고 그냥 차십시오. 대부분의 플레이어에게 실제 문제는 봇이 다른 인간 플레이어가 사용할 수있는 리소스를 낭비한다는 것입니다. 라그나로크 온라인 (Ragnarok Online)의 문제처럼 폭도가 부족한 경우, 아이템을 뭉치거나 내리지 않고 적의 모든 영역을 돌아 다니며 청소하는 봇은 일반적이며 다른 사람들을 위해 게임을 망치게합니다. 따라서 관리자 군대의 비용을 줄일 수 있습니다.
마지막으로, 게임 공간의 현실로 봇과 함께 살면서 사용을 장려 할 수도 있습니다. 이를 위해서는 봇, 트레이너 및 도우미 프로그램의 궁극적이고 일반적인 사용을 중심으로 게임을 설계해야합니다. 약 10 년 전에이 작업을 수행 한 MMO가 있다고 말하고 싶지만 어떤 MMO인지 기억이 나지 않습니다. 그것은 MMO가 무겁고 게임의 95 %가 주어진 시간에 키보드에서 떨어져 커뮤니티를 파괴했기 때문에 게임의 끝을 철자했습니다. 이 길을 가면 조심하십시오.
특히 브라우저와 유사한 게임에서 반복적 인 작업을 수행하여 사용자가 이길 수있는 게임 기능을 피하십시오 . 반복적 인 작업을 유발하는 게임 기능은 다른 사용자가 할 일이 없기 때문에 다른 사용자를 화나게 할뿐만 아니라 게임을 훨씬 쉽게 재미있게 만듭니다 (그리고 훨씬 덜 재미 있습니다!).
주어진 게임 기능이 안정적 일 수 있다면 왜 게임에 그 기능이 있습니까? 이 기능은 사용자에게 봇을 구축하도록 명확하게 호출합니다.
이 게임은 일반적으로 일련의 사소한 선택으로 플레이어에게 합리적인 양의 엔터테인먼트를 제공함으로써 재생됩니다. 사소한 선택에 직면 할 수있는 능력은 인간을 봇과 분리시킵니다. 궁극적으로 봇을 검색하는 대신 봇을 구현할 수있는 게임을 검색하고 모든 사람이 사용할 수 있도록 직접 구현하십시오. 그렇게하면 지루한 작업을 수행하지 않고 게임 플레이어에게 시간을 절약 할 수 있습니다. 루트에서 봇과 싸우는 동안 : 재미있는 게임 기능이 없다면 봇이 어떻게있을 수 있습니까?
결론은 : 게임이 안정 될 필요가없는 최소한의 복잡성에 대한 임계 값이 있다고 말할 수 있습니다. 사소한 선택을 추가하여 궁극적으로 사용자 경험을 향상시켜 게임을 임계 값 이상으로 만듭니다.
어쨌든,이 패러다임은 더 이상 현재에는 적용되지 않을 것입니다. 그러나 저는 이것이 이것이 좋은 게임을 만드는 것이라고 생각합니다.
기존의 대답은 이미 좋은,하지만 난 수표 비싼 경우 지적하고 싶었 (예 : 전체 게임 서버 측을 실행하면 반드시 클라이언트가 바람을 피우고 있지 않은지 확인하기 위해) 만 할에, 당신이 선택할 수있는 몇 가지 시간 .
예를 들어, 특정 지역 또는 특정 플레이어에 의한 액션 만 확인하거나 (시간이 지나면 무작위로 변경됨) 액션 대기열을 선택하고 유효성을 검사 할 액션을 임의로 선택하고 다른 액션을 무시할 수 있습니다. 어쩌면 누가 바람을 피우는 지 (기본적으로 가장 성공한 사람들을 찾는) 휴리스틱을 생각해 내고 서버에서 자신의 행동을 확인할 수 있습니다.
서버가 조치를 검증 할 때와 그렇지 않을 때를 포기하지 않도록하십시오. 조치를 취할 준비가 될 때까지 항상 표준 응답을 보내십시오 (유효성 검사와 그렇지 않은 경우 응답을 보내는 데 시간이 오래 걸리지 않음).
이런 식으로 당신은 여분의 서버 파워만을 사용하여 부정 행위로부터 보호 할 수 있습니다. (모든 행동의 유효성을 검증할수록 부정 행위로부터 보호 할 수 있습니다).
가장 간단한 방법은 본질적으로 클라이언트를 바보 터미널로 만드는 것입니다. 모든 것은 서버에서 수행되며 클라이언트는 서버로 명령을 보냅니다. 이런 식으로 서버는 모든 것을 완전히 제어 할 수 있습니다.
그러나 서버가 더 많은 계산을 수행해야하고 사용자 경험이 부족하기 때문에 이것은 아마도 가장 적합한 경우는 아닙니다. 따라서 수행 할 로직을 클라이언트에 맡길수록 사용자 경험은 향상되지만 보안 수준은 떨어집니다. 따라서 수용 가능한 중간 지점을 찾아야합니다.
또한 "알아야 할"내용 만 클라이언트에게 보냅니다. 예를 들어, 적 플레이어가 벽 뒤에있는 경우 해당 정보를 클라이언트에게 보내지 마십시오. 그렇지 않으면 해킹 된 클라이언트가이 정보를 식별 할 수 있습니다 (wallhack).
편집 : 나는 질문을 오해했다. 나는 "플레이어에게 10 억 골드를 생성하는 메시지를 보낼 수있는 해킹 된 소프트웨어"대신 "해적판 / 해킹 된 키 방지"로 해석했습니다.
요즘 대부분의 게임은 클라이언트가 서버에 보낼 수있는 모든 것을 수정할 수 있기 때문에 데이터베이스의 계정에 연결된 값을가집니다. 아마도 가장 간단하고 효과적인 방법 일 것입니다.
초고속 인터넷 및 P2P 파일 전송이 확산되면서 회사는 클라이언트에 로컬로 저장된 CD 키에서 서버의 계정에 연결된 키로 전환했습니다. 누구든지 클라이언트를 다운로드 할 수 있으므로 "공식"또는 "비공식"클라이언트 소프트웨어가 더 이상 없습니다. 그러나 게임을 할 수있는 계정이있는 경우에만 게임을 할 수 있습니다.
소프트웨어의 물리적 사본을 많이 생산할 필요가 없기 때문에 회사에도 이점이 있습니다.