게임 봇은 게임 세계 및 기타 개체를 어떻게 인식합니까?


52

이 질문은 잠시 동안 제 생각에있었습니다. 주로 WoW 및 기타와 같은 모든 종류의 게임에 대한 봇을 볼 수 있기 때문입니다. 내 질문은; 봇은 화면에 무엇이 나타나는지 어떻게 알 수 있습니까? 나는 와우를 재생하지 않으므로 내 예제가 잘못되었을 수 있지만 예를 들어 몬스터가있는 경우 봇은 해당 몬스터가 화면에서 어디에 있는지 어떻게 알 수 있으며 어떻게 상호 작용하는지 알 수 있습니까?

이 게임을 모든 게임에 적용 할 수 있습니까? 아니면 각 게임마다 적용됩니까? 질문이 명확하지 않으면 유감입니다 ... 그리고 봇을 만드는 방법을 묻지 않고 화면에서 물건을 어떻게 매료시키는 지 더 묻습니다.

미리 감사드립니다 :)


14
대부분의 경우,이 봇은 게임의 메모리에 연결되어 화면에 무엇이 있는지 이해하려고하는 대신 게임 요소의 위치를 ​​직접 읽습니다.
Alexandre Desbiens 2016 년

2
Aceboy1993, 프로그래머입니까? 질문을 수정하고 어느 쪽이든 알려주십시오. 대답은 아마도 그에 따라 약간 다르게 수행되어야 할 것입니다.
Panzercrisis 2016 년

3
분명히하기 위해; 내장되지 않은 게임 플레이 자동화에 대해 이야기하고 있습니까? 금 농업 봇, 목표 로봇 등? 아니면 AI 플레이어를 의미합니까?
Anko

안녕하세요, 저는 프로그래머입니다. 그래, 나는 금 농업 봇과 목표 봇에 대해 이야기하고 있지만 AI 플레이어에도 관심이 있습니다 :)
TheRapture87

3
@ Aceboy1993 둘 다 다루면이 질문이 너무 광범위 해집니다. 그것들을 나누십시오.
마스트

답변:


77

봇이 게임에 자신을 주입 할 수있는 지점이 많이 있습니다.

  • 화면은 그중 하나이지만 가장 유용하지는 않습니다. 그러나 컬러 코딩을 사용하는 카운터 스트라이크의 초기 목표 로봇을 보았습니다. 단색 텍스처를 가진 대체 캐릭터 모델과 함께 제공되었으며 (게임은이를 가능하게하기에 충분히 모딩이 가능했습니다) 그런 다음 해당 컬러의 픽셀을 감지했습니다. 그러나 매우 효과적인 방법은 아닙니다. 그래픽 엔진은 점점 더 강력 해져서 광학 인식 알고리즘을 혼동하기 위해 점점 더 자세 해 졌기 때문에 이미 꽤 어수선했고 점점 더 실용적이지 못했습니다.

  • 또 다른 요점은 메모리를 직접 읽는 것입니다 [1] . 컴퓨터의 한 프로그램이 다른 프로그램의 메모리를 읽도록 할 수 있습니다. 따라서 개발자는 게임이 어떤 메모리 주소에서 봇과 관련된 정보를 저장하는지 알아 내면됩니다. 메모리 이미지를 만들고 다양한 검색 도구를 제공하여 개발자가 원하는 것을 찾도록 도와주는 도구가 있습니다. 대책은 주소 레이아웃 무작위 화를 사용하는 것이지만, 스마트 봇은 여전히 ​​자동으로 찾고있는 것을 찾을 수 있습니다.

  • 게임 실행 파일 자체를 수정할 수 있습니다. 이를 위해 봇 개발자는 어셈블러에서 읽고 프로그래밍 할 수 있어야하는데, 연습이 어렵지 않습니다. 그런 다음 관심있는 정보를 처리하는 코드를 찾아 다시 작성하여 봇에게 전달합니다. 게임 개발자의 관점에서 가능한 대책은 obfuscator를 사용하여 게임의 어셈블러 코드를 읽을 수 없게 만드는 것입니다.

  • 그리고 넷 코드가 있습니다. 온라인 게임에서 서버는 네트워크를 통해 게임 내 모든 객체의 속성과 위치를 보냅니다. 서버와 클라이언트 간의 네트워크 데이터 스트림을 가로 채서 분석 할 수 있습니다. 이 작업을 수행하는 데 가장 많이 사용되는 도구는 wireshark입니다. 개발자가 넷 코드를 리버스 엔지니어링 할 때 Wireshark처럼 네트워크 트래픽을 가로 채고 정보를 사용하여 결정을 내릴 수있는 봇을 작성할 수 있습니다. 개발자가 더 동기 부여를 받으면 네트워크 프로토콜을 구현하고 그래픽 출력없이 게임을하는 완전한 게임 클라이언트를 처음부터 개발할 수 있습니다. 이러한 봇은 그래픽 출력이 없으면 클라이언트가 일반적으로 훨씬 더 리소스 친화적이기 때문에 작은 서버에서 한 번에 많은 서버를 실행할 수 있기 때문에 금 농부에게 매우 인기가 있습니다.


