클라이언트 측 해킹에 저항하는 비주얼로 멀티 플레이어 클로킹을 구현하려면 어떻게해야합니까?


19

멀티 플레이어 게임에서 스텔스를 구현하는 것에 대해 생각했습니다. MOBA 스타일의 게임이므로 리그 오브 레전드 (LoL)와 히어로즈 오브 더 스톰 (HotS)을 생각해보십시오. 여러 클라이언트가 단일 서버에 연결되어 모든 클라이언트에게 게임 상태를 브로드 캐스트합니다. 클라이언트는 입력 데이터를 서버로 전송하여 유효하지 않은 명령이 발생하면이를 거부하여 부정 행위를 불가능하게 할 수 있습니다 (이론상).

자,이 게임들은 스텔스를 다르게 구현했기 때문에 의도적으로 언급했습니다. LoL에는 두 가지 가능한 상태가 있습니다. 완전히 표시되거나 완전히 보이지 않습니다. 반면에 HotS는 공중에서 쉬머가 알 수있는 방식으로 스텔스를 구현합니다.

히어로즈 오브 더 스톰

주변 환경에주의를 기울여 보상 / 홍보하는 것이기 때문에 이것은 깔끔한 기계공이라고 생각합니다. 그러나 이것은 멀티 플레이어 게임이기 때문에 쉽게 악용 될 수 있음을 깨달았습니다.

'LoL'방식으로 스텔스를 구현할 때 다른 클라이언트에게 플레이어 좌표 전송을 중지 할 수 있습니다. 플레이어의 캐릭터가 스텔스를 깨면 서버는 해당 위치를 다시 브로드 캐스트 할 수 있습니다. 그러나 HotS 모델을 사용하면 캐릭터가 움직이는 공중에서 쉬머를 볼 수 있습니다. 이것은 서버가 플레이어의 위치를 ​​다른 클라이언트에게 보내야 함을 의미합니다. 즉, 텍스처 나 모델을 변경하거나 게임 코드 자체를 변경하는 플레이어는 망토를 쓸모 없게 만들 수 있습니다. 여기 HotS 보드 의 스레드 가 있습니다.

내 질문은 교활한 플레이어가 게임 (데이터)을 수정하고 시스템을 이길 수있는 문제없이 클로킹 ( '쉬머', la HotS 사용)을 구현할 수 있는 방법 있는지 여부 입니다. 이것이 가능합니까, 그렇지 않은 경우,이 메커니즘을 가진 다른 멀티 플레이어 게임은 이것을 어떻게 처리합니까? LoL 스타일의 보이지 않는 부분 만 취소 할 수 있습니까?

나는 서버가 항상 가짜 '클로킹'위치를 보내는 것에 대해 생각했지만, 이것은주의를 기울이는 공정한 플레이어에게도 해를 끼치 지 않습니다.


Related는 link 이지만 다른 서버 (서버에서 처리 할 수 ​​있음)에 대해 묻는 것이 아니라 클로킹 된 단위를 표시하는 것입니다.
Underflow

이것은 좋지 않은 제안이지만 서버에서 모든 그래픽 렌더링을 수행 한 다음 각 플레이어 화면을 클라이언트에게 브로드 캐스트 할 수 있습니다. 그들은 입력 만 보내고 출력 만 보냅니다. 클라이언트는 비디오를 간단히 표시하고 오디오를 재생하는 얇은 쉘입니다.
user137

빌립 은 그곳에서 아주 좋은 생각을 가지고있었습니다. 경계 상자와 skillshots 등과의 교차점을 여전히 알고 있어야한다고 덧붙이고 싶습니다. 경계 상자를 보내는 경우 스마트 코더는 어떤 캐릭터가 보이지 않는지 (다른 영웅이있는 경우) 리버스 엔지니어링 할 수 있습니다. 적중시 트리거되는 효과가있는 경우 상자 또는 효과의 위치 및 스케일과 같은 것을 보내야합니다. 더 추상적 인 모든 것이 더 많다는 것을 명심하십시오
Greaka

