2008-09-27 11 views
7

우리의 다음 프로젝트 중 하나는 최고의 플레이어에게 경품을주고 싶어하는 고객을 위해 MS Windows 기반 게임 (winform GUI와 통합 된 DirectX 디스플레이 컨트롤이있는 C#으로 작성된 것으로 가정)입니다. . 이 프로젝트는 챔피언십, 래더, 토너먼트, 플레이어 대 플레이어 액션 등으로 2 년 동안 운영 될 예정입니다.자동화에 대한 보호

주요 관심사 중 하나는 부정 행위입니다. 예를 들어 맞춤형 봇을 통해 게임을 플레이 할 수 있다면 극적으로 도움이 될 수 있습니다 (전략 결정 측면에서 볼 때 많은 시간 재생).

제 궁금한 점은 bot 활동을 탐지하기 위해 기술적으로 어떤 가능성이 있습니까? 우리는 물론, 재생 시간의 수를 추적 이상을 감지하는 전략을 분석하고 등등,하지만 지금까지이 문제에 관한 한, 나는 다른 응용 프로그램이 있는지 검색하는 방법을

  • 처럼 알고 세부 사항에 더 관심이 될 수 있습니다 정기적 인 스크린 샷을 만드시겠습니까?
  • 다른 응용 프로그램이 프로세스 메모리를 검사하는지 어떻게 감지합니까?
  • 사용자 입력 (마우스 동작, 키보드 입력)이 사람이 생성하고 자동화되지 않았는지 확인하는 좋은 방법은 무엇입니까?
  • 다른 응용 프로그램이 응용 프로그램의 컨트롤 (컨트롤의 위치 등)에 대한 정보를 요청하는지 여부를 감지 할 수 있습니까?
  • 치터가 현재 게임 상태에 대한 정보를 수집하고이를 봇에 공급하고 결정한 행동을 클라이언트에게 다시 보낼 수있는 다른 방법은 무엇입니까?

귀하의 의견은 대단히 감사합니다!

+0

다른 컴퓨터를 카메라와 가짜 키보드/마우스에 쉽게 연결할 수 있습니다. 어떤 것을 모두 패배시킬 것입니까? –

+0

다른 카메라는 필요 없습니다. VM 내부에서 실행하면 봇이 외부에서 실행됩니다. –

답변

0

Punkbuster, Valve Anti-Cheat 및 일부 포인터에 대한 기타 다른 속임수에 대해 알아봐야합니다.

편집 : 내 말은, 에 들어가는 방법은입니다. 그들이 어떻게 그 물건을 감지하는지.

+0

우리는 이미 Punkbuster 외를 조사했지만, 우리가 이해하고있는 한, 그 도구의 주된 목적은 알려진 사기꾼, 악용 등을 탐지하는 것입니다. 우리의 경우, 제한된 사용자 기반으로 인해 적용되지 않을 것입니다. 관례에 의하여 만들어진 속임수를 만날 확률이 높을. 편집 : 새로운 응답 주셔서 감사합니다. 당신이 말한 것을 이해하지만 예를 들어 펑크 터스터 (Punkbuster)는 (주로이 분야의 다른 제품들과 동일합니다) 주로 바이러스 검색의 일종으로, 불명확 한 메모리 지문, 프로세스, API 변경 등을 검색합니다. (또한 http : //en.wikipedia.o – Grimtron

5

'사기꾼'이 가상 머신 (예 : VM웨어)에서 소프트웨어를 실행하고 그 스크린 샷을 만들면 어떻게 될까? 나는 당신이 그것을 방어 할 수 있을지 의심 스럽다.

분명히 '아날로그 간격'을 방어 할 수는 없습니다. 사기꾼의 시스템은 고품질의 카메라로 외부 스크린 샷을 만듭니다. 단지 이론적 인 문제 일뿐입니다.

아마도 체스 사이트를 조사해야합니다. 체스에는 많은 돈이 있습니다. 그들은 봇을 싫어합니다. 아마도 그들은 이미 해결책을 생각해 냈을 것입니다.

+0

참조 VM에 대해서만 - Shader Model 2.0을 게임용으로 사용할 수 있습니다. 현재 하드웨어에서 VM을 실행할 수 없습니다. – OregonGhost

0

Intenet Chess Club의 BlitzIn 프로그램은 프로그램 전환 감지 기능을 통합 한 것으로 보입니다. 그것은 물론 측면에있는 체스 엔진을 사용하는 사람을 감지하고 자신의 경우에 직접적으로 적용 할 수는 없지만 프로세스 X가 다음 Y주기보다 Z % CPU 시간 이상 소요되는 것과 같이 apporach를 추정 할 수 있습니다. 봇 실행 중.

경연 대회 규칙의 일환으로 "경품 행사를 위해 게임을하는 동안 다른 것을 실행해서는 안됩니다."외에도 경연 규칙이 적용됩니다.

또한 "우리는 당신이 봇을 사용하고 실격당하는 어떤 이유로 든 언제든지 결정할 수 있습니다."규칙은 위의 휴리스틱 접근 방법 (귀중한 ICC 체스 토너먼트에서 사용됨)에도 도움이됩니다.

이러한 모든 질문에 쉽게 위의 규칙 1에 의해 해결된다 :

* how to detect if another application makes periodical screenshots? 
* how to detect if another application scans our process memory? 
* what are good ways to determine whether user input (mouse movement, keyboard input) is human-generated and not automated? 
* is it possible to detect if another application requests informations about controls in our application (position of controls etc)? 

내가 할 수있는 좋은 방법을 생각 열심히 크래커에 문제는 서버에서 게임 상태의 유일한 권위있는 사본을하는 것입니다 , 오직 클라이언트와의 송수신 만 가능하기 때문에 통신 프로토콜 자체의 클라이언트 유효성 검증에 포함시킬 수 있습니다 (즉, 금이 간 것이 아니므로 탐지 규칙이 그대로 유지됩니다). 새로운 이상한 행동에 대해 적극적으로 모니터링하면 원하는 위치로 가까이 갈 수 있습니다.

+2

소프트웨어를 실행하는 오래된 컴퓨터는 어떻습니까? –

+0

절대적으로는 아니지만 컴퓨터 자체에 상대적으로 작동해야합니다. 어떤 경우 든 휴리스틱 스 이상, 나머지는 가장 관련성이 높은 것입니다. imo –

3

자동화에 대한 최상의 보호는 연삭이 필요한 작업을 수행하지 않는 것입니다.

자동화가 감지되는 가장 좋은 방법은 적극적으로 사용자를 참여시키고주기적인 CAPTCHA 형 테스트를 요구하는 것입니다 (이미지 등을 제외하고는 제외). 나는 수천 개의 간단한 일회성 질문의 데이터베이스를 이용하여 사용자에게 자주 제기하는 것을 권장합니다.

그러나 귀하의 질문에 따라 최선의 방법은 C#의 자동 방지 기능을 구현하지 않는 것입니다. 모든 해커가 ring0에 들어가기 만하면 모든 표준 방법을 통해 탐지되는 것을 피하기 위해 관리 코드 내에서 잘 작성된 해킹/봇을 탐지 할 가능성은 거의 없습니다. 나는 모든 Windows API 함수를 연결하고 "부적절한"호출을 감시하는 Kernel-Mode Driver와 결합 된 Warden-like 접근법 (사용자가 원할 때마다 업데이트 할 수있는 다운로드 가능 모듈)을 권장합니다. 그러나 오탐 (false positive)이 많으므로 금지 된 시스템을 자동화 된 데이터에 기반하지 않아야합니다. 금지하기 전에 항상 인간의 모습을 유지하십시오.

+0

테스트가 게임 플레이에 완벽하게 통합 될 수 있다면 좋은 생각입니다. –

1

나는 PUNKBUSTER와 같은 softwar가 어떻게 작동하는지에 대한 더 깊은 이해가없는, 그러나 이것은 내가 가고 싶어 방법입니다 :

Iintercept는 ReadProcessMemory, WriteProcessMemory의 같은 메모리 물건을 처리하는 API 함수 호출 등등.

프로세스가 호출과 관련되어 있으면이를 감지하여 기록하고 트램 폴린을 호출하여 원래 기능으로 되돌릴 수 있습니다.

이것은 스크린 샷 찍기에도 효과가 있지만 BitBlt 기능을 가로채는 것이 좋습니다.

다음은 기능 차단에 관한 기본적인 튜토리얼입니다 : Intercepting System API Calls

7

내가 d2botnet, 닷넷 디아블로 2 자동화 엔진 한참을 작성을하고, 잘못된 있습니다에 대한 당신이 일의 목록에 추가 할 수있는 뭔가가 조심/잘못된/위조 된 패킷. 이 게임이 TCP를 통해 통신한다고 가정합니다. 패킷 스니핑과 단조는 보통 게임 (온라인 어쨌든)이 자동화 된 첫 번째 방법입니다. 블리자드가 기형의 패킷을 탐지 할 것이라는 것을 알고 있습니다. 나는 d2botnet에서 벗어나려고 노력했습니다.

잘못된 패킷을 감지했는지 확인하십시오. 그들을 암호화하십시오. 해쉬. 그 (것)들이 유효하다는 것을 확인하기 위하여 somethign를하십시오. 당신이 그것에 대해 생각한다면 누군가가 모든 패킷의 의미를 정확히 알 수 있다면 클라이언트 소프트웨어를 실행할 필요가 없기 때문에 어떤 프로세스 기반 탐지가 논점이 될 수 있습니다. 따라서 클린트가 응답하는 방법을 알아야하는 일종의 패킷 기반 챌린지 응답을 추가 할 수도 있습니다.

+0

중요하게는 첫 번째 릴리스를 암호화해야합니다. 사실, 공격자가 데이터가 어떻게 보이는지 알기 때문에 이미 패배했습니다. 패킷을 어떻게 변환하는지 파악해야합니다. ... 그들은 디버거를 사용하여 암호화를 리버스 엔지니어링 할 수는 없지만 적어도 네트워크 스택에 데이터가 없으면 다른 난독 화 방법을 제공합니다. –

+1

ollydbg와 같은 디스어셈블러와 디버거는 어떨까요? 이것은 무명이지만 보안으로 나를 때린다. – rook

2

응용 프로그램에서 키보드 및 마우스 입력을 수신하는 일반적인 방법은 SetWindowsHookEx를 사용하여 Windows 후크를 설정하는 것입니다. 일반적으로 공급 업체는 설치 중에 소프트웨어를 보호하려고하므로 해커가 응용 프로그램을 자동화하고 균열을 찾아서 찾지 않습니다. Google 용어 : "키 로거"... 문제를 설명하는 article은 다음과 같습니다.