1 : WoW에 대해 언급 했으므로 초기의 악명 높은 WoWGlider 보팅 프로그램은 직접 메모리 액세스를 사용했음을 지적하는 것이 좋습니다. 블리자드에는 외부 프로그램이 WoW의 내부 게임 상태에 액세스하는 것을 감지하고 차단하도록 설계된 Warden이라는 하위 프로그램이 있습니다. 봇 프로그램이 이러한 보호를 우회하고 허가없이 메모리를 읽은 이후, 2006 년 소송 MDY v Blizzard봇 제작자가 사용자 가 저작권 침해를 저지르고 DMCA를 위반할 수 있도록 격려하고 블리자드를지지하기로 결정했습니다 .


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Josh

18

봇은 플레이어입니다. 그들은 다른 모든 플레이어와 마찬가지로 서버에서 플레이어 / 몬스터의 위치를 ​​읽고 간단한 AI 스크립트와 결합 된 값을 사용하여 프로그래밍 방식으로 키보드 스트로크와 마우스 클릭을 시뮬레이션하여 게임에서 동작을 수행합니다. 봇에 실제로 화면에 괴물이 무엇인지 감지하고 그와 상호 작용하는 알고리즘이 있다면 수백만의 가치가있는 매우 인상적인 소프트웨어가 될 것입니다. 기본적으로 로봇을위한 AI입니다.


2
봇이 몬스터를 본 적이 있는지 확인한 다음 애니메이션 상태를 사용하여 몬스터가하는 일을 확인하기 위해 오 클루 전 검사 및 레이 캐스트를 수행하는 것이 더 간단합니다.
ratchet freak

그렇게하려면 게임을 리버스 엔지니어링하고 레이 캐스팅을 구현하고 몬스터의 애니메이션 상태를 읽어야합니다.이 경우 코드를 주입하고 .exe를 수정해야합니다. 서버에서받은 네트워크 패키지를 읽은 후 ( Phillip가 제안한 wireshark 를 사용하여 ) 네트워크 패킷을 기반으로 키보드 / 마우스 동작을 시뮬레이션하는 AI 스크립트를 사용하는 것보다 간단합니까?
dimitris93 2016 년

2
나는 개조 된 클라이언트 봇이 아니라 "AI 상대"봇을 가정했습니다.
ratchet freak

3
@ratchetfreak 아 이제 이해가 되네요. 이 질문에서 WoW 참조는 실제로 "봇"이 AI 상대가 아니라 기본적으로 금 농부라는 것을 암시합니다.
dimitris93 2016 년

7

필립은 이미 대부분의 봇이 어떻게 작동하는지에 대한 훌륭한 개요를 제공했지만, 그가 다루는 모든 유형의 봇에 대해 약간의 개인적인 경험을 쌓았 기 때문에 조금 더 자세히 설명하고 싶었습니다.

Runescape에는 Runescape 클라이언트의 메모리 내용을 로컬 메모리로 복사하는 대형 프로젝트 (RSBot)가 있었으며,이 경우 클라이언트가 걸릴 위험없이 게임의 전체 상태를 볼 수 있습니다. 데이터에 대한 포인터를 찾기 위해 메모리에서 찾을 위치를 결정하려면 약간의 리버스 엔지니어링이 필요했지만 일단 그렇게 한 후에는 정보를 활용하기 위해 API를 노출했습니다. 객체의 좌표를 얻은 다음 카메라 변환 매트릭스로 객체를 변환하여 화면상의 위치를 ​​파악함으로써 세계 어디에 있는지 정확히 알 수 있습니다. 히트 마스크도 읽을 수 있었으므로 원하는 결과를 얻기 위해 마우스를 어느 범위로 이동해야하는지 정확하게 결정하는 것은 쉽지 않았습니다.

봇은 개발자에게 어떤 타일 좌표가 어디에 있는지,이 객체에 어떤 ID가 있는지, 주어진 항목에 어떤 ID가 있는지 등을 알려주는 주석과 같은 많은 디버깅 정보를 제공했습니다.이 정보는 봇을 만드는 데 사용될 수 있습니다. 봇 스크립트를 만드는 실제 과정은 실제로 매우 간단했습니다. 이 프레임 워크는 많은 유틸리티 기능을 제공 move_to(world_coordinates)하거나 mouse_move(x,y)다소 믿을 수있는 방법으로 지정된 활동 (에 너무 반복, 임의의 스플라인을 따라 마우스를 이동 미니 맵과 화면 모두를 통해 이동 등) 수행 할 것이다