플레이어 좌표 전송을 중단하여 LoL 스타일 클로킹을 실제로 구현할 수는 없습니다. 캐릭터가 그려지지 않더라도 다른 방식으로 맵 (및 다른 플레이어)과 상호 작용할 수 있어야합니다. 그러나 "감지 가능한"스텔스 (발자국, 쉬머 등)를 구현하면 어쨌든 게임 모딩 문제를 해결할 인센티브가 많이 사라집니다. 클로킹 된 캐릭터를 감지하고 넘어가는 방법을 배우십시오.
Spooniest

2
@TheSpooniest : 당신이 의미하는 바를 설명 할 수 있습니까? 플레이어 좌표를 보내는 것을 중단하여 LoL 스타일 클로킹을 실제로 구현할 수 없습니까? 플레이어 A가 보이지 않고 서버가 더 이상 좌표를 플레이어 B와 C에게 보내지 않아도 서버는 여전히 A의 위로 B의 캐릭터 이동을 거부함으로써 플레이어 A와 B 간의 충돌을 처리 할 수 ​​있습니다 (보행 한 것처럼) 벽으로). A (아직 보이지 않는)가 스킬을 B에게 발사하면 서버는 단순히 " x에서 y 방향으로 발사 된 스킬 d 에서 A 방향으로 A"를 B와 C로 보낼 수 있습니다 .
Underflow

답변:


20

쉽게 악용하지 않으면 쉬머 효과를 구현할 수 없습니다. 그러나 누군가가 주변에 있음을 보여주는 간접적 수단, 눈에 보이는 플레이어에게도 적용되는 수단을 사용한다면 어떨까요?

예를 들어, 플레이어가 발자국을 떠나고 "발자국이 생성 된"메시지가 플레이어 위치와 상관없이 서버에서 전송되면 어떻게됩니까? 모든 플레이어는 발자국을 남기므로 경기장을 가리지 않고 발자국 모델을 더 잘 보이게 만들 수 없으며 모든 개별 인쇄물을 눈에 띄지 않게 만들 수 있지만 플레이어가 눈에 보이는 캐릭터가없는 발자국을 보는 경우 누군가가 있다는 것을 알고 있습니다.

또한 작은 노약자가 노크하거나 잔디를 밟을 때 바스락 거리는 소리, 누군가 물을 지나갈 때 나타나는 잔물결 같은 것들을 할 수 있습니다. '표지판'이 특정 위치 나 재료에만 적용되는 경우, 보이지 않는 캐릭터가 조심스럽게 움직여서 자신의 위치를 ​​잃어 버리는 것을 피하는 전략을 추가 할 수 있습니다.


without making it easy to exploit-> 이것은 특정 게임 메커니즘뿐만 아니라 모든 게임 메커니즘에 적용됩니다 .
S. Tarık Çetin

12
마지막 단락과 관련하여 : 보이지 않는 플레이어가 이러한 일을 일으키는 유일한 일이면 해킹에 유용한 정보를 제공 한다는 점을 명심하십시오 . 그러나 임의의 이벤트 나 다른 플레이어 동작을 통해 때때로 각각을 트리거 할 수도 있습니다. 이는 해킹을 방해하는 소음을 발생시키고 환경을 훨씬 더 생생하고 역동적으로 보이게하는 부작용이 있습니다.
Philipp

2
이것은 매우 흥미로운 아이디어입니다, 감사합니다! '발자국'의 경우, 이것은 스텔스 플레이어가 대상의 (오래된) 발자국을 '내부로 걸어'보내어 다른 사람들에게 몰래 들어 와서 더 현실적으로 (즉, 뒤에서 오는) 보상을 줄 수 있습니다. 누군가 발자국 텍스처 (또는 당신이 가지고있는 것)를 더 분명하게 만들었더라도, 그것들을 밟으면 디스플레이 지속 시간 만 새로 고칠 것입니다.
언더 플로