또한 Runescape에서는 그래픽 품질을 대폭 줄일 수있는 옵션이 있습니다. 실제로 세계의 모델을 만들기 위해 화면을 촬영하고 기본적인 컴퓨터 비전 개념을 적용하여 특정 종류의 봇을 만드는 것은 매우 쉽습니다. 이 기술을 사용하여 저주 봇과 제련 봇을 만들었습니다. 프레임을 가져 와서 채도를 최대한 높이고 패턴에서 패턴을 추출하여 클릭 영역에 대한 확률 맵을 생성하려고 시도합니다.

저주 봇의 경우, 대상은 작은 악마였으며, 이는 단지 큰 붉은 것입니다. 제련 봇의 경우 회색으로 둘러싸인 작은 주황색 사다리꼴을 찾고, 퍼니스가됩니다. 또한 은행 책상이 될 큰 밝은 회색 'L'모양을 찾으려고 노력했습니다. 이는 다운 스케일링과 기본 휴리스틱으로 이루어졌습니다. 또한 미니 맵 옆에있는 편리한 나침반으로 방향을 조정할 수 있으므로 대상 물체를 찾기 위해 카메라를보다 안정적인 위치에 놓을 수 있습니다.

다양한 Nexon 게임에서 서버는 클라이언트를 매우 신뢰합니다. 나는 봇이 거의 정교하지 않아도되도록 위험을 제거하거나 날실을 추가하기 위해 맵을 수정하여 Maplestory 에서이 톤을 남용했습니다. 또한 몬스터를 빠르게 찾아 죽이는 데 사용할 수있는 세계 모델을 구축하기 위해 서버와의 트래픽을 모니터링합니다.

더 이상 MMO를 더 이상 플레이하지 않고 자동화 한 것을 깨달았을 때, 나는 더 이상 게임을 중단하기로 결정했습니다. 만약 내가 자신을 법적으로 노출시키는 것에 대해 걱정하지 않았다면, 아마도 MMO 봇을 팔아 죽일 수도 있었지만 실제로는 고소를 원하지 않았습니다. 그래서 요즘 실제 프로그래밍을하는 데 시간을 보냅니다!


마지막 단락의 아멘. 나는 1) WoW를 연주함으로써 2) botting WoW를 3) WoW를위한 내 자신의 봇을 쓰기 시작함으로써 프로그래밍을 발견했다. 내가 2 년 만에 얻은 프로그래밍 지식은 내가 공부하는 동안 배운 것보다 더 중요했습니다 (적어도 '실제적인'프로그래밍).
Sebastian Graf

2

Phillip의 대답은 훌륭하지만 Model / View / Controller 패턴 또는 MVC에 대한 간단한 참고 사항입니다.

화면은 "모델"의 데이터를 표시하는 "보기"의 ​​일부이며, 원하는 경우 게임의 실제 상태입니다. 봇과 캐릭터는 모두 모델 내에 '존재'합니다. 화면을 분리했다면 화면이 사라져도 게임이 계속 될 것입니다.

네트워크 게임에서 "모델"의 개념은 실제로 많은 모델이 있기 때문에 약간 복잡합니다. 서버에 모델이 있고 각 클라이언트에 모델이 있습니다.이 모델은 서버에서받는 데이터로 인해 자체적으로 업데이트됩니다. "모델"을 서버 모델과 클라이언트 모델을 포괄하는 것으로 생각하거나 자신의 클라이언트 모델로 생각할 수 있습니다. 어느 쪽이든, 봇이 사는 곳입니다. 따라서 데이터 입력 및 상태를 줄임으로써 사용할 수있는 "인식"은 해당 시점의 모델 상태와 해당 모델 내의 여러 엔티티 / 객체 간의 상호 작용을 기반으로합니다. 실제로, 각 봇은 "refreshState"라는 함수를 가질 수 있는데,이 함수는 프레임 또는 무언가마다 한 번씩 실행되어 업데이트되도록합니다.


0

그들은 파일이나 서버에서 광선을 읽을 수 있지만 광선 충돌 감지 시스템을 사용할 수도 있습니다. 봇 (이 경우)에서 외부로가는 광선을 사용하는 것이 일반적입니다. 광선이 무언가와 충돌하면 광선이 발견 한 것이 플레이어, 봇, 동물 또는 단순한 벽과 같은 정보를 봇에 반환합니다. 예를 들어 플레이어와 봇의 경우 유형에 대한 정보 (예 : 휴먼, 봇 등)를 완전히 포함하는 보이지 않는 캡슐이 있기 때문입니다. 그것으로 그들은 예를 들어 벽과 다른 요소와 충돌하는 것을 피할 수 있습니다.

페이지의 충돌 감지 부분을 ​​볼 수 있습니다


그래도 실제 게임에 코드를 삽입해야합니다.
dimitris93

네 물론 이죠 모두 프로그래밍되어 있지만 무료 경로 또는 봇과 같은 경우 등에 유용합니다. 3D 게임에서 AFAIK가 가장 일반적인 방법이며 적어도 mmorp가 아닌 것을 연구했습니다. 아마도 와우는 서버에 대한 모든 정보를 가지고 있지만 큰 mmorp와는 다릅니다.
Megasa3 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.