3
물론,이 경우 어떤 트랙이 새로운 트랙인지를 보여주기 위해 클라이언트 쪽 핵을 만들 수 있습니다.
Muhd

3
클라이언트 측 핵은 플레이어의 위치와 일치하지 않는 영역에서 생성 된 풋 프린트를 강조 할 수 있습니다.
Edward Coffey

31

이 사이트에있는 멀티 플레이어 게임에서 부정 행위를 방지하는 방법에 대한 수많은 다른 질문을 보면 클라이언트 측 부정 행위를 방지 할 수있는 기술적 수단이 없다는 것을 쉽게 알 수 있습니다.

클로킹 된 엔터티에 대한 정보를 적게 제공 하기 만하면됩니다. 왜곡 효과를 렌더링하려면 모든 클라이언트가 해당 위치에 무언가 가려져 있다는 것을 알아야합니다. 그러나 정확히 무엇인지, 얼마나 많은 건강을 남겼는지, 지금 무엇을하고 있는지와 같이 그것에 대해 구체적으로 알 필요는 없습니다. 게임에 따라 그 자체만으로도 플레이어에게 게임 변경 정보가 부족할 수 있습니다.


6
"정보가 부족"하면 "정보가 정확하지 않습니다". 서버쪽에 유지되는 단일 임의 방향으로 10 피트 오프셋 (예 : 10 피트)을 선택하고 대신 해당 위치를 보냅니다. 무작위로 다른 만남에서 거짓 반짝 거리는 문자를 추가하십시오. "그것을 보았습니까?
Keeta-복원 Monica Monica

2
@Keeta 만약 이것을 사용한다면, 신호 필터 또는 엔티티의 방향을 향한 임의의 종류의 랜덤 워크를 사용하여 매끄럽게 (매번 완전히 임의의 값을 생성하지 않기) 원할 것입니다. 그것이 너무 불안하면 눈에 분명합니다. 따라서 운동 중에 숨기고 정지 상태에서 숨길 수있는 플레이어의 능력의 균형을 유지해야합니다. 후자는 더 효과적 일 것입니다.
네이트 다이아몬드

@NateDiamond 그렇습니다. 그렇기 때문에 서버가 실제 위치의 특정 오프셋을 만듭니다. 그런 다음 실제 액터가 이동함에 따라 오프셋으로 인해 쉬머도 이동합니다. 쉬머가 움직일 때 조심스럽게 관찰하면 실제 배우의 위치를 ​​추론 할 수 있지만 약간의 작업이 필요합니다. 보이지 않는 것이 현실이고 현실에서이 빛을 비추었다면,이 여분의 초점이 보이지 않는 것을 극복하기 위해 정확히 필요한 것 같아요.
Keeta-복원 Monica Monica

wallhack-proof 서버를 만들기 위해 ioquake3 의 흥미로운 수정 사항과 실제로 효과가있는 유일한 방법이있었습니다 . 아이디어는 플레이어 A가 B의 위치 정보를 수신해야하는지 결정하기 전에 플레이어 A가 다른 플레이어 B를 볼 수 있는지 (즉, 벽이나 다른 분리가 시야를 차단하지 않는지) 서버 측에서 확인하는 것이 었습니다. 그들이 쓸모 없게되었던 wallhacks. 따라서 요점은 아무도 데이터를 조작하지 못하도록하는 유일한 방법은 정보를 전혀 제공하지 않는 것입니다.
gaborous

@gaborous 그것은 특히 모든 진드기마다 모든 플레이어를 위해 비싼 검사입니다. 비용이 많이 들지만 개발자는 서버의 비용과 능력을 고려해야합니다.
네이트 다이아몬드

1

예, 고객에게 보내는 모든 정보는 의도 한 것보다 더 분명하게 보일 수 있습니다. 그러나 여기 트릭이 있습니다.

영향 완화

물론, 클라이언트는 정보를 가지고 있을지 모르지만, 어떤 정보를 기꺼이 공유 할 것인지, 플레이어가 무엇을 할 수 있는지에 대해 신중하게 생각함으로써 최소한 클라이언트 해킹의 영향을 완화 할 수 있습니다.

1. 플레이어는 무엇을 관찰합니까?

  1. 당신은 그 자리에 특징이있는 캐릭터를 볼 수 있습니다 :이 경우 클라이언트는 모든 정보를 가지고 있으며 해킹은 단순히 망토를 취소 할 수 있습니다
  2. 당신은 그 자리에 무언가를 본다 :이 경우 클라이언트는 위치 정보를 가진다. 위치를 명확하게 만들 수 있지만 다른 정보는 여전히 숨겨져 있어야합니다.
  3. 당신은 무언가를 관찰하지만 그 자리에 없습니다

에이. 당신은 무언가를 보았지만 그 자리에 없었습니다 (브릿지 또는 부시 이동, 그러나 큰 것이므로 어디로 향 해야할지 알 수 없습니다. 발자국은 2 초 지연으로 만 보입니다) :이 경우 클라이언트는 정확히 어디에 / 무엇이 아니라

비. 당신은 다른 방식으로 무언가를 관찰합니다 (무엇이 해당 지역에 있으면 소리; 방향이 있거나없는 레이더와 같은 근접 표시)

질문의 스크린 샷은 정보가 제한되어 있기 때문에 1에서 2 사이 인 것처럼 보이지만 여전히 일부 정보를 제공 할 수있는 개요를 볼 수 있습니다.

2. 플레이어는 무엇을 할 수 있습니까?

누군가가 XY 좌표에 있다고 생각하면 어떻게 할 수 있습니까? 다음은 몇 가지 일반적인 선택입니다.

공격

  1. 마치 은폐되지 않은 것처럼 그를 공격 할 수 있습니다
  2. AOA 공격 / 함정으로 그를 공격 할 수 있습니다.
  3. 당신은 적극적으로 그를 은폐하고 나중에 만 공격 할 수 있습니다
  4. 당신은 전혀 그를 공격 할 수 없습니다

움직이는

  1. 움직일 때 엔진이 우회적으로 우회하는 것을 알 수 있습니다
  2. 목표를 향해 정상적으로 걷기 시작하지만 숨겨진 캐릭터에 도달하면 그 주위를 움직이거나 멈 춥니 다.
  3. 당신은 숨겨진 캐릭터에 의해 차단되지 않습니다

경로 선택이 일반적으로 클라이언트 측에서 수행되는 경우


입력 해 주셔서 감사합니다. 어쨌든 사람들이 보이지 않는 캐릭터로 '범프'하게 할 계획이었습니다. 왜냐하면 서버가 계산하고 처리 할 수 ​​있기 때문입니다. 사운드 아이디어는 깔끔하고 미묘한 방식으로 사운드를 변경하는 것 (텐션, Jaws )은 멋지지만 더 큰 사운드 파일이나 심지어는 일부 닫히는 소리가 들리는 음성 파일로 쉽게 대체되지 는 않습니까 ?
언더 플로

1
'a'의 선을 따라 또 다른 아이디어 : 쉬머가 클로킹 된 플레이어 근처에 무작위로 나타날 수 있지만 정확한 위치에는 나타나지 않습니다. 서버가 단순히 쉬머의 위치를 ​​보내면 클라이언트는 실제로 그 반대로 리버스 엔지니어링을 할 수 없습니다. 실제로, 클로킹 된 플레이어가 완전히 보이는 경우에도 여전히 정비공으로 작동합니다.
Jezzamon

1
@ Jezzamon 예, 일종의 '변위'기계공도 시원합니다. 그러나 망토 상황에서는 효과가 없을 것입니다. 나는 반짝이는 모습을하고있는 선수들을 처벌하고 싶지 않습니다. 예를 들어 skillshots를 목표로하려면 반짝이는 '정확한'위치를 가져야합니다.
언더 플로

-2

리플 효과는 쉐이더 코드를 통해 수행 될 수 있습니다. 이 모드에서 텍스처 사용을 비활성화하면 단순한 텍스처 변경이 더 이상 문제가되지 않습니다.

3D에서 모델이 작동 할 때 모델 표면 만 사용하여 색상을 버리고 굴절을 시뮬레이션하는 셰이더로 변경할 수 있습니다. 어떻게 든 모델을 교체하더라도 효과는 유지됩니다.

사전 컴파일 된 셰이더를 수정하는 것은 게임 코드를 수정하는 것만 큼 어렵고 게임 파일 내의 일부 텍스처 조회보다 한 단계 어렵다고 생각합니다.


3
당신은 실제 질문을 놓쳤다. 그러한 왜곡 효과를 기술적으로 만드는 방법에 관한 것이 아닙니다. 플레이어에게 노출 할 수있는 유용한 정보를 제공하지 않고 클라이언트에게 렌더링 할 정보를 제공하는 방법에 관한 것입니다.
Philipp

1
글쎄, 나는 이것을 해결한다 Which means that players that change the texture or model or even the game code itself could render the cloak mechanic useless. 그리고 왜 질문을 놓쳤는 지 알 수 없습니다 whether there is some way to implement cloaking (with a 'shimmer', à la HotS), without having the issue that crafty players can modify the game (data) . A : 쉬머로 클로킹하는 광고, B : 단순한 텍스처 변경보다 수정하기가 어렵습니다. 실제로 렌더링하는 것은 또 다른 측면입니다. 위치가 리플 효과를 적용해야하는 유일한 위치이면 플레이어에게 전송되는 유일한 데이터 여야합니다.
화성

2
과거에 클라이언트 측 핵을 개발했습니다. 셰이더를 수정하기 어렵다는 개념은 매우 오해의 소지가 있습니다. 그렇습니다. 가장 기본적인 형태의 공격을 막을 수 있지만 괜찮은 구글 푸를 가진 사람은 오후에 알아낼 수 있습니다. 이제 적절한 해커를 상대로 게임을 시작하고 클라이언트 측 치트가 좋아질 때까지 시간이 얼마나 걸리는지 확인하십시오.

클라이언트 쪽을 악용 할 수 있으므로 모든 답변에 의견을 복사하여 붙여 넣습니다. 코드를 수정하는 것이 어렵지 않다는 것을 알고 있지만 (AAA 게임에는 봇, 해킹, 개조가 있습니다) 쉐이더 잔물결 효과에 대한 특정 지침을 찾는 것보다 게임 파일에서 반투명 텍스처를 찾는 것이 더 쉽다는 것을 알았습니다. 물론 쉐이더 파일이 일반 텍스트이고 거의 압축되지 않은 경우 어린이조차도 파일을 손상시킬 수 있습니다. 방금 "안전한 수준의 보안을 제공하기 위해 플레이어에게 전달되는 적은 데이터"하나와 결합 할 수있는 대답을했습니다. 실제 솔루션을 제공하므로 실제로 무엇이 잘못되었는지 알 수 없습니다
Mars

@Thebluefish는 공정성으로 인해 개발자 부정 행위 를 멈추려 고 시도하는 자원 소비에서 멀어 지고 대신 사기꾼을 감지하는 매우 복잡하고 모호하며 잘 구축 된 방법에 자원을 소비하고 플랫폼에서 플레이어를 공격하는 것을 금지하는 명백한 방법을 사용했습니다. Steam의 VAC와 같은 시스템을 참조하십시오).
Trotski94
